如何在我的代码中停止复制机器人消息

问题描述 投票:0回答:1
@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行的代码重复自己。如果需要,我可以发送错误

python python-3.x discord discord.py
1个回答
0
投票

我不太清楚重复的消息是什么,因为我没有得到它,所以检查你是否有多个机器人在后台运行。

但是,处于当前状态的代码不会添加角色,只会创建一个协程来添加角色。

此外,你应该用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) 
© www.soinside.com 2019 - 2024. All rights reserved.