Если вы являетесь разработчиком бота для Discord, то вам может понадобиться удалить все сообщения в определенном текстовом канале. Это может быть полезно, например, при очистке канала или при его подготовке к использованию.
В этой статье мы рассмотрим, как сделать это с помощью Discord.py – библиотеки для разработки ботов для платформы Discord.
Первым шагом будет установка Discord.py. Мы можем сделать это с помощью командной строки (терминала) при помощи команды:
pip install discord.py
После установки библиотеки мы создаем файл python и импортируем следующие модули:
import discord from discord.ext import commands
Затем мы создаем клиента Discord и аутентифицируем его, используя токен:
client = commands.Bot(command_prefix=’$’) token = ‘your_token_here’ client.run(token)
После этого мы создаем функцию delete_messages(), которая будет удалять все сообщения из указанного канала:
async def delete_messages(ctx): channel = ctx.channel messages = 1000 await channel.purge(limit=messages)
В этой функции мы получаем объект канала через контекст (ctx), который является объектом, представляющим текущую команду. Затем мы устанавливаем значение переменной messages на 1000, что означает, что мы хотим удалить до 1000 сообщений в канале. Вы можете установить это значение на любое число до 1000.
Как создать бота для Discord? #4 | Удаление сообщений | Команда /clear | discord.py
Наконец, мы используем метод purge() объекта канала, чтобы удалить все сообщения. Метод принимает аргумент limit, который ограничивает количество сообщений, которые будут удалены. Мы передаем messages в качестве значения limit.
Теперь мы можем использовать эту функцию в команде, чтобы удалить все сообщения в канале. Для этого нам нужно добавить декоратор команды и вызвать функцию delete_messages() внутри нее:
Чтобы использовать команду clear, пользователь должен написать в текстовом канале следующее сообщение:
$clear
В этом случае все сообщения в канале будут удалены, и бот отправит сообщение «All messages have been deleted.»
Как удалить последнее сообщение бота Discord? — Discord.py
Но когда я пытаюсь запустить команду, она удаляет сообщения, но выдает эту ошибку, когда пытается удалить сообщение:
Ignoring exception in command purge: Traceback (most recent call last): File «/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py», line 85, in wrapped ret = await coro(*args, **kwargs) File «main.py», line 312, in purge await ctx.message.delete() File «/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/message.py», line 1023, in delete await self._state.http.delete_message(self.channel.id, self.id) File «/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/http.py», line 250, in request raise NotFound(r, data) discord.errors.NotFound: 404 Not Found (error code: 10008): Unknown Message The above exception was the direct cause of the following exception: Traceback (most recent call last): File «/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/bot.py», line 939, in invoke await ctx.command.invoke(ctx) File «/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py», line 863, in invoke await injected(*ctx.args, **ctx.kwargs) File «/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py», line 94, in wrapped raise CommandInvokeError(exc) from exc discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NotFound: 404 Not Found (error code: 10008): Unknown Message
Adelto 18 Июл 2021 в 14:06
2 ответа
Лучший ответ
Discord.py: Making a Discord bot (Part 4: Clear)
Поздний ответ, но я думаю, это может вам помочь. Используя свой код, все, что вам нужно сделать, это сохранить сообщение, которое вы только что отправили, в переменную, а затем удалить это сообщение.
UnderGame 11 Сен 2021 в 17:08
Вместо этого вы можете попробовать следующее:
delete_after удаляет сообщение, отправленное ботом, через определенное количество секунд.
Источник: question-it.com
python Discord.py удалить все сообщения в текстовом канале
ПРИМЕЧАНИЕ. Выполнение этого будет работать только для сообщений с 14 днями и старше, и вы не сможете удалить более 100 сообщений одновременно, то есть набрав это !clear 120 приведет к возникновению ошибки. Однако это не невозможно. Вы можете добавить while цикл там, если вы действительно хотели, но это может привести к неожиданным результатам.
Теперь, что, если у вас есть сообщения старше 14 дней? Вы не можете использовать Client.delete_messages(list_of_messages) . Вместо этого вы можете использовать Client.delete_message(Message) это приведет к удалению только одного сообщения за раз. Да, я знаю медленно, но пока что все, что у нас есть. Таким образом, вы можете изменить исходный код, чтобы он logs_from() каждый раз, когда он зацикливается в logs_from() .
Что-то вроде этого:
Вы можете получить список всех сообщений в канале, используя client.logs_from(someChannel) . Оттуда просто используйте client.delete_message(msg) .
Используя пример, указанный в readme репо repord.py в качестве базы, вот метод, который должен работать для Python 3.5. Запустите это с помощью “! Clear”:
Так как это на самом деле работает по шагам?
Источник: techarks.ru