Discord朝活の参加状況を自動記録して可視化するシステムです。Google SheetsとGoogle Apps Scriptを使用しているため、完全無料で運用できます。
-
🎤 ボイスチャンネル参加の自動記録
- 参加/退出時刻を自動検知
- 滞在時間を自動計算
- Google Sheetsに自動保存
-
📊 リアルタイムダッシュボード
- 日別参加時間グラフ(折れ線グラフ)
- 活動ヒートマップ(GitHub風)
- 参加時間ランキング
- 統計サマリー(総時間、平均時間など)
-
💰 完全無料
- Supabase不要
- Google Sheets/GASの無料枠で運用可能
Discord Bot (Node.js)
↓ ボイスチャンネル参加を監視
↓
Google Sheets (データベース)
↓ データを保存
↓
Google Apps Script (可視化)
→ Webダッシュボードを表示
- Node.js 18以上
- Discordアカウント
- Googleアカウント
- Discord Developer Portal にアクセス
- 「New Application」をクリックして新しいアプリケーションを作成
- 左メニューから「Bot」を選択
- 「Add Bot」をクリック
- Bot Token をコピーして保存(後で使います)
- Privileged Gateway Intents で以下を有効化:
SERVER MEMBERS INTENTPRESENCE INTENT
- 左メニューから「OAuth2」→「URL Generator」を選択
- SCOPES で
botを選択 - BOT PERMISSIONS で以下を選択:
View ChannelsConnectSpeak
- 生成されたURLからBotをサーバーに招待
- Google Cloud Console にアクセス
- 新しいプロジェクトを作成
- Google Sheets API を有効化
- 認証情報を作成:
- 「認証情報を作成」→「サービスアカウント」
- サービスアカウント名を入力(例:
morning-winner-bot) - 「キーを追加」→「新しいキーを作成」→「JSON」
- ダウンロードしたJSONファイルを
credentials.jsonとして保存
- Google Sheets で新しいスプレッドシートを作成
- シート名を「ActivityLog」に変更
- スプレッドシートのURLから SPREADSHEET_ID をコピー
https://docs.google.com/spreadsheets/d/{SPREADSHEET_ID}/edit - スプレッドシートを Service Accountのメールアドレス と共有
credentials.jsonのclient_emailの値をコピー- スプレッドシートの「共有」から編集権限を付与
# リポジトリをクローン
git clone <your-repo-url>
cd morining-winner
# 依存関係をインストール
npm install
# 環境変数を設定
cp .env.example .env
# .envファイルを編集して以下を設定:
# - DISCORD_TOKEN (Discord Botのトークン)
# - VOICE_CHANNEL_ID (監視するボイスチャンネルのID)
# - SPREADSHEET_ID (Google SheetsのID)- Discordの「設定」→「詳細設定」で「開発者モード」を有効化
- 監視したいボイスチャンネルを右クリック
- 「IDをコピー」を選択
.envファイルのVOICE_CHANNEL_IDに貼り付け
# Sheetsにヘッダー行を追加
node setup-sheets.js成功すると ✅ セットアップ完了! と表示されます。
# Botを起動
npm start
# または開発モード(ファイル変更で自動再起動)
npm run dev起動に成功すると以下のように表示されます:
✅ Bot起動完了: YourBotName#1234
📊 朝活トラッキング開始...
🎯 監視チャンネルID: 123456789012345678
- Google Sheetsを開く
- 「拡張機能」→「Apps Script」を選択
Code.gsの内容をgas/Code.gsからコピー&ペースト- 「+」ボタンで HTMLファイルを追加
- ファイル名:
Dashboard - 内容を
gas/Dashboard.htmlからコピー&ペースト
- ファイル名:
- 「デプロイ」→「新しいデプロイ」を選択
- 種類: 「ウェブアプリ」
- 設定:
- 「次のユーザーとして実行」: 自分
- 「アクセスできるユーザー」: 全員
- 「デプロイ」をクリック
- 生成されたURLがダッシュボードのURLです
- Botを起動した状態で、設定したボイスチャンネルに参加
- 参加/退出が自動的にGoogle Sheetsに記録されます
- ダッシュボードURLにアクセスしてデータを確認
- 統計カード: 総セッション数、参加メンバー数、総活動時間、平均参加時間
- 日別グラフ: 日ごとの参加時間と参加人数の推移
- ランキング: メンバー別の参加時間ランキング
- ヒートマップ: GitHub風のアクティビティ表示
.envファイルの設定を確認DISCORD_TOKENが正しいか確認- Node.jsのバージョンを確認(18以上推奨)
credentials.jsonが正しい場所にあるか確認- Service AccountのメールアドレスとSheets共有を確認
SPREADSHEET_IDが正しいか確認ActivityLogシートが存在するか確認
- Apps Scriptのデプロイ設定を確認
- 「アクセスできるユーザー」が「全員」になっているか確認
- スクリプトにエラーがないか確認(Apps Scriptのログを確認)
morining-winner/
├── bot.js # Discord Bot本体
├── sheets.js # Google Sheets連携
├── setup-sheets.js # Sheets初期化スクリプト
├── package.json # npm設定
├── .env.example # 環境変数テンプレート
├── .env # 環境変数(作成必要)
├── credentials.json # Google API認証情報(作成必要)
└── gas/
├── Code.gs # Google Apps Script
└── Dashboard.html # ダッシュボードHTML
- 通知機能(連続参加記録達成時など)
- 週次/月次レポート
- 目標設定機能
- スマホアプリ対応
- CSV/PDFエクスポート
MIT
質問や問題があれば、GitHubのIssuesで報告してください。
朝活、頑張りましょう! 🌟