一部の機能を実装する必要があり、その機能の1つは投票タイプ機能を実装しています。一部のポリシーにより、パブリックディスコードボットを使用できないため、自分で何かを実装する必要があります。昨日いくつかの調査を行い、python3とcommands
apiを使用して基本的なボットをdiscord.ext
から作成できました。今私が理解する必要があるのは:
ctx
からuser
tags
(管理者など)を取得できると信じています。そうするためのより良い方法はありますか?コマンドのリファレンスページ で役立つ情報が見つからなかったか、おそらく間違ったドキュメントを探しています。任意の助けいただければ幸いです。
ありがとう
更新:みんなありがとう。今私は絵文字を追加する方法で立ち往生しています、これが私のコードです
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
余談ですが、このプロジェクトを開始していて、すでに書き換えドキュメントを使用している場合は、書き換えバージョンを使用していることを確認してください。確認方法とそうでない場合の入手方法について、いくつか質問がありますが、ドキュメント化されており、使いやすくなっています。以下の私の答えは、あなたが discord.py-rewrite を使用していることを前提としています
_Message.reactions
_ は Reaction
sのリストです。あなたは彼らの数に対する反応のマッピングを得ることができます
_{react.emoji: react.count for react in message.reactions}
_
投稿後すぐにメッセージに反応できます。
_@bot.command()
async def poll(ctx, *, text):
message = await ctx.send(text)
for emoji in ('????', '????'):
await message.add_reaction(emoji)
_
Message.pin
_ を使用できます:await message.pin()
「user
tags
」の意味がわかりません。あなたは役割を意味しますか?
私はあなたのコマンドを次のように書きます
_@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!
_