#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