Я не совсем уверен, что такое дублирование сообщения, так как я не получаю его с моей стороны, поэтому проверьте, есть ли у вас несколько экземпляров бота, работающего в фоновом режиме.
Ваш код в его текущем состоянии, однако, не добавляет роль, он просто создает сопрограмму для добавления роли.
Кроме того, вы должны заменить все 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)