Получите информацию в функции, чтобы использовать ее в другой функции DISCORD.PY

#python #discord.py

Вопрос:

у меня небольшая проблема с моим кодом, и я не нахожу никаких решений,…

Я пишу код для своего бота discord :

 @client.event
async def on_message(message):
        if message.content.startswith("!init"):
                if message.content.split()[1] == 'règles':
                        id_channel = 893442599019511829
                        embed = discord.Embed(title = 'Création bot', description = "par Archi's modo")
                        embed.add_field(name="Règlement de la LSPD", value="En cliquant sur l'icône ✅ vous reconnaissez avoir blablabla,...")
                        mess = await client.get_channel(id_channel).send(embed=embed)
                        await mess.add_reaction('✅')

@client.event
async def on_raw_reaction_add(payload):
    id_channel = 893442599019511829
    id_message = ?????
    role_a_donner =  "zabloublou"
    message_id = payload.message_id
    member = payload.member
    if message_id == id_message:
        guild_id = payload.guild_id
        guild = discord.utils.find(lambda g : g.id == guild_id, client.guilds)
 
        if payload.emoji.name == '✅': 
            role = discord.utils.get(guild.roles, name=str(role_a_donner))
        else:
            role = discord.utils.get(guild.role, name=payload.emoji.name)
 
        if role is not None:
            if member is not None:
                await member.add_roles(role)
                channel = client.get_channel(id_channel)
                await channel.send(member.mention)
 

И я не знаю, как я могу получить идентификатор сообщения, отправленного ботом, чтобы использовать его в своей функции on_raw_reaction_add

Кто-нибудь может мне помочь, пожалуйста ?

Ответ №1:

Вам следует рассмотреть возможность использования wait_for вместо этого для такого рода использования.Ваш метод в основном используется для ролей реагирования. Вот пример реакции wait_for, полученной от discord.py документы для wait_for:

 @client.event
async def on_message(message):
    if message.content.startswith('$thumb'):
        channel = message.channel
        await channel.send('Send me that 👍 reaction, mate')

        def check(reaction, user):
            return user == message.author and str(reaction.emoji) == '👍'

        try:
            reaction, user = await client.wait_for('reaction_add', timeout=60.0, check=check)
        except asyncio.TimeoutError:
            await channel.send('👎')
        else:
            await channel.send('👍')