Отправьте сообщение пользователю, когда он уходит с сервера в discord.py — discord.errors.Запрещено: 403 Запрещено (код Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Отправьте сообщение пользователю, когда он уходит с сервера в discord.py — discord.errors.Запрещено: 403 Запрещено (код

Сообщение Anonymous »

Что я хочу сделать
Я создаю бота Discord, используя discord.py для обучения. Я хотел бы отправить пользователю личное сообщение, когда он покидает сервер, которому принадлежит бот.

Проблема
Отправка с помощью команды косой черты работает, а отправка с помощью on_member_remove() — нет. Возникает следующая ошибка.

Код: Выделить всё

Traceback (most recent call last):
File "C:\Users\my-name\OneDrive\Desktop\test-app\.venv\Lib\site-packages\discord\client.py", line 449, in _run_event
await coro(*args, **kwargs)
File "c:\Users\my-name\OneDrive\Desktop\test-app\test_cog.py", line 11, in on_member_remove
await self.send_farewell_dm(member)
File "c:\Users\my-name\OneDrive\Desktop\test-app\test_cog.py", line 15, in send_farewell_dm
await dm_channel.send("See you!")
File "C:\Users\my-name\OneDrive\Desktop\test-app\.venv\Lib\site-packages\discord\abc.py", line 1618, in send
data = await state.http.send_message(channel.id, params=params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\my-name\OneDrive\Desktop\test-app\.venv\Lib\site-packages\discord\http.py", line 752, in request
raise Forbidden(response, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50007): Cannot send messages to this user
Вот мой код
test_main.py

Код: Выделить всё

from test_bot import TestBot

def run() -> None:
bot = TestBot()

@bot.event
async def on_ready() -> None:
#load a cog file
await bot.load_extension("test_cog")

#Enable slash commands
guild = bot.get_guild(123456789012345678) # dummy
bot.tree.copy_global_to(guild=guild)
await bot.tree.sync(guild=guild)

bot.run("DICORD_BOT_TOKEN", root_logger=True)

if __name__ == "__main__":
run()
test_bot.py

Код: Выделить всё

import discord
from discord.ext import commands

class TestBot(commands.Bot):

def __init__(self) -> None:
super().__init__(
command_prefix = "!",
intents = discord.Intents.all(),
application_id = 987654321098765 # dummy
)
test_cog.py

Код: Выделить всё

import discord
from discord import app_commands
from discord.ext import commands

class TestCog(commands.Cog):
def __init__(self, bot:commands.Bot) -> None:
self.bot = bot

# Forbidden Error!
@commands.Cog.listener()
async def on_member_remove(self, member:discord.Member) -> None:
await self.send_farewell_dm(member)

async def send_farewell_dm(self, member:discord.Member) -> None:
dm_channel = await member.create_dm()
await dm_channel.send("See you!")

# Success
@app_commands.command()
async def send_hello_dm(self, interaction:discord.Interaction) -> None:
dm_channel = await interaction.user.create_dm()
await dm_channel.send("Hello!")

async def setup(bot: commands.Bot) -> None:
await bot.add_cog(TestCog(bot))
Моя рабочая среда
  • Windows 11
  • VS Code
  • Python 3.12.5
  • virtualenv 20.26.5

Код: Выделить всё

Package            Version
------------------ -------
aiohappyeyeballs   2.4.1
aiohttp            3.10.6
aiosignal          1.3.1
async-timeout      4.0.3
attrs              24.2.0
charset-normalizer 3.3.2
discord.py         2.4.0
frozenlist         1.4.1
idna               3.10
multidict          6.1.0
peewee             3.17.6
pillow             10.4.0
pip                24.2
python-dotenv      1.0.1
yarl               1.12.1
Что я пробовал

Конфиденциальность и безопасность Discord

Я проверил мои настройки приложения Discord. Кажется, все в порядке.

Снимок экрана моей конфиденциальности и безопасности

Отправьте личное сообщение нескольким пользователям

Я попробовал отправить личное сообщение на 3 Discord учетные записи с помощью on_member_remove(). Только один из них получил его благополучно. Другие этого не сделали. Произошла ошибка.

Буду признателен, если кто-нибудь поможет мне устранить ошибку.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ord-errors
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»