[英]How do I stop bot messages duplicating in my code
@bot.event
async def on_message(message):
if message.content.upper().startswith(">>AEROSPACE"):
time.sleep(1) #
botmessage = await bot.send_message(message.channel, "<@"+message.author.id+"> " + "**your role has been added.**")
async def addrole(ctx):
member = ctx.message.author
server = ctx.message.server
role = server.roles("Aerospace")
await bot.add_roles(member, role)
time.sleep(1.5) #
await bot.delete_message(message)
time.sleep(1.5) #
await bot.delete_message(botmessage)
我已经尝试了很多不同的方法,但是它行不通,这是第5行中的代码重复出现。 如果需要,我可以发送错误
我不太确定重复消息的全部内容,因为我没有收到消息,因此请检查您是否在后台运行了多个机器人实例。
但是,处于当前状态的代码不会添加角色,而只是创建一个协程以添加角色。
此外,你应该取代所有time.sleep(1)
与await asyncio.sleep(1)
自time.sleep()
阻止(这意味着它会阻止你的机器人的所有其他功能和事件来执行,而它的暂停)
要使用addrole()
协程,您需要将其拉出并在on_message
事件中等待它
所以最终可能看起来像
@bot.event
async def on_message(message):
if message.content.upper().startswith(">>AEROSPACE"):
await asyncio.sleep(1) #
botmessage = await bot.send_message(message.channel, "<@"+message.author.id+"> " + "**your role has been added.**")
await addrole(message)
await asyncio.sleep(1.5) #
await bot.delete_message(message)
await asyncio.sleep(1.5) #
await bot.delete_message(botmessage)
async def addrole(message):
member = message.author
server = message.server
role = get(server.roles,name="Aerospace")
await bot.add_roles(member, role)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.