2 votes

discord.py : Récupérer l'avatar de l'utilisateur à partir du message au lieu du ctx

Les gars, je travaille actuellement sur une fonction dans mon bot discord qui renverrait la photo de profil de la personne qui est mentionnée après !pfp. Le problème est le suivant : Tout mon bot a travaillé avec des instructions if dans la section on_message() ce qui signifie que je n'utilise pas la fonction ctx, si cela a un sens pour vous.

D'après ce que j'ai lu en ligne, les réponses ne vous donnent qu'un code du genre async def avatar(ctx, *, member: discord.Member = None): .

Je ne suis même pas sûr que vous puissiez le faire de la manière dont je le veux, mais je veux juste demander avant. Voici le code

import *

@client.event
async def on_message(message):

    async def pfp():
        try:
            person = message.content.split(" ", -1)[1]
            person = pers.replace("<", "")
            person = pers.replace("@", "")
            person = pers.replace(">", "")
            person = int(pers)

            # we have the id of the user in a variable

            pic = person.avatar_url
            embed = discord.Embed(title=f"profile pic of <@{person}>",
                                  color=0x3a88fe)
            embed.set_image(url=pic)
            await message.channel.send(embed=embed)

        except IndexError:
            authorProfilePicture = message.author.avatar_url
            a = message.author
            print(type(a))
            await message.channel.send(authorProfilePicture)

    if message.content.startswith("!pfp"):
        await pfp()

C'est ce que j'essaye de faire, mais le code ne reconnaît pas le nom de l'utilisateur. person car il s'agit d'une variable int et non d'une variable discord.Member ou autre.

Merci si vous avez pris le temps de lire ceci, et pour ceux d'entre vous qui aideront !

1voto

puncher Points 218

Vous y étiez presque. Votre erreur est, comme vous l'avez déjà réalisé, que person est toujours un ID et par conséquent de type int qui n'a pas d'attribut avatar_url .

Pour obtenir le discord.User il suffit de faire bot.get_user() .
Votre code ressemblerait à cela (j'ai changé un peu les variables) :

bot = commands.Bot()

@bot.event
async def on_message(message: discord.Message):

    async def pfp():
        try:
            person_mention = message.content.split(" ", -1)[1]
            person_mention = person_mention.replace("<", "")
            person_mention = person_mention.replace("@", "")
            person_mention = person_mention.replace(">", "")

            person_id = int(person_mention)
            person = bot.get_user(person_id)
            avatar_url = person.avatar_url

            embed = discord.Embed(title=f"Profile picture of {person}")
            embed.set_image(url=avatar_url)
            await message.channel.send(embed=embed)

        except IndexError:
            avatar_url = message.author.avatar_url

            embed = discord.Embed(title=f"Profile picture of {message.author}")
            embed.set_image(url=avatar_url)
            await message.channel.send(embed=embed)

    if message.content.startswith("!pfp"):
        await pfp()

Références :

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