繁体   English   中英

如何停止代码中重复的漫游器消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM