はじめに
みなさまお久しぶりです。はじめましての人ははじめまして。
御茶麒麟と申します。
この記事は https://adventar.org/calendars/9406 の4日目の記事です!
主にドラクエのRTAを中心に活動していまして、先日『身内メンツでDQRTA7作リレー』というイベントの運営お手伝いをさせていただきました。
「続」となっていますが、実はこちらの大会昨年も開催されておりまして、その際に開発したDiscord Botを別記事にて紹介させていただきました。今回はそのBotを大幅に改良しましたので、紹介したいと思います。導入方法自体は過去記事でそれとなく解説していますのでそちらをご参照ください。
前回の記事はこちら
Botで何ができるの?
早速今回のBotで管理していたことをざっと紹介します。
Googleフォームと連携して応募を通知
Googleフォームと連携してDiscordに通知がとぶようにしました。これのいいところは、長期間募集する裏方募集等で、応募があった際に運営全員に共有されるので見逃しが発生しにくくなることですね!これは走者からのノルマ申請確認もれ防止の対策にも応用していました。(下のような感じ)
/コマンド機能
前回チャットの正規表現だけで対応しようとしたら、ちょっとした誤字で反応してくれないということがまあまあありました。ということで今回はコマンドで入力する項目を誘導することにしました。(詳細は各項目にて)
↓前回のノルマ報告方法。正確に表記しなくてはいけないのでミスが目立った。
コマンドによるノルマ報告
早速コマンドを使ったらどんな感じにできるのか見ていきましょう。
まずはノルマ報告です。
見ての通り、コマンドを使うと入力フォームが出てきます!
この記入欄の個数や見出しも自分ですべて調整できます。すごい!
コマンドでは個人ごとに表記ができるだけ揺れないように時、分、秒にわけて入力してもらっていましたがまあそこまでせんでもよかった気もしています。
ここに入力した情報は、指定したスプレッドシートに飛ぶようになっており、そこで前回記事で紹介した生存報告等と一緒に自動管理されるようになっていました。これぞDX!
番付機能
リレー企画の悩みの種として、期間中の練習モチベをどう維持してもらうかというのがありました。
身内は0からスタートする走者がいるのも加味して、練習期間を長めにとっています。しかしながら、すでに走れる作品で応募する走者もいる中で、モチベを保つのが難しいというのが課題としてありました。
そこで今回試みとして作品ごとの月間番付を開催しました。
実際の身内DQ番付はこちら
ただ記録集積を手動でやるのはめちゃ大変・・・ということでBotの出番です。Botの利点は、Disocordで報告ついでに投稿できること(特別なページをわざわざ開く必要がない)、なりすまし投稿ができないようにDiscord IDと紐づけして管理できるというところですね。特に後者は間違って投稿した記録を消す際にもDiscord IDで本人確認できたのがGoodでした。
結果、期間中で500走近い投稿があり、自己べを狙う以外にRTAを行う口実としてはかなり機能していたんじゃなかなと思います。さらによかったのが、動画のリンクをつけたことでRPG特有の一発勝負での走りのデータベースとしても使えたことです。基本的にRTA動画や記録集積サイトを検索すると最速記録・自己ベストが出てくるものですが、普段の走りは消えがちなので、そのあたりも面白かったかなと個人的に思っています。
なお番付に関してはさらにいろんな企画へ応用できるようにブラッシュアップして、現在別大会で運用しております。そちらの詳細は後日アドベントカレンダー企画へ投稿する予定なので、お楽しみに!
リマインド機能
こちらはぶっちゃけ他で参加させてもらっているDiscordサーバーで運用されているBotをパク・・・インスパイアされました。
運営会議予定や、チームごとの予定リマインドなどにうまく使ってもらえたところもありましたが、あまり周知活動をしていなかったためか使用率は低かったので、次回以降は便利機能として周知していきたいと思います。
OPEN AIと連携して質問に答えてくれる
完全に趣味です。
1週間に1回の生存報告を行うハードルを下げるために、前回と同様おみくじ機能は導入していました。ただそれだけではマンネリ化しそうというのと、新技術に興味があったので運営そっちのけで導入してしまいました。OPEN AIのアカウントを使ってAPIを連携する必要がありますので、今回の記事では詳細は紹介しませんが、意外と簡単だったので興味があれば御茶麒麟までお知らせください。
カウントダウン(お蔵入り機能)
なにかしら中間イベントで使うかもと思って導入しましたが使いませんでした!
これも技術研究ということで今後に活かしていきましょう。
この後出てくるサンプルコードには記載がありますので、自分のBotに導入してみたい人は参考にどうぞ。理論上は好きなカウント数、好きな時間間隔でカウントダウンしてくれるはず?
サンプルコード
ずばりBotのサンプルコードはこちらです。
前回の記事を参考にしながら導入すれば、とりあえず前回のアップデート分は使えます。
ここから今回増えた機能の導入方法についてです。
Googleフォームとの連携
Googleフォームとの連携方法ですが、Googleフォームと連携したスプレッドシートに下のようなスクリプトを仕込んでいます。(見た目が汚いのは独学の素人なので気にしないでください)そしてスプレッドシートではなんと、フォームが送信された時にスクリプトが動くようにできるのです!ハイテク!
方法はトリガー部分で「フォーム送信時」を選ぶだけなので、前回記事を参考にしながらチャレンジしてみてください。
var GLITCH_URL = "BotのURL"; function sendGlitch(uri, json){ var params = { 'contentType' : 'application/json; charset=utf-8', 'method' : 'post', 'payload' : json, 'muteHttpExceptions': true }; response = UrlFetchApp.fetch(uri, params); } function staff_notice() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('フォームの回答 1'); let n = 2; while(sheet.getRange(n, 2).getValue()) { n++; } var noticestring = sheet.getRange(n-1, 2 ).getValue();; var noticechannel = '送信するDiscordチャンネルのID'; var jsonarrangement = []; jsonarrangement.push([noticestring,noticechannel]); var json = { 'type':'notice', 'debug':'false', 'content': JSON.stringify(jsonarrangement), }; sendGlitch(GLITCH_URL, json); }
/コマンドの導入
ぶっちゃけここは私もなぜ動いているのか説明ができません。
解説サイト通りに作っていたら動きました。
ということで実際に動いているサンプルコードを自由にいじりたおすか、アレンジするなら下記に参考にしたサイトをのせておきますので、そちらからどうぞ。
Botコマンドについて参考にさせていただいた記事はこちら。
【Javascriptで作成する】Discordのbotの作り方 Discord.js v14
【3日目】discord.jsでスラッシュコマンドを作ってみよう
【16日目】discord.jsでモーダルウィンドウを使ってみる
とりあえずわからなければ御茶麒麟まで連絡くれればお手伝いしますので、お気軽にどうぞ!
終わりに
今後の展望としては、さらに企画自体を盛り上げる方向でBot運用できたらな~と思っています。
現状他の企画でお試し運用しているのは、登録した走者が配信をはじめたら通知をする機能です。
こちらもうまくいったら別の記事でご報告できたらと思っていますのでお楽しみに~
明日は Shino.(紫乃)さんの記事です。
お楽しみに!
おもにドラゴンクエスト、ファイナルファンタジーのRTA情報を発信していきます。
オフラインイベントにもよく顔を出しているので、記事執筆はお気軽に御声掛けください。
コメント