Удалить сообщение без атрибута ctx - PullRequest
1 голос
/ 28 мая 2020

Проблема

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

 @commands.Cog.listener()
async def on_message(self, message):
    musicchannel = self.bot.get_channel(705116959804489898)
    if message.content.startswith('-p'):
        if message.channel.id == musicchannel.id:
            pass
        else:
            await message.channel.send("```ini\n[Music commands only in the appropriate channel]```", delete_aft$
            await asyncio.sleep(4)
            message.delete()

Обычно у вас есть аргумент ctx, поэтому он такой же простой, как ctx.message.delete(), но он не будет работать в в этом случае.

То, что я пробовал

Я попытался получить сообщение с помощью self.bot.fetch_message(message.id), но бот не принимает атрибут fetch_message ().

Решение

Почему-то я этого не сразу заметил, но все, что вам нужно, это await, так как .delete() - это совместная процедура.

1 Ответ

1 голос
/ 28 мая 2020

Все, что вам не хватает, это await. Поскольку delete() является сопрограммой, вам просто нужно изменить событие так, чтобы:

@commands.Cog.listener()
async def on_message(self, message):
    musicchannel = self.bot.get_channel(705116959804489898)
    if message.content.startswith('-p'):
        if message.channel.id == musicchannel.id:
            pass
        else:
            #code
            await message.delete()

Ссылки:

...