Python Discord on_member_join

#python #python-3.x #discord #bots

#python #python-3.x #Discord #боты

Вопрос:

Извините меня за мой плохой английский 🙂

У меня проблема в том, что бот Discord, над которым я работаю, не отправляет личные сообщения участникам после их присоединения. Я попробовал несколько решений, предложенных в других сообщениях о переполнении стека, но это не работает.

 import discord

client = discord.Client()

@client.event
async def on_member_join(member):
    print(f'Someone joined')
    await member.send("You joined")

client.run("XXX")
  

Но функция никогда не выполняется.
Если я использую точно такой же код в команде, например ?join , как в следующем примере, это работает!

 import discord
from discord.ext import commands

client = commands.Bot(command_prefix='?')

@client.command()
async def join(ctx):
    member = ctx.message.author
    print(f'Someone joined')
    await member.send("You joined")

client.run("XXX")
  

Так я ошибаюсь, думая, что on_member_join это больше не работает? Что я делаю не так?

Спасибо за ваше время 🙂

Ответ №1:

По состоянию на discord.py версия 1.5 , Intents для типов событий корзины должна быть указана ботом перед использованием. Для события on_member_join необходимо установить значение intent of discord.Intents.members True .

Простой способ сделать это заключается в следующем:

 intents = discord.Intents.default()
intents.members = True
client = commands.Bot(command_prefix='?', intents=intents)
  

discord.py в версии 1.5 указано, что если намерения не указаны, разрешаются все намерения, кроме Intents.members и Intents.presences .

Более подробную информацию о намерениях можно найти здесь: Намерения шлюза в discord.py