введите идентификатор гильдии/идентификатор участника в discord.py

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

Вопрос:

Я пытаюсь удалить роль, используя функцию on_raw_rwaction_переставить роль remove_roles:

Потому что у меня нет guild_id/member_id on_raw_reaction_remove доступа, я пытаюсь сделать это сам, но получил эту ошибку:

Ignoring exception in on_raw_reaction_remove - AttributeError: 'NoneType' object has no attribute 'request

(и строка 45 [ guild = await(bot.fetch_guild(payload.guild_id)) ] вызывает ошибку)

Вот код, который я сейчас использую:

     @commands.Cog.listener()
    async def on_raw_reaction_remove(self, payload):

        ourMessageID = 867876893411508234

        if ourMessageID == payload.message_id:
            
            guild = await(bot.fetch_guild(payload.guild_id))
            print("fetch successful")
            

            if payload.emoji.name == 'YouTube':
                role = discord.utils.get(guild.roles, name="YouTube")
                print("Role checked")

            elif payload.emoji.name == 'Twitch':
                role = discord.utils.get(guild.roles, name="Twitch")

            elif payload.emoji.name == 'Discord':
                role = discord.utils.get(guild.roles, name="Discord")

            elif payload.emoji.name == 'alert':
                role = discord.utils.get(guild.roles, name="Community-Events")

                member = await(guild.fetch_member(payload.user_id))
                print(member)
                if member is not None:
                    await member.remove_roles(role)
                else:
                    print("Member not found")
 

(Я не получаю ответа от двух отпечатков)

Если бы я мог сделать что-то другое/более простое, пожалуйста, дайте мне знать!

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

1. Вы убедились payload.guild_id , что это действительно int так ?

2. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Обратная связь») в вопрос (не комментарий) в виде текста (не скриншот, не ссылка на внешний портал). Есть и другая полезная информация.

3. ошибка может свидетельствовать о том, что payload.guild_id это None

4. попробуйте использовать get_member/get_guild и удалите await, а await-это ключевое слово, поэтому оно не нуждается в круглых скобках

Ответ №1:

Полезной нагрузки, которой у него нет guild id , но она есть channel_id , user_id и message_id поэтому вы можете использовать ее channel id для извлечения channel object , а затем использовать message id для получения message object и guild_id извлечения из нее

 @bot.event
async def on_raw_reaction_add(payload):
    channel = await bot.fetch_channel(payload.channel_id) # returns channel object
    message = await channel.fetch_message(payload.message_id)# returns message object
    guild_id = message.guild.id #returns guild id

    #REST OF THE CODE
 

Ответ №2:

Теперь это сработало для меня, спасибо за помощь:

     @commands.Cog.listener()
    async def on_raw_reaction_remove(self, payload):

        ourMessageID = 867876893411508234

        if ourMessageID == payload.message_id:
            emoji = payload.emoji.name
            guild = await self.bot.fetch_guild(payload.guild_id)
            member = await guild.fetch_member(payload.user_id)

            #REST OF THE CODE