(やっぱりChatGPTに丸投げで)イントロクイズBotを作成した

久々の技術記事

以前、こういうnoteを掲載しました。
まで書いて気がついたんですが、書いていませんでした。

昔、Pythonでイントロをしていた話は絶対書いたと思うのですが、

ありました。

もう1年以上前なんですね。
これはあくまでPythonを自分のWindowsPCで立ち上げて自分だけイントロできるシステムでした。

そしてその後、今年の4月ころに自鯖にDiscordのBotとしてイントロができるBotを入れました。もう飽和状態です。メンバーから「多すぎる、わかりにくい」といろいろコメントもらってしまっています。どうしたらいいんだろうねぇ。。。

その話は今回しないで、要するにDiscordのBotとして私がいなくても勝手にイントロができるようにしたという感じです。
これまでは、自分のローカルのPython環境が整備されて通話参加時じゃないとできなかったのですが、それが回避できているという感じですね。

それで、今回はそれをブラッシュアップしましたって話をしたかったのですが、そもそもの感じを説明していないので、初期状態と現在の形を両方説明したいと思います。

初期のイントロBot

初期と言っても、最初に作成してから全然強くしていなくてここ数日前まではこんな感じだったんですけどね。

初期のイントロBotの画面

基本的な流れは以下のとおりです。

イントロの出題対象を決める。

諸々の設定値を決める

通話に参加

ひたすら出題する

途中停止(別途コマンドあります)or出題数出したら通話から切断

基本的にはこの機能だけ実装したイントロ、またはラントロのBotでした。

これができれば普通に個人的に満足でこれ以上の改善はPythonでは難しいかなと思っていました。

そんな中である日「Botをとある場所で使用したい」って言われて、その時に別に「こんなふうに改良とかできません?」とかも全然言われていらず、そのままのBotを提供すればよかったのですが、謎の血がさわぎ、一番最初に作成したときよりChatGPTも強くなっていたので、相談したらうまくいくかなと思い、改善に着手しました。

現在のイントロBot

ここから追加した機能は以下の通りです。
・自分自身のチャットを自動で定期時間経過で削除する設定(自分のチャットだけで他者のチャットは削除しない)
・上記の設定を制御するiniファイルを内部で用意して、コマンドで自在に自動削除をするかしないかを決めることができる。
・早押しボタン的な機能を作成し、特定の文字列でチャットが入れられたら楽曲が停止し、一番最初にチャットが送信された人にメンションが飛び、シンキングタイムの後に正解を表示する(正誤判定機能は入っていません)なお、シンキングタイム中に一番メンションがとんだ人がチャットをすればシンキングタイム経過しなくても正解を表示します。
・正解発表後にBotが自動的に🆗または🆖のリアクションを用意し、次の正解発表までにどちらかを押すと、その問題での一番早く押した人の正誤判定がカウントされ、出題の最後に表示されるようにする。

要するにものすごい早押しクイズがしやすいようにしたという感じですね。たった数日でこの機能入れたのは正直自分でやっておきながら狂気感じるわ。。。
特に早押しボタンのように特定のユーザがチャットを送信したら楽曲を停止する機能は昔から実装を考えていたのですが、並列処理とかを入れないといけないのかなぁと躊躇っていたのですが、ChatGPTに聞いてみるとそんなこともなくて、普通に流れで処理ができることがわかりました。複数のタスク管理で処理している感じではありますが。

一応述べておくとChatGPTにコード書いてもらってほぼ転用していますが、コードの内容というか処理プロセスは理解できています。流石に理解できていなかったら修正する時に大変だし、それはよくないのでね。

というか、案外今までやってなかったというのは.iniファイルの作成と管理ですよね。要するに設定ファイルを外部に用意して、そこに環境変数みたいに書きつつ、設定変更したらそれを書き換えるというやつです。

Botのコマンドから設定変更ができるのですごい便利だなぁと感じていたのですが、案外これまで機会がなくこういう処理をしてきませんでした。

そして、結果としてこんな感じのコードになりました。
音源は手元にあるやつを再生できるようにしています。

大体の流れ

大体こんな感じです。

確かに文字列を入れたら楽曲は停止するし、シンキングタイムが用意されているし、ちょっとこれだとわかりにくいんですが、複数の人がaと入力しても一番早くチャットが飛んだ人に対してメンションがでて解答権が得られるという感じです。これ自分の見た目チャットが一番上でも他の人のほうがはやいみたいのもあってとてもいいなぁと感じています。

そして、正解発表のところに🆗と🆖を用意して結果発表で情報を出力するという感じですね。

結果発表の画面はこんな漢字ですね

名前は気にしないでもろて、最終問題の後すぐ情報出力をしようとすると、最後の正誤判定が情報に乗らないので、7秒待機させるようにしました。

大体こんな感じで作成したという感じです。

今後については本当にこれでブラッシュアップは終わったのでもういいかなと思っています。

考えるとまだあるけど、あんまり実用的かって言われると微妙だしなぁ

ちなみに思いつく限りでこんな感じ

・アウトロ(楽曲終了側のラントロ)→実装した
・イントロとラントロが確率でランダムでやってくる→実装した
・Bot自身のチャットだけではなくて、ユーザのチャットも消すようにする
・イントロスタートまでの時間を短くする(今は音声処理と再生の時に安定持たせてsleepを入れているが、まぁストレスが溜まる時間の長さではないのでべつにここは短くしなくてもいいかなって思ったり)
・再生後の楽曲情報として、カテゴリを表示

大体こんなところですが、これ以上は特に何も思いつかないので正直いいかなと思っています。

以上です。

くれせんとむ~んではこのBot常時動かしているので、鯖参加者はぜひ実行してみてください。もちろん無料です。

太字とかの処理は飽きたのでこのままnoteリリース

この記事が気に入ったらサポートをしてみませんか?