概要
nbc-bot は、部室や研究室などで運用されている 物理鍵の貸出・返却 を Discord 上で管理する Bot です。
何をするBotか
- Discord のボタン(🔓鍵取り/🔐鍵返却)またはスラッシュコマンド
/keyで、その場で鍵の貸出・返却を打刻できます。 - 打刻内容は Google スプレッドシートに自動で記録され、専用チャンネルには操作ログと「現在の貸し出しステータス」を表示する常設メッセージが更新されます。
- 返却期限(18:30 JST)を過ぎても返却されていない場合、自動でアラートを投稿します。
- 打刻を忘れた場合に備え、
/backdate(過去の打刻を遡って記録)・/backdate-fix(直近の打刻時刻を修正)コマンドも用意されています。 - 任意で Microsoft Teams の Webhook にも通知を転送できます。
全体の流れ
- ユーザーが Discord 上でボタンを押す、またはスラッシュコマンドを実行する
- Discord から nbc-bot の HTTP エンドポイント(
POST /)に Interaction が送られる - nbc-bot は 3 秒以内に「受理しました」という deferred response を返し、実処理はバックグラウンドの goroutine で継続する
- 現在の貸出状況を Google スプレッドシートから読み取り、鍵取り・鍵返却のどちらとして扱うかを判定する
- スプレッドシートに記録(月別シート+年別ログシート)
- 鍵取りの場合は返却期限アラートをスケジュール(SQLite に永続化)
- ログチャンネルへの投稿、常設ステータスメッセージの更新、(設定されていれば)Teams への通知
- 最後に Discord 側の応答メッセージを確定内容に書き換える
詳しくは アーキテクチャ を参照してください。
前提条件
- Go 1.26 以上(ローカルで動かす場合)
- Discord Bot(Application ID / Bot Token / Public Key)と、Interactions Endpoint URL の設定
- 書き込み権限を持つ Google スプレッドシートと、それにアクセスできるサービスアカウント
- (任意)Microsoft Teams の Incoming Webhook URL
クイックスタート
bash
git clone <このリポジトリ>
cd nbc-bot
cp .env.example .env # 実際は各自で用意した値を設定
go run ./cmd/server環境変数の詳細は 設定(環境変数) を参照してください。
起動したら、初回のみ以下の2つのエンドポイントを一度ずつ叩いてセットアップします。
bash
curl -X POST http://localhost:8080/register-command # スラッシュコマンドをDiscordに登録
curl -X POST http://localhost:8080/send-button # ボタン付きメッセージ+ステータスメッセージを投稿実際に外部(Discord)からWebhookを受けるには、ローカルサーバーを公開URLでトンネリングするか、デプロイ して Discord Developer Portal の Interactions Endpoint URL に設定してください。