我如何制作一个机器人,如果你做出反应,它会给你一个 Python 角色?

Posted

技术标签:

【中文标题】我如何制作一个机器人,如果你做出反应,它会给你一个 Python 角色?【英文标题】:How do I make a bot where if u react, it will give u a role with python? 【发布时间】:2020-12-05 15:02:06 【问题描述】:

所以,我一直在这样做:

from discord.ext import commands
from discord.utils import get


client = commands.Bot(command_prefix='><')


@client.event
async def on_ready():
    print("I am ready Winson or not Winson :D")

@client.event
async def on_member_join(member):
    channel = client.get_channel(744440768667844698)
    message = await channel.send(f"Welcome to HaveNoFaith member, happy to be friends with you")

@client.command()
async def ping(ctx):
     await ctx.send(f"Your Ping is round(client.latency *1000)ms")

@client.command()
async def Help(ctx2):
    await ctx2.send("Hi, Im WelcomeBot v1.0...\n\nPrefix: ><\n\nCommands: ping\n          help")

#然后我尝试在“欢迎等”消息中做类似的事情,如果他们对该消息中的“检查反应”做出反应,他们将在不和谐服务器中获得一个角色...

【问题讨论】:

【参考方案1】:

您可以创建一个名为addrr(添加反应角色)的命令,如下所示 -

@client.command()
@commands.guild_only()
@commands.has_permissions(administrator=True)
    async def addrr(self, ctx, channel: discord.TextChannel, message: discord.Message, emoji: discord.Emoji,
                    role: discord.Role):
        await ctx.send(f"Setting up the reaction roles in channel.mention.")
        await message.add_reaction(emoji)

        def check1(reaction, user):
            return user.id is not self.client.user.id and str(reaction.emoji) in [f"emoji"]

        while True:
            try:
                reaction, user = await self.client.wait_for("reaction_add", check=check1)
                if str(reaction.emoji) == f"emoji":
                    await user.add_roles(role)
                    await message.remove_reaction(reaction, user)
                else:
                    await message.remove_reaction(reaction, user)
            except:
                await message.delete()
                break

它会像这样工作 -

&gt;&lt;addrr &lt;#channel mention&gt; &lt;message ID&gt; &lt;Emoji&gt; &lt;@Role Mention&gt;

【讨论】:

参考this图片。【参考方案2】:

因此,您可以对已发送的消息添加反应,并使用wait_for 等待对该消息的反应。我建议您添加超时。如果您不想超时,只需发送这些消息,将其保存到列表中,然后在 raw_reaction_add event 中检查表情符号是否是表情符号,并且消息是列表中的消息之一

【讨论】:

以上是关于我如何制作一个机器人,如果你做出反应,它会给你一个 Python 角色?的主要内容,如果未能解决你的问题,请参考以下文章

对自己的消息做出反应的 Discord 机器人

如何让我的 Discord.JS 机器人对其自己的直接消息做出反应?

我正在尝试制作一个等待用户消息的不和谐机器人,如果提到三个标签,它会给出滴答反应

Discord JS - 如何对同一个嵌入做出多次反应?

Discord js v12 如果有人对嵌入做出反应,则发送消息

Discord js - 如何在给定的时间段内继续对消息做出反应并编辑嵌入