2 votes

Bot de bienvenue Discordpy

J'ai essayé de créer un bot qui envoie un embed sur un canal spécifique à chaque fois qu'un utilisateur rejoint mon serveur. Le code ressemble à ceci

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

intents = discord.Intents()
intents.members = True
intents.messages = True
intents.presences = True

bot = commands.Bot(command_prefix="a!", intents=intents)

@bot.event
async def on_ready():
    print('Bot is ready.')

@bot.event
async def on_member_join(ctx, member):
    embed = discord.Embed(colour=0x1abc9c, description=f"Welcome {member.name} to {member.guild.name}!")
    embed.set_thumbnail(url=f"{member.avatar_url}")
    embed.set_author(name=member.name, icon_url=member.avatar_url)
    embed.timestamp = datetime.datetime.utcnow()

    channel = guild.get_channel(816353040482566164)

    await channel.send(embed=embed)

et j'ai eu une erreur

Ignoring exception in on_member_join
Traceback (most recent call last):
  File "C:\Users\Piero\AppData\Roaming\Python\Python39\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\Piero\Documents\Discord\a-chan\achan_bot\main.py", line 24, in on_member_join
    channel = guild.get_channel(816353040482566164)
NameError: name 'guild' is not defined

Quelqu'un sait-il ce qui ne va pas dans mon code ?

2voto

Jacob Lee Points 3361

Tout d'abord, en regardant le discord.py documention , ctx n'est pas transmis à la on_member_join référence de l'événement. Cependant, vous pouvez utiliser le attributs de member dont est passé afin d'obtenir les valeurs dont vous avez besoin.

@bot.event
async def on_member_join(member):
    embed = discord.Embed(
        colour=0x1abc9c, 
        description=f"Welcome {member.name} to {member.guild.name}!"
    )
    embed.set_thumbnail(url=f"{member.avatar_url}")
    embed.set_author(name=member.name, icon_url=member.avatar_url)
    embed.timestamp = datetime.datetime.utcnow()

    channel = member.guild.get_channel(816353040482566164)
    await channel.send(embed=embed)

Il est intéressant de noter que vous avez fait cela parfaitement pour obtenir le nom de la guilde, mais il semble que vous ayez oublié de faire la même chose lors de la récupération du nom de la guilde. channel .

0voto

Dominik Points 2160

Vous n'avez pas défini guild . Pour définir votre guilde, vous pouvez procéder comme suit :

guild = bot.get_guild(GuildID)

C'est la même méthode que vous avez utilisé pour définir votre channel juste pour votre guild maintenant.

Pour plus d'informations, vous pouvez consulter la documentation : https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.get_guild

Tenez également compte du fait que nous ne disposons pas d'un paramètre tel que ctx dans un on_member_join événement. L'événement a juste le paramètre member dans votre cas :

@bot.event
async def on_member_join(member): #Removed ctx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X