web-dev-qa-db-ja.com

Discordボットのリアクション

一部の機能を実装する必要があり、その機能の1つは投票タイプ機能を実装しています。一部のポリシーにより、パブリックディスコードボットを使用できないため、自分で何かを実装する必要があります。昨日いくつかの調査を行い、python3commands apiを使用して基本的なボットをdiscord.extから作成できました。今私が理解する必要があるのは:

  1. ユーザーがメッセージに追加したリアクションを読みますか?
  2. リアクションを含むメッセージを作成します(リアクションポーリングを作成するボットのように?)
  3. メッセージを固定しますか?
  4. 私はctxからusertags(管理者など)を取得できると信じています。そうするためのより良い方法はありますか?

コマンドのリファレンスページ で役立つ情報が見つからなかったか、おそらく間違ったドキュメントを探しています。任意の助けいただければ幸いです。

ありがとう


更新:みんなありがとう。今私は絵文字を追加する方法で立ち往生しています、これが私のコードです

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
8
Em Ae

余談ですが、このプロジェクトを開始していて、すでに書き換えドキュメントを使用している場合は、書き換えバージョンを使用していることを確認してください。確認方法とそうでない場合の入手方法について、いくつか質問がありますが、ドキュメント化されており、使いやすくなっています。以下の私の答えは、あなたが discord.py-rewrite を使用していることを前提としています

  1. _Message.reactions_Reaction sのリストです。あなたは彼らの数に対する反応のマッピングを得ることができます

    _{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.pin_ を使用できます:await message.pin()

usertags」の意味がわかりません。あなたは役割を意味しますか?

私はあなたのコマンドを次のように書きます

_@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!
_
6
Patrick Haugh