我目前正在为一个小型社区 Discord 服务器编写一个角色机器人,作为学习 python 3 和整个 Discord 库的一种手段。我在互联网上到处乱逛尝试其他解决方案,但我显然错过了一些东西。希望得到一些关于问题所在的指导或想法,因为它没有返回任何错误。
@client.event
async def on_ready():
channel = client.get_channel(<ChannelID>) #set channel to #rules
if isinstance(channel, discord.TextChannel):
text = "Please read the #rules and react for verification."
emoji = await channel.send(text)
await emoji.add_reaction('✅')
#When reaction
@client.event
async def on_reaction_add(reaction, author):
channel = client.get_channel(<ChannelId>) #Update channel as redundancy
if reaction.message.channel is not None and channel:
return
if reaction.emoji == "✅":
author = reaction.author
role = await reaction.author.guild.get_role(<RoleID>)
await author.add_roles(role) #Checks for correct reaction and adds role
reaction.message.delete()
我尝试过导入额外的库,例如输入额外的功能,我尝试过异步 On_Reaction、On_Ready,甚至 On_Message。我确实有表情符号库,以防出现问题。机器人的角色也高于它尝试分配的角色,机器人具有主持人权限、行会成员权限以及所有在我看来对此有帮助的权限,即:
读取消息历史记录 创建表达式 创造反应 温和会员 管理角色 创建消息
我也尝试过 user.guild.roles 和用于分配的author.guild.roles。
您的代码片段中有一些错误。首先是 on_reaction_add 事件是在 on_ready 事件内部定义的,该事件可能无法按预期工作,因为它不受支持。其次,在文档中,我们有discord.on_reaction_add(reaction, user),它具有参数类discord.Reaction和(Union[discord.Mmeber, discord.User]。您正试图得到这个:
await reaction.author.guild.get_role(<RoleID>)
https://discordpy.readthedocs.io/en/stable/api.html#discord.Reaction从这里正确的方法是
await reaction.message.guild.get_role(<RoleID>)
然后我们有这个:
author = reaction.author
你已经有了作者,所以没有理由尝试改变它。该事件返回反应和用户,其中用户是做出反应的人。
在此处查看文档:https://discordpy.readthedocs.io/en/stable/api.html搜索discord.on_reaction_add