Discord 内で動作するゲームアプリケーションです。クリックゲームとタイピングゲームをDiscord上で楽しむことができます。
- テキストコマンド:
!playでゲームを開始 - スラッシュコマンド:
/playgameでゲームを開始 - エラーハンドリング完備
- 日本語サポート
- クリックゲーム: 🐄 カウをクリックして楽しむゲーム
- タイピングゲーム: ⌨️ タイピングスキルを試すゲーム
- Discord Embedded App SDK を使用した埋め込み対応
- React + Vite による高速な開発体験
- React 19.1.0 - UI フレームワーク
- Vite 6.3.5 - 高速ビルドツール
- React Router DOM 7.6.2 - ルーティング
- @discord/embedded-app-sdk 2.0.0 - Discord 埋め込みアプリ SDK
- discord.js 14.20.0 - Discord API ラッパー
- Node.js - JavaScript ランタイム
- dotenv - 環境変数管理
- Vercel - フロントエンドホスティング
- GitHub - バージョン管理
- Node.js 18.x 以上
- npm または yarn
- Discord アカウント
- Discord Developer Portal でアプリケーションを作成済み
git clone https://github.com/Metagri-Bot/discord-game-app.git
cd discord-game-appnpm install.env.sample をコピーして .env ファイルを作成:
cp .env.sample .env.env ファイルを編集して、以下の値を設定:
# Discord Bot のトークン(Bot タブから取得)
DISCORD_TOKEN=your_discord_bot_token_here
# Discord アプリケーションのクライアント ID(General Information から取得)
VITE_DISCORD_CLIENT_ID=your_discord_client_id_here- Discord Developer Portal にアクセス
- アプリケーションを選択
- Bot タブを開く
- 以下の権限を有効化:
- Privileged Gateway Intents:
- ✅
MESSAGE CONTENT INTENT - ✅
GUILD MESSAGES - ✅
GUILDS
- ✅
- Privileged Gateway Intents:
- Reset Token をクリックしてトークンをコピー
- トークンを
.envのDISCORD_TOKENに設定
- OAuth2 タブを開く
- Scopes で以下を選択:
botapplications.commands
- Bot Permissions で以下を選択:
Send MessagesRead Message HistoryUse Slash Commands
- 生成された URL を使用してボットをサーバーに招待
- OAuth2 → General タブ
- Redirects に Vercel のデプロイ URL を追加
- CLIENT ID をコピーして
.envのVITE_DISCORD_CLIENT_IDに設定
npm startまたは
node bot.js起動すると以下のメッセージが表示されます:
✅ ボットが起動しました: YourBotName#1234
📊 5 サーバーに接続中
| コマンド | 説明 | 使用例 |
|---|---|---|
!play |
ゲームを開始 | Discord のチャンネルで !play と入力 |
実行例:
ユーザー: !play
Bot: 🎮 ゲーム開始!
| コマンド | 説明 | 使用例 |
|---|---|---|
/playgame |
ゲームを開始 | /playgame を入力して Enter |
実行例:
ユーザー: /playgame
Bot: 🎮 Slash Command でゲーム開始!
初回のみ、スラッシュコマンドを Discord に登録する必要があります:
# register-commands.js ファイルを作成して実行
node register-commands.jsregister-commands.js の内容:
import { REST, Routes } from 'discord.js';
import dotenv from 'dotenv';
dotenv.config();
const commands = [
{
name: 'playgame',
description: 'ゲームを開始します',
},
];
const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN);
try {
console.log('スラッシュコマンドを登録中...');
await rest.put(
Routes.applicationCommands(process.env.VITE_DISCORD_CLIENT_ID),
{ body: commands },
);
console.log('✅ スラッシュコマンドが正常に登録されました');
} catch (error) {
console.error('❌ スラッシュコマンドの登録に失敗しました:', error);
}- 環境変数が設定されていない場合、エラーメッセージを表示して終了
- Discord への接続エラーを適切に処理
- メッセージ送信エラーを catch して再試行
- 起動時にボット名とサーバー数を表示
- エラー発生時に詳細なログを出力
- コマンド実行時のログ記録
npm run dev開発サーバーが起動します(デフォルト: http://localhost:5173)
npm run buildビルド成果物は dist/ ディレクトリに生成されます。
npm run previewビルドした成果物をローカルでプレビューします。
npm run lintESLint でコードをチェックします。
詳細な手順は VERCEL_SETUP.md を参照してください。
-
Vercel プロジェクトを作成
- https://vercel.com/new にアクセス
- GitHub リポジトリを選択
-
環境変数を設定
- Vercel Dashboard → Settings → Environment Variables
VITE_DISCORD_CLIENT_IDを追加
-
デプロイ
mainブランチにプッシュすると自動デプロイ
注意: Vercel は静的サイト/サーバーレス用のため、Bot は別途ホスティングが必要です。
推奨ホスティングサービス:
- Railway - 簡単セットアップ
- Heroku - 定番サービス
- DigitalOcean - VPS
- AWS EC2 - スケーラブル
- Discord アプリを開く
- サーバーのチャンネルで
/playコマンドを実行 - 埋め込みアプリが起動
- ゲームを選択:
- トップページ (/): クリックゲーム
- /typing: タイピングゲーム
Discord Embedded App 内で URL を変更してゲームを切り替えることができます。
discord-game-app/
├── src/ # React アプリのソースコード
│ ├── App.jsx # メインアプリコンポーネント
│ ├── ClickGame.jsx # クリックゲームコンポーネント
│ ├── TypingGame.jsx # タイピングゲームコンポーネント
│ ├── main.jsx # エントリーポイント
│ └── App.css # スタイル
├── public/ # 静的ファイル
├── bot.js # Discord Bot のメインファイル
├── .env.sample # 環境変数のサンプル
├── .env # 環境変数(Git 管理外)
├── vercel.json # Vercel 設定
├── vite.config.js # Vite 設定
├── package.json # 依存関係
├── README.md # このファイル
└── VERCEL_SETUP.md # Vercel セットアップガイド
問題: ❌ DISCORD_TOKEN が設定されていません
解決方法:
.envファイルが存在するか確認DISCORD_TOKENが正しく設定されているか確認- Discord Developer Portal で Token を再生成
問題: Discord SDK の初期化に失敗しました
解決方法:
- Discord アプリ内で開いているか確認(ブラウザでは動作しません)
VITE_DISCORD_CLIENT_IDが正しく設定されているか確認- Vercel の環境変数を確認
問題: /playgame が候補に出てこない
解決方法:
- スラッシュコマンドを登録(上記の「スラッシュコマンドの登録」参照)
- Bot がサーバーに参加しているか確認
- Bot に
applications.commandsスコープがあるか確認
問題: Authorization required to deploy
解決方法:
- Vercel Dashboard で GitHub 連携を確認
- リポジトリへのアクセス権限を再認証
- VERCEL_SETUP.md の手順を参照
ISC License
- このリポジトリを Fork
- 新しいブランチを作成 (
git checkout -b feature/amazing-feature) - 変更をコミット (
git commit -m 'Add some amazing feature') - ブランチにプッシュ (
git push origin feature/amazing-feature) - Pull Request を作成
問題や質問がある場合は、Issues を作成してください。
- Discord.js ガイド
- Discord Developer Portal
- Discord Embedded App SDK
- Vite ドキュメント
- React ドキュメント
- Vercel ドキュメント
Made with ❤️ for Discord Gaming Community