問題描述
我希望用戶在我的歡迎和角色不和諧頻道中選擇某個反應時被分配一個角色.我到處尋找,在 python 中找不到適用于最新版本 discord.py 的代碼.這是我目前所擁有的:
I want a user to be assigned a role when they choose a certain reaction in my welcome-and-roles discord channel. I've looked everywhere and can't find code in python that works with the most up-to-date version of discord.py. Here is what I have so far:
import discord
client = discord.Client()
TOKEN = os.getenv('METABOT_DISCORD_TOKEN')
@client.event
async def on_reaction_add(reaction, user):
role_channel_id = '700895165665247325'
if reaction.message.channel.id != role_channel_id:
return
if str(reaction.emoji) == "<:WarThunder:745425772944162907>":
await client.add_roles(user, name='War Thunder')
print("Server Running")
client.run(TOKEN)
推薦答案
使用 on_raw_reaction_add
而不是 on_reaction_add
,因為 on_reaction_add
只有在消息在 bot 的緩存中,而 on_raw_reaction_add
將工作,無論內部消息緩存的狀態如何.
Use on_raw_reaction_add
instead of on_reaction_add
, As on_reaction_add
will only work if the message is in bot's cache while on_raw_reaction_add
will work regardless of the state of the internal message cache.
所有的 IDS、角色 ID、頻道 ID、消息 ID...,都是 INTEGER 而不是 STRING,這就是您的代碼無法正常工作的原因,因為它將 INT 與 STR 進行比較.
All the IDS, Role IDs, Channel IDs, Message IDs..., are INTEGER not STRING, that is a reason why your code not works, as its comparing INT with STR.
另外還要獲取角色,不能只傳入角色的名字
Also you need to get the role, you can't just pass in the name of the role
下面是工作代碼
@client.event
async def on_raw_reaction_add(payload):
if payload.channel_id == 123131 and payload.message_id == 12121212: #channel and message IDs should be integer:
if str(payload.emoji) == "<:WarThunder:745425772944162907>":
role = discord.utils.get(payload.member.guild.roles, name='War Thunder')
await payload.member.add_roles(role)
對于 on_raw_reaction_remove
@client.event
async def on_raw_reaction_remove(payload):
if payload.channel_id == 123131 and payload.message_id == 12121212: #channel and message IDs should be integer:
if str(payload.emoji) == "<:WarThunder:745425772944162907>":
#we can't use payload.member as its not a thing for on_raw_reaction_remove
guild = bot.get_guild(payload.guild_id)
member = guild.get_member(payload.user_id)
role = discord.utils.get(guild.roles, name='War Thunder')
await member.add_roles(role)
這篇關于當用戶對某個頻道中的消息做出反應時分配不和諧角色的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!