@sadrui

Как сделать так, чтобы бот игнорировал ошибку, связанную с лс, и продолжал выполнять команду?

команда связана с отправкой сообщений в лс всем участникам сервера.

У некоторых участников сервера закрыты лс, поэтому бот перестает выполнять команду и выдает такую ошибку :
disnake.errors.HTTPException: 400 Bad Request (error code: 50007): Cannot send messages to this user
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/container/.local/lib/python3.9/site-packages/disnake/ext/commands/bot_base.py", line 591, in invoke
await ctx.command.invoke(ctx)
File "/home/container/.local/lib/python3.9/site-packages/disnake/ext/commands/core.py", line 914, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "/home/container/.local/lib/python3.9/site-packages/disnake/ext/commands/core.py", line 182, in wrapped
raise CommandInvokeError(exc) from exc
disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: HTTPException: 400 Bad Request (error code: 50007): Cannot send messages to this user


Вот сама команда:
@bot.command()
async def spamon(ctx):
    for guild in bot.guilds:
        for member in guild.members:
             await member.send("Привет!")
             print("Отправил " + str(member))
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Как и всегда, исключение можно поймать и обработать, например, проигнорировать или выполнить какие-то альтернативные действия.

try:
    await member.send("Привет!")
except disnake.ext.commands.errors.CommandInvokeError:
    print(f"Написать {member} не удалось")


Но вообще спамить в ЛС - это ненормальный сценарий использования Discord API, и за это бота могут заблокировать. Правильнее писать в каналы, для чего имело смысл с самого начала заложить в бота понятие "канал для уведомлений", чтобы все пользователи бота его заранее настроили на своих серверах.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы