Skip to content
rigid-catPublic
forked from fumikun/nbc-bot

About

for nbc

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

nbc-bot

物理鍵の貸出・返却を管理する Discord Bot です。ボタン/スラッシュコマンドで打刻し、Google スプレッドシートへのログ記録、Discord チャンネルへの通知、Microsoft Teams への Webhook 通知、返却期限(18:30 JST)を過ぎた際のアラートまでを自動化します。

📖 詳細なドキュメントは VitePress ドキュメントサイト を参照してください(ローカルでの閲覧方法は下記)。

主な機能

  • 🔓🔐 メッセージ下のボタン(鍵取り/鍵返却)またはスラッシュコマンド /key でワンタップ打刻
  • /backdate で過去(直近1週間以内)の打刻を遡り登録
  • /backdate-fix で直近の打刻時刻を修正
  • 打刻内容を Google スプレッドシートに二重記録(月別の一覧シート+年別の詳細ログシート)
  • 専用チャンネルへの操作ログ投稿と、常設の「現在の貸し出しステータス」メッセージの自動更新
  • Microsoft Teams への Webhook 通知(任意設定)
  • 返却期限(18:30 JST)超過時の自動アラート。SQLite にペンディング状態を永続化しており、プロセス再起動後も再スケジュールされる

技術スタック

  • Go 1.26 系 / Echo v5(HTTP ルーティング)
  • Discord Interactions API(Ed25519 署名検証つき Webhook エンドポイント)
  • Google Sheets API(google.golang.org/api/sheets/v4)
  • SQLite(modernc.org/sqlite、CGO 不要)
  • Docker(マルチステージビルドで配布)

ディレクトリ構成

cmd/server/          エントリーポイント(main.go)
internal/config/     環境変数からの設定読み込み
internal/discordapi/ Discord REST API クライアント・署名検証・型定義
internal/httpserver/ HTTP ルーティングと Interaction のディスパッチ
internal/keymanager/ 鍵管理機能の本体(コマンド処理・Sheets 連携・アラート・Teams通知)
internal/sqlitedb/   共有 SQLite コネクションのオープン処理
docs/                VitePress ドキュメントサイト

セットアップ

前提条件

  • Go 1.26 以上
  • Google スプレッドシートを読み書きできるサービスアカウントの認証情報(JSON キー)
  • Discord Bot(Application ID / Bot Token / Public Key、および Interactions Endpoint URL の設定)

環境変数

.env などで以下を設定します(ENV_FILE_PATH で指定したファイルにステータスメッセージIDが自動で追記されるため、.env は起動後も書き換えられる前提で運用してください)。

変数名 必須 既定値 説明
PORT - 8080 HTTP サーバーの待受ポート
DISCORD_PUBLIC_KEY 推奨 (空) 署名検証用の公開鍵。未設定だと検証をスキップ(ローカル動作確認用)
BOT_TOKEN ✅ - Discord Bot トークン
APPLICATION_ID ✅ - Discord アプリケーションID
TEAMS_WEBHOOK_URL - (空) Teams への通知を送る場合の Webhook URL
SPREADSHEET_ID ✅ - ログ記録先の Google スプレッドシートID
KEY_BUTTON_CHANNEL_ID - 固定チャンネルID ボタン/ステータスメッセージを投稿するチャンネル
LOG_CHANNEL_ID - KEY_BUTTON_CHANNEL_ID と同じ 操作ログ・アラートを投稿するチャンネル
STATUS_MESSAGE_ID - (空) 常設ステータスメッセージのID(自動で永続化される)
ENV_FILE_PATH - .env STATUS_MESSAGE_ID を書き戻す対象ファイル
SQLITE_DB_PATH - ./data/nbc-bot.db アラート永続化用 SQLite ファイルのパス

Google Sheets のサービスアカウント認証は Application Default Credentials(GOOGLE_APPLICATION_CREDENTIALS でサービスアカウントJSONを指すなど)を利用します。

ローカル実行

go run ./cmd/server

起動後、以下のエンドポイントが利用できます。

エンドポイント 用途
POST / Discord Interactions のWebhook本体(Discord Developer Portal に設定)
POST /register-command /key /backdate /backdate-fix のスラッシュコマンドをグローバル登録
POST /send-button 鍵取り/鍵返却ボタン付きメッセージを投稿し、ステータスメッセージも作成

初回セットアップ時は、デプロイ後に register-command と send-button をそれぞれ一度叩いてください。

テスト

go test ./...

Docker

docker build -t nbc-bot .
docker run --rm -p 8080:8080 --env-file .env nbc-bot

data/(SQLite)や Google サービスアカウントの認証情報など、永続化・シークレットが必要なファイルは適宜ボリュームマウント/環境変数で渡してください。

ドキュメント(VitePress)

アーキテクチャの詳細、コマンド仕様、スプレッドシートのレイアウト、デプロイ手順などは docs/ 配下の VitePress サイトにまとめています。

npm install
npm run docs:dev      # http://localhost:5173 でプレビュー
npm run docs:build    # docs/.vitepress/dist に静的ビルド
npm run docs:preview  # ビルド済みサイトのプレビュー

About

for nbc

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages