当用户添加反应 Discord.py 时赋予角色
Posted
技术标签:
【中文标题】当用户添加反应 Discord.py 时赋予角色【英文标题】:give role when a user add reaction Discord.py 【发布时间】:2019-02-12 02:49:28 【问题描述】:我正在为我的不和谐频道开发一个机器人,我正在学习 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 天前)
【问题讨论】:
【参考方案1】:@tristo @patrick-haugh 谢谢你们!它工作得很好......我混合了你的两个想法并做了这个,它工作得很好!
@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】:on_reaction_add
事件有点受限,因为它仅由存储在Client.messages
dequeue 中的消息触发。这是一个缓存(默认大小为 5000),可阻止您的机器人响应旧消息的活动。如果您重新启动机器人,无法保证它仍会“观看”该消息。
您可以做的一件事是在您的机器人登录时发送一条消息,并将角色添加给对该消息作出反应的用户
@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)
【讨论】:
【参考方案3】:您返回后有一个;
。
此外,您使用 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)
应该没问题
【讨论】:
为什么在 int 值中使用 ""?以上是关于当用户添加反应 Discord.py 时赋予角色的主要内容,如果未能解决你的问题,请参考以下文章
.verify 命令未赋予角色(discord.py 1.7.3)
如何使用 discord.py 机器人,在他们加入 VC 时赋予用户角色并在他们离开时将其删除