DiscordのBOTを自作 投票BOT途中経過(1)
discord.pyのBOTを常駐化できるようになったので、実用的な投票機能を持たせた簡易的なBOTを作成したいと思います。(Python初心者なので完成するかは不明
現状、Pythonのリストをフルに活用して試作中です。
まだまだ、下地だけでようやく投票の集計に達したところですが、discord.pyで得た情報の一部をメモるのと現状のBOTを記録として載せておきます。
2018/05/07追記:続きの記事を掲載
常駐化が正常に出来ていなかったのでそのことについても記載しました。
BOTづくりの時は開発者モードを使う
作って行くとすぐにある壁に当たります。
私の場合はメッセージを送るチャンネルの指定です。
基本的なことのようですが、前回のBOT作成では発言者のチャンネルへ投稿するよう動作します。
今回はどこのチャンネルで発信しても特定のチャンネルで投票を開催するようにと考えたところ、どうやって特定のチャンネルを指定するんだ・・・?
調べたところチャンネル、メッセージ、ユーザーなどあらゆるものはIDによって管理されているようです。
それを取得できれば、特定のチャンネルへの送信やメッセージの編集が可能となります。
方法としては以下順(バージョン2018/4/1)
1.ユーザー設定を開く
左下の歯車マークでユーザー設定を開きます。
2.アプリの設定欄のテーマを選択
3.テーマの詳細設定にある開発者モードをオンにする
これで、IDの取得が可能となりました。
IDの取得方法は取得したい対象物を右クリックして「IDをコピー」を選択します。
貼り付けると数値が出力されると思います。
私がこの時、取得したチャンネルのIDは10進で18桁程ありました。メッセージ、ユーザーなども取得しましたが桁数はそれぞれ異なります。
特定のチャンネルへメッセージを送信
チャンネルのIDが取得できるようになったので次にそのチャンネルへメッセージを送信してみます。
記述はこんな感じで出来ました。
# メッセージ内容 msg = 'てすと' # 特定のチャンネルへメッセージを送りつつそのメッセージIDを取得 msgid = await client.send_message(discord.Object(id='チャンネルID'), msg) # メッセージIDをメッセージで送信 await client.send_message(message.channel, msgid)
4行目のmsgidでメッセージのIDを取得しています。
最後の行で送信されるメッセージ内容は以下の通り
<discord.message.Message object at 0xXXXXXXXX>
IDは16進で格納されるようです。
このメッセージIDを利用することで特定チャンネルへ送信したメッセージを編集することも出来ます。
# 編集内容 editmsg = 'テスト' # メッセージの編集 await client.edit_message(msgid, editmsg)
これで”てすと”が”テスト”と変更されます。
現状、投票集計メッセージは削除、再発信でなく編集する形にしています。どちらが良い方法化は分かりませんが・・・。
投票BOTの現状
今の所、投票開催から投票、BOTのヘルプ表示まではできています。
- ヘルプ表示
-votehと入力するとヘルプ表示
- 投票開催
-voteqで投票設定が出来ます。最低2択、最大5択まで。
時間制限を設けようと考えてますが未実装。多分範囲は1時間ごとで最大1日になるかな?
↓2択の時
↓5択の時
- 投票する
-voteaで投票が出来ます。
投票されると投票開催用のメッセージが編集され投票率が表示されます。
色々投票してみます。
現状、いくつかおかしい点があります。
特に1人で何票も入れられること。
票数は投票者をリスト化してその人数で集計しています。でも、再投票時の重複削除が上手く動作していない様子。
それと今のままだと1つの投票開催しかできないので複数、せめて3つは出来るよう目標にしたいところ。