Python 当用户对特定通道中的消息作出反应时,分配不协调角色

Python 当用户对特定通道中的消息作出反应时,分配不协调角色,python,python-3.x,discord,discord.py,Python,Python 3.x,Discord,Discord.py,我希望当用户在我的欢迎和角色不和谐频道中选择某个反应时,为其分配一个角色。我到处都找过了,在python中找不到与最新版本的discord.py一起工作的代码。以下是我到目前为止的情况: import discord client = discord.Client() TOKEN = os.getenv('METABOT_DISCORD_TOKEN') @client.event async def on_reaction_add(reaction, user): role_ch

我希望当用户在我的欢迎和角色不和谐频道中选择某个反应时,为其分配一个角色。我到处都找过了,在python中找不到与最新版本的discord.py一起工作的代码。以下是我到目前为止的情况:

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)
导入不一致
client=discord.client()
TOKEN=os.getenv('METABOT\u DISCORD\u TOKEN')
@客户端事件
反应添加时的异步定义(反应,用户):
角色\u频道\u id='700895165665247325'
如果反应.message.channel.id!=角色\u频道\u id:
返回
如果str(reaction.emoji)==“”:
等待客户端。添加_角色(user,name='War Thunder')
打印(“服务器正在运行”)
client.run(令牌)

使用
打开原始反应添加
而不是
打开反应添加
,因为只有当消息在bot的缓存中时
打开反应添加
才会起作用,而
打开原始反应添加
无论内部消息缓存的状态如何都会起作用

所有的ID,角色ID,通道ID,消息ID…,都是整数而不是字符串,这就是代码不工作的原因,因为它比较INT和STR

你还需要得到这个角色,你不能只是传递角色的名字

下面是工作代码

@client.event
原始反应添加上的异步def(有效负载):
如果payload.channel_id==123131和payload.message_id==12121212:#通道和消息id应为整数:
如果str(payload.emoji)==“”:
role=discord.utils.get(payload.member.guild.roles,name='War Thunder')
等待有效负载。成员。添加_角色(角色)
编辑:对于原始反应上的
删除

@client.event
异步def on_raw_reaction_remove(有效负载):
如果payload.channel_id==123131和payload.message_id==12121212:#通道和消息id应为整数:
如果str(payload.emoji)==“”:
#我们不能使用payload.member,因为它不是用于原始反应移除的东西
帮会=bot.get\u帮会(payload.guild\u id)
member=guild.get_member(有效负载.用户id)
role=discord.utils.get(guild.roles,name='warthunder')
等待成员。添加_角色(角色)

程序有什么问题?你在添加一个反应时会出错吗?或者代码没有做任何事情?我没有得到任何错误代码,但是代码没有做任何事情。明白了。现在,要在移除反应时移除角色,我不应该只需要在\u raw\u reaction\u remove上使用吗?但是这段代码不起作用:
py async def on_raw_reaction_remove(payload):#通道和消息id应该是整数:if payload.channel_id==700895165665247325和payload.message_id==756577133165543555:if str(payload.emoji)!=“”:role=discord.utils.get(payload.member.guild.roles,name='War Thunder')等待payload.member.remove_roles(role)
我在删除对消息的反应时遇到此错误:
第25行,在on_raw_reaction中\u remove guild=bot.get_guild(payload.guild\u id)AttributeError:模块“discord.ext.commands.bot”没有属性“get\u guild”