#bots #discord.py #roles
#боты #discord.py #роли
Вопрос:
У меня есть это встраивание с правилами на мой сервер discord, и у встраивания также есть реакция, реакция — это галочка (✅). Если вы отреагируете на это внедрение с помощью этого флажка, вы получите роль «Подтвердить», и ваша реакция будет удалена.
Так что это всегда будет одна реакция, и если вы отреагируете, вы получите роль «Подтвердить», и ваша реакция будет удалена. Но в этом проблема, я не получаю свою роль, когда реагирую, и моя реакция также не удаляется. У меня нет никаких ошибок, не знаю, как это исправить.
Это мой код
@bot.command(name='rules', pass_ctx=True)
async def rules(ctx):
rules_embed = discord.Embed(title='DISCORD RULES', color=0xf30000)
rules_embed.add_field(name="**1. No spamming** ", value="Don't send a lot of small/big messages right after "
"each other. Do not disrupt chat by spamming.",
inline=False)
rules_embed.add_field(name="**2. No NSFW material** ", value="This is a community server and not meant to "
"share this kind of material.", inline=False)
rules_embed.add_field(name="**3. No bullying or threats** ", value="Threats to other users of DDoS(Distributed "
"Denial of Service), Death, DoX/Doxx, abuse, "
"and other "
"malicious threats are absolutely not okay.",
inline=False)
rules_embed.add_field(name="**4. Don't beg for ranks** ", value="Don't beg for staff or other ranks", inline=False)
rules_embed.add_field(name="**5. No racism** ", value="Racism is absolutely not okay in this discord server",
inline=False)
rules_embed.add_field(name="**6. Have fun** ", value="Just have fun and be nice", inline=False)
send_rules = await ctx.message.channel.send(embed=rules_embed)
reactions = ['✅']
for i in reactions:
await send_rules.add_reaction(i)
@bot.event
async def on_raw_reaction_add(payload):
channel = bot.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
guild = bot.get_guild(payload.guild_id)
reaction = discord.utils.get(message.reactions, emoji=payload.emoji.name)
# only work if it is the client
if payload.member.id == bot.user.id:
return
if payload.message_id == 784182764009947177 and reaction.emoji == '✅':
roles = discord.utils.get(guild.roles, name='Verify')
await payload.member.add_roles(roles)
await reaction.remove(payload.member)
Спасибо за помощь!
Комментарии:
1. какие намерения вы включили?
2.У меня есть
intents = discord.Intents.default()
intents.members = True
3. В этом проблема?
Ответ №1:
У вас было несколько ошибок в коде, я исправил их и прокомментировал некоторые из них. Пожалуйста, проверьте следующий КОД.
@bot.event
async def on_raw_reaction_add(payload):
#You forgot to await the bot.get_channel
channel = await bot.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
guild = bot.get_guild(payload.guild_id)
#Put the following Line
member = guild.get_member(payload.user_id)
reaction = discord.utils.get(message.reactions, emoji=payload.emoji.name)
# only work if it is the client
if payload.user_id == bot.user.id:
return
if payload.message_id == 784182764009947177 and reaction.emoji == '✅':
roles = discord.utils.get(guild.roles, name='Verify')
await member.add_roles(roles)
await reaction.remove(payload.member)
Комментарии:
1. Я попробовал код, который вы прислали, но он не сработал, я получил несколько ошибок. Это ошибки ` File»C:/Users/Admin/PycharmProjects/Rosy.Dc.py/main.py «, строка 97, в on_raw_reaction_add channel = await bot.get_channel(payload.channel_id) Ошибка типа: текстовый канал объекта не может быть использован в выражении «await» Во время обработки вышеупомянутого исключения, возникло другое исключение: `
2. Удалите ожидание из bot.get_channel и попробуйте.
3. О, извините, я должен был прочитать ошибку, но большое спасибо за помощь, теперь это работает!