- ВКонтакте
- РћРТвЂВВВВВВВВнокласснРСвЂВВВВВВВВРєРСвЂВВВВВВВВ
- РњРѕР№ Р В Р’В Р РЋРЎв„ўР В Р’В Р РЋРІР‚ВВВВВВВВРЎР‚
- Viber
- Skype
- Telegram
Как сделать удаление сообщения, на которое ответили в дискорд на библиотеке Disnake
Я хочу сделать команду для удаления сообщения, на которое ответили этой самой командой. Мне не нужно использовать purge поскольку оно чистит весь чат, а мне нужно сделать удаление конкретного сообщения.
Я пробовал делать при помощи атрибут reference, однако выдавало ошибку.
@bot.slash_command(name='delete_message', description='Для удаления сообщения введите эту команду ответом на сообщение, которое вы хотите удалить.)
async def delete_message(self, ctx):
db = sqlite3.connect(database)
c = db.cursor()
if ctx.message.reference:
if c.execute("SELECT level FROM users WHERE id = ?",
(ctx.author.id, )).fetchone()[0] > 0:
await ctx.message.channel.delete_messages(ctx.message.reference.message_id)
else:
await ctx.response.send_message(f'Вам нужно использовать команду ответом на сообщения для его удаления.')
db.commit()
db.close()
Вот ошибка
Ignoring exception in slash command 'delete_message': Traceback (most recent call last): File "C:\Users\zzz03\AppData\Local\Programs\Python\Python312\Lib\site-packages\disnake\ext\commands\slash_core.py", line 728, in invoke await call_param_func(self.callback, inter, self.cog, **kwargs) File "C:\Users\zzz03\AppData\Local\Programs\Python\Python312\Lib\site-packages\disnake\ext\commands\params.py", line 1083, in call_param_func return await maybe_coroutine(safe_call, function, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\zzz03\AppData\Local\Programs\Python\Python312\Lib\site-packages\disnake\utils.py", line 567, in maybe_coroutine return await value ^^^^^^^^^^^ File "D:\Projects\Pups_bot\cogs\Moderation.py", line 254, in delete_message if ctx.message.reference: ^^^^^^^^^^^ AttributeError: 'ApplicationCommandInteraction' object has no attribute 'message'
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File "C:\Users\zzz03\AppData\Local\Programs\Python\Python312\Lib\site-packages\disnake\ext\commands\interaction_bot_base.py", line 1378, in process_application_commands await app_command.invoke(interaction) File "C:\Users\zzz03\AppData\Local\Programs\Python\Python312\Lib\site-packages\disnake\ext\commands\slash_core.py", line 737, in invoke raise CommandInvokeError(exc) from exc disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'ApplicationCommandInteraction' object has no attribute 'message'
Ответы (1 шт):
Command raised an exception: AttributeError: 'ApplicationCommandInteraction' object has no attribute 'message'
Для самого начала хочу подметить, что IDE Вам сразу выдает ошибку, что объект ACI не имеет атрибута message. Если Вы не очень поняли, про что я говорю, то советую немного изучить ООП питона и попрактиковаться в работе с этим. Проверить, какие атрибуты имеет объект можно в документации Disnake
Также в Slash-командах вместо объекта ctx (который используется в текстовых командах) используется inter (interaction), это связанно с тем, что Slash-команды работают через взаимодействия и ctx там банально работать не будет. Но если Вы все-таки сделаете это через обычную текстовую команду, то используйте функцию:
await ctx.message.reference.resolved.delete()
А реализацию подобного конкретно в Slash-команде я не представляю, ибо объект класса такого атрибута не имеет, и в принципе по логике взаимодействовать с message не может.
Также лично от себя советую проверку уровня администратора вынести в отдельную функцию, чтобы множество раз не дублировать её в своих командах