python - 对帖子使用react时添加角色的问题

标签 python python-3.x discord discord.py

当用户对帖子作出 react 时,我在添加角色时遇到问题。

我希望它的功能是,当用户加入 Discord 服务器时,机器人将使用 on_join 事件发送一条消息(目前我使用命令 test 用于测试目的)。

下一步是 on_reaction_add 事件,当用户对此消息作出 react 时,机器人会将角色添加到该用户。

这是我正在处理的内容。我已经对此进行了测试,但是没有得到想要的结果。

(discord.py 重写)

 @commands.command(pass_context=True)
async def test(self, user: discord.Member): #lets change this to the command 'test' for now and change on on_join event later. 
    guildName = user.guild.name
    embed = discord.Embed(colour=discord.Color(random.randint(0x000000, 0xFFFFFF)))
    embed.title = "Welcome to {} {}!".format(guildName, user)
    embed.description = "Head over to <#443133907102203912> to have a read up on our rules. Once you have read them please reaction to this post with a :thumbsup:"
    embed.set_image(url='')
    await user.send(embed=embed)

async def on_reaction_add(reaction, user): 
    channelid = '555844758778544160' #The text-channel where the react should happen
    role = discord.utils.get(user.guild.roles, name="Members") #The role applied when the post is reacted to

    if reaction.message.channel.id != channelid:
        return #So it only happens in the specified channel
    if str(reaction.emoji) == "<:thumbsup:555844758778544160>":#The reaction (not sure if this should be raw in discord.py rewrite)
        await user.add_roles(user, role)#Adds role when post is reacted to

最佳答案

如果需要,您可以等待对特定消息的 react 。这在这样的时候很方便,你可能想等待 react 然后继续执行你的协程。假设您使用的是最新的重写,我将编写以下内容。您可以找到所有这些的文档 here :

from discord.utils import get
from discord.ext.commands import Cog, command
listener = Cog.listener

thumbs_up = "\N{THUMBS UP SIGN}"

def react_check(user, msg, emoji):
    def check(reaction, usr):
        return usr==user and reaction.message.id==msg.id and reaction.emoji==emoji
    return check

class MyCog(Cog):
    def __init__(self, bot):
        self.bot = bot
    @listener()
    async def on_member_join(self, member):
        guildName = user.guild.name
        embed = discord.Embed(colour=discord.Color(random.randint(0x000000, 0xFFFFFF)))
        embed.title = "Welcome to {} {}!".format(guildName, user)
        embed.description = "Head over to <#443133907102203912> to have a read up on our rules. Once you have read them please reaction to this post with a :thumbsup:"
        embed.set_image(url='')
        msg = await user.send(embed=embed)
        await self.bot.wait_for('reaction_add', check=react_check(user, msg, thumbs_up))
        role = get(user.guild.roles, name="Members")
        await user.add_roles(role)

然后在你的主机器人中,你需要一行内容:

from mycog import MyCog

bot.add_cog(MyCog(bot))

关于python - 对帖子使用react时添加角色的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55225017/

相关文章:

javascript - setTimeout() 中的第二个函数未运行

python-3.x - Python Discord Bot 禁止列表中的人员

python - line_profiler 未按预期工作

Python "while x:"语句

linux - Raspberry Pi Jessie 导入错误时区

python-3.x - 如何在它们之间添加小时和分钟

python - 将字符串转换为复值 numpy 数组

python - python 中的水平堆叠条形图在 Jupyter Notebook 中提供多个图表

python - Scikit 学习管道类型错误 : zip argument #2 must support iteration

discord - 使用 interaction.response.defer() [Nextcord] 后无法响应交互