我正在为我的不和谐频道开发一个机器人,并且我正在学习python,同时我想在用户添加反应时发挥作用,我想出的代码就是这个
@client.event
async def on_reaction_add(reaction, user):
ChID = '487165969903517696'
if reaction.message != ChID:
return;
if user.reaction.emoji == "":
CSGO = discord.utils.get(user.server.roles, name="CSGO_P")
await client.add_roles(user, CSGO)
但是它根本不起作用,我基本上想要的是在此通道ID为487165969903517696的通道中发送的消息,然后我的机器人发送了包含“ role = emoji”内容的嵌入消息。像CSGO =:runner:一样,然后将那些反应表情符号添加到其消息中(嵌入),现在我想说的是,如果用户单击其中一个表情符号,则该机器人必须赋予他/她一个类似于CSGO_P
的角色通过这种方式,我最初想到了一个on_message事件,并且运行良好,但我认为如果他们添加反应而不是输入例如CSGO,这对用户更加友好,而我刚开始使用python(2天前)< / p>
答案 0 :(得分:1)
返回后,您有一个;
。
另外,您使用user.reaction.emoji
而不是reaction.emoji
这个
@client.event
async def on_reaction_add(reaction, user):
ChID = '487165969903517696'
if reaction.message.channel.id != ChID:
return
if reaction.emoji == "":
CSGO = discord.utils.get(user.server.roles, name="CSGO_P")
await client.add_roles(user, CSGO)
应该工作正常
答案 1 :(得分:1)
@tristo @帕特里克·豪 谢谢你们!效果很好...我混合了您的两个想法并提出了这个想法,效果很好!
@client.event
async def on_ready():
Channel = client.get_channel('YOUR_CHANNEL_ID')
Text= "YOUR_MESSAGE_HERE"
Moji = await client.send_message(Channel, Text)
await client.add_reaction(Moji, emoji='')
@client.event
async def on_reaction_add(reaction, user):
Channel = client.get_channel('YOUR_CHANNEL_ID')
if reaction.message.channel.id != Channel
return
if reaction.emoji == "":
Role = discord.utils.get(user.server.roles, name="YOUR_ROLE_NAME_HERE")
await client.add_roles(user, Role)
感谢很多人!
答案 2 :(得分:0)
on_reaction_add
事件受到一些限制,因为它仅由存储在Client.messages
双端队列中的消息触发。这是一个缓存(默认大小为5000),可阻止您的漫游器响应旧消息的活动。如果您重新启动bot,它仍然会“监视”该消息,没有任何保证。
您可以做的一件事是在您的漫游器登录时发送一条消息,并将该角色添加到对该消息做出反应的用户上
@bot.event
async def on_ready():
channel = bot.get_channel('487165969903517696')
role = discord.utils.get(user.server.roles, name="CSGO_P")
message = await bot.send_message(channel, "React to me!")
while True:
reaction = await bot.wait_for_reaction(emoji="", message=message)
await bot.add_roles(reaction.message.author, role)