![見出し画像](https://assets.st-note.com/production/uploads/images/124595039/rectangle_large_type_2_ac4f4e6d3dd567950121fac9599a1e9a.jpeg?width=1200)
discord.py で投票bot を作る
discordで通話中に多数決を取ろうにも、現実みたいに挙手とか拍手みたいなことがとれないですし、リアクションをつけてもらうにしても、一人一票にできないという問題があります。
リアクションをつけて、投票することをベースに一人一票と投票を締め切った後に得票率をグラフに表示することをBotの機能に追加しました。
その内容解説およびソースコードの公開をします。初めての有料記事になりますが、ちゃんと機能する上に解説もしていきます。
環境
python 3.9 64-bit
discord.py 1.7.3
bot.commandで作成しています。
投票Botの基本動作
![画像1](https://assets.st-note.com/production/uploads/images/62090871/picture_pc_bb9b952f5015cb72699e79df05ddc6b1.png?width=1200)
コマンド自体は以下の通り
$vote title, select ~
titleは、投票のお題、select は投票の選択肢で、4つまでに制限しています。
それに対して、Botは上の写真のように投票のお題と選択肢を返し、選択肢の数字に応じたリアクションを投票終了の”✕”を返します。
![画像2](https://assets.st-note.com/production/uploads/images/62645198/picture_pc_2a5e4c52509d88a001c887ba68837ade.gif?width=1200)
リアクションをつけて投票する形ですが、
1回リアクションで投票し、他の選択肢にリアクションをつけた場合、上のgif のように以前投票したリアクションを自動で消すようにしています。
コマンドを入力して投票Botを始めた人が”✕”を押すことで、投票を締め切ることができます。(それ以外の人が押しても無効)
![スクリーンショット 2021-10-03 180601](https://assets.st-note.com/production/uploads/images/62648114/picture_pc_c14af9b126f75db8bc6fc44d80d024d5.png?width=1200)
すると”✕”を押した時点の票数で得票率に応じた円グラフを出力します。
コードの公開
ここから先は
11,394字
¥ 300
noteの内容に共感していただければ、ぜひともサポートを宜しくお願いします。今後の記事投稿の励みになります。