discord.py on_member_join() не работает

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

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

Вопрос:

заранее: я уже перепробовал множество потенциальных исправлений, доступных при переполнении стека. К сожалению, ни один из них не работал.

Вот код:

 import discord
import asyncio
import datetime
from discord.ext import commands

bot = commands.Bot(command_prefix='!', case_insensitive=True)

@bot.event
async def on_ready():
    print('bot is online')
    return await bot.change_presence(activity=discord.Activity(type=2, name='bla'))

@bot.event
async def on_member_join(member):
    embed = discord.Embed(colour=0x95efcc, description=f"Welcome! You are the {len(list(member.guild.members))} Member!"),

    embed.set_thumbnail(url=f"{member.avatar_url}")

    embed.set_author(name=f"{member.name}", url=f"{member.avatar_url}", icon_url=f"{member.avatar_url}")

    embed.set_footer(text=f"{member.guild}", icon_url=f"{member.guild.icon_url}")

    embed.timestemp = datetime.datetime.utcnow()

    channel = bot.get_channel(id=012391238123)

    await channel.send(embed=embed)

bot.run('Token')
  

Бот входит в систему, но не выполняет on_member_join . Кто-нибудь знает, что может быть не так? on_message работает нормально.

 intents = discord.Intents.all()
client = discord.Client(intents=intents)
  

не помогло, и в discord developer это также проверяется (намерение участников сервера).
Бот также имеет права администратора

Приветствую Эдуарда


Короче говоря, решение:

 imports
intents = discord.Intents(messages=True, guilds=True, members=True)
bot = commands.Bot(command_prefix='!', intents=intents, case_insensitive=True)

@bot.event
async def on_member_join(member):
    embed = discord.Embed(colour=0x95efcc, description=f"Welcome to my discord server! You are the {len(list(member.guild.members))} member!")
channel = bot.get_channel(id=12931203123)

await channel.send(embed=embed)

bot.run('token')
  

Комментарии:

1. Вы используете декоратор @bot.command() , но вы определяете client = discord.Client , что, вероятно, захотите изменить это на bot = commands.Bot(command_prefix='your prefix', intents=intents)

2. Оу, да. На самом деле у меня это уже так: bot = commands . Бот(command_prefix=’!’, case_insensitive=True) Я просто пропустил это в своем коде выше — извините!

3. но вы добавили туда намерения?

4. guild_subscriptions Включено?

5. Ребята! Спасибо вам обоим — это сработало! :)))) Я изменю приведенный выше код!

Ответ №1:

Ах, так вот оно что. Поскольку вы используете commands.Bot , bot.get_channel это больше не функция (поскольку ее больше discord.Client нет). Попробуйте использовать member.guild.get_channel вместо этого.

Документация