Python 当用户对特定通道中的消息作出反应时,分配不协调角色
我希望当用户在我的欢迎和角色不和谐频道中选择某个反应时,为其分配一个角色。我到处都找过了,在python中找不到与最新版本的discord.py一起工作的代码。以下是我到目前为止的情况: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
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”