不和谐机器人阅读反应

时间:2018-08-08 01:46:04

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

我需要实现某些功能,其中一项功能是实现民意调查类型功能。由于某些政策,无法使用公共不和谐的bot,因此我们必须自己实施一些措施。昨天做了一些研究,并且能够使用来自commands python3 discord.ext api制作基本的bot。现在我需要弄清楚的是:

  1. 阅读用户添加到邮件的反应吗?
  2. 使用反应创建消息(例如创建反应调查的机器人?)
  3. 发送消息吗?
  4. 我相信我可以从ctx获得user tags(管理员等)。有更好的方法吗?

Commands reference page上找不到任何有用的信息,或者可能我正在查看错误的文档。任何帮助将不胜感激。

谢谢


已更新:谢谢大家。现在我被困在如何添加表情符号的地方,这是我的代码

poll_emojis = {0: ':zero:', 1: ':one:', 2: ':two:', 3: ':three:', 4: ':four:'}

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$create_poll'):

        poll_content = message.content.split('"')
        poll_text = poll_content[1]
        poll_options = []
        poll_option_text = ''
        count = 0
        for poll_option in poll_content[2:]:
            if poll_option.strip() != '':
                poll_options.append(poll_option)
                poll_option_text += '{0}: {1}\t'.format(poll_emojis[count], poll_option)
                count += 1

        posted_message = await message.channel.send('**{0}**\n{1}'.format(poll_text, poll_option_text))

        count = 0
        for poll_option in poll_options:
            await posted_message.add_reaction(Emoji(poll_emojis[count]))
            count += 1

2 个答案:

答案 0 :(得分:4)

顺便说一句,假设您正在启动该项目,并且已经在使用重写文档,请确保使用的是重写版本。这里有一些问题,涉及如何确定以及如何获得(如果没有的话),但是记录得更好并且更易于使用。我在下面的回答假设您正在使用

  1. Message.reactionsReaction的列表。您可以使用

    将反应映射到其计数
    {react.emoji: react.count for react in message.reactions}
    
  2. 您可以在发布消息后立即对消息做出反应:

    @bot.command()
    async def poll(ctx, *, text):
        message = await ctx.send(text)
        for emoji in ('', ''):
            await message.add_reaction(emoji)
    
  3. 您可以使用Message.pinawait message.pin()

我不确定“ user tags”是什么意思。你是说角色吗?

编辑1:

我会将您的命令写为

@bot.command()
async def create_poll(ctx, text, *emojis: discord.Emoji):
    msg = await ctx.send(text)
    for emoji in emojis:
        await msg.add_reaction(emoji)

请注意,这仅适用于自定义表情符号,即您添加到自己的服务器中的表情符号(这是因为discord.py对Unicode表情符号和自定义表情符号的处理不同。)这将接受类似

的命令
!create_poll "Vote in the Primary!" :obamaemoji: :hillaryemoji:

假设这两个表情符号在您发送命令的服务器上。

编辑2:

使用新的commands.Greedy转换器,我将像这样重写上面的命令:

@bot.command()
async def create_poll(ctx, emojis: Greedy[Emoji], *, text):
    msg = await ctx.send(text)
    for emoji in emojis:
        await msg.add_reaction(emoji)

因此,如果没有引号,调用会更自然一些:

!create_poll :obamaemoji: :hillaryemoji: Vote in the Primary!

答案 1 :(得分:0)

我刚刚看到你被卡住了,我也被卡住了。解决的办法是,反应实际上不是像“:one:”这样的东西,它是实际的表情符号,有多种解决方法,最简单的方法就是自己将其添加到字典中。或者,您可以使用python3 -m pip install discordhelp并使用listed here的功能。