Как остановить сообщения бота, дублирующие мой код - PullRequest
0 голосов
/ 26 января 2019
@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.Я могу отправить ошибку, если требуется

1 Ответ

0 голосов
/ 26 января 2019

Я не совсем уверен, что такое дублирование сообщения, так как я не получаю его с моей стороны, поэтому проверьте, есть ли у вас несколько экземпляров бота, работающего в фоновом режиме.

Ваш код в его текущем состоянии, однако, не добавляет роль, он просто создает сопрограмму для добавления роли.

Кроме того, вы должны заменить все 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) 
...