Похоже, вы задаете несколько вопросов здесь:
У меня проблема, когда у 'bot' нет атрибута 'delete_channel'
Бот не имеет функции delete_channel()
. Однако класс Discord.TextChannel
имеет функцию .delete()
( показано в документах ).
и я также хочу сделать так, чтобы бот игнорировал реакцию, если бот реагирует на сообщение
Альтернатива 1
Каждый пользователь, включая пользователи бота, имеют атрибут .bot
. Вы можете использовать это, чтобы проверить, является ли пользователь ботом, и, если это так, вернуть функцию раньше.
@bot.event
async def on_reaction_add(reaction, user):
if user.bot: return
# Code goes here
Обратите внимание, что он прослушивает все реакции, а не только указанное сообщение c; таким образом, получается: ...
Альтернатива 2
Как упоминает Патрик Хау, вы можете использовать функцию discord.Client.wait_for()
( do c link ) и проанализировать функцию в качестве check
аргумента функции.
reaction, user = bot.wait_for('reaction', check=lambda reac: reac.author == ctx.author)
* Обратите внимание, что этот подход не добавляет этот код ни к какому событию (как в первом альтернативном варианте), кроме события команды. Он будет запускаться только один раз для каждой полученной команды, если только он не введен в некоторые oop некоторых типов.