Discord上で3〜8人向けのワンナイト人狼風ゲームを遊べるBotです。 人数が足りない場合はAIプレイヤー(Grok 4.1 Fast)で補完できます!
- プレイ人数: 3〜8人
- 中央カード: 2枚
- 対応役職: 9種類(村人、人狼、大狼、占い師、怪盗、狩人、吊り人、狂人、村長)
- スラッシュコマンド対応: Discord の
/コマンドで操作 - 役職構成カスタマイズ: ホストがゲーム開始前に役職を自由に変更可能
- 🤖 AIプレイヤー対応: 人数が足りない時はLLMプレイヤーで補完
人数が足りない場合、xAI Grok 4.1 Fast Reasoning を使用したAIプレイヤーでゲームを開始できます。
/onj add_bot [人数]でAIプレイヤーを追加- AIプレイヤーは役職に応じて夜の行動を自動実行
- 議論フェーズでは人間の発言に反応して順番に発言
- 投票フェーズでは得た情報に基づいて自動投票
- 7種類の個性的なキャラクター(アリス、ボブ、チャーリー、ダイアナ、エミリー、フランク、グレース)
- キャラクターは
game/characters.jsonで編集可能
| 役職 | 絵文字 | 夜の行動 | 説明 |
|---|---|---|---|
| 村人 | 🧑🌾 | なし | 特殊能力なし。議論で人狼を見つけ出す |
| 占い師 | 🔮 | 他プレイヤー1人 or 中央2枚を見る | 情報収集のエキスパート |
| 怪盗 | 🦹 | 他プレイヤーとカードを交換 | 交換後の役職が最終役職になる |
| 狩人 | 🏹 | 道連れ対象を指名 | 処刑されたら指名者を道連れに |
| 村長 | 👑 | なし | 投票時に2票分の効力を持つ |
| 役職 | 絵文字 | 夜の行動 | 説明 |
|---|---|---|---|
| 人狼 | 🐺 | 他の人狼を確認 | 処刑されないように立ち回る |
| 大狼 | 🐺👑 | 他の人狼を確認 + 中央カードを見る | 人狼の上位互換 |
| 狂人 | 🤪 | なし | 人狼が誰かわからないが人狼陣営。人狼がいない場合は村人陣営 |
| 役職 | 絵文字 | 夜の行動 | 説明 |
|---|---|---|---|
| 吊り人 | 🎭 | なし | 自分が処刑されれば単独勝利 |
| 陣営 | 勝利条件 |
|---|---|
| 村人陣営 | 人狼/大狼を1人以上処刑する |
| 人狼陣営 | 人狼/大狼が1人も処刑されない(狂人も勝利) |
| 吊り人 | 自分が処刑される(単独勝利) |
平和村(人狼が場にいない場合):
- 誰も処刑されない → 全員の勝利
- 誰かが処刑された → 処刑された人の勝利
- 狂人は村人陣営として扱われる
- Python 3.11 以上
- uv パッケージマネージャー
- xAI APIキー(AIプレイヤー機能を使用する場合)
git clone https://github.com/Aimitmk/onj_v3.git
cd onj_v3# 仮想環境を作成
uv venv .venv
# 有効化 (macOS / Linux)
source .venv/bin/activate
# 有効化 (Windows PowerShell)
.venv\Scripts\Activate.ps1
# 有効化 (Windows コマンドプロンプト)
.venv\Scripts\activate.batuv pip install discord.py python-dotenv httpxcp .env.example .env.env ファイルを編集し、必要な設定を行います:
DISCORD_TOKEN=your_bot_token_here
GUILD_ID=your_server_id_here
XAI_API_KEY=your_xai_api_key_here
| 環境変数 | 必須 | 説明 |
|---|---|---|
DISCORD_TOKEN |
✅ | Discord Botのトークン |
GUILD_ID |
❌ | テストサーバーのID(設定すると即座にコマンド反映) |
XAI_API_KEY |
❌ | xAI APIキー(AIプレイヤー機能を使用する場合) |
XAI_MODEL |
❌ | 使用するモデル(デフォルト: grok-4-1-fast-reasoning) |
GUILD_ID の取得方法:
- Discordの「ユーザー設定」→「詳細設定」→「開発者モード」を ON にする
- テストしたいサーバーを右クリック →「サーバーIDをコピー」
XAI_API_KEY の取得方法:
- xAI Console にアクセス
- アカウントを作成し、APIキーを取得
- Discord Developer Portal にアクセス
- 「New Application」でアプリケーションを作成
- 「Bot」タブでBotを作成し、トークンをコピー
⚠️ 重要:Privileged Gateway Intents を有効にする- 「Bot」タブの下部にある「Privileged Gateway Intents」セクションで以下を ON にする:
- ✅ SERVER MEMBERS INTENT
- ✅ MESSAGE CONTENT INTENT
- 「Bot」タブの下部にある「Privileged Gateway Intents」セクションで以下を ON にする:
- 「OAuth2」→「URL Generator」で以下の権限を選択:
- Scopes:
bot,applications.commands - Bot Permissions:
Send Messages,Send Messages in Threads,Embed Links,Read Message History
- Scopes:
- 生成されたURLでBotをサーバーに招待
python bot.py起動成功時、コンソールに以下のようなメッセージが表示されます:
ワンナイト人狼Bot がログインしました: BotName#1234
ギルド XXXXXXXXXX にコマンドを同期しました: 1個
- ゲーム開始:
/onj startで募集フェーズを開始 - 参加:
/onj joinでプレイヤーが参加 - AIプレイヤー追加:
/onj add_botで人数が足りない場合にAIを追加 - 役職設定:
/onj rolesで役職構成をカスタマイズ(オプション) - ゲーム開始:
/onj beginでゲームを開始(3〜8人必要) - 夜フェーズ: 各役職がDMで行動を選択(時間制限なし、全員完了まで待機)
- 昼フェーズ: 議論後、
/onj vote @プレイヤーで投票 - 結果発表: 処刑結果と勝敗が発表される
| コマンド | 説明 |
|---|---|
/onj start |
ゲームの募集を開始する |
/onj join |
ゲームに参加する |
/onj leave |
ゲームから離脱する |
/onj players |
現在の参加者を表示する |
/onj roles |
役職構成を変更する(ホストのみ) |
/onj add_bot [人数] |
AIプレイヤーを追加する(ホストのみ) |
/onj remove_bot [人数] |
AIプレイヤーを削除する(ホストのみ) |
/onj begin |
ゲームを開始する(ホストのみ) |
/onj vote @player |
プレイヤーに投票する(平和村も選択可) |
/onj cancel |
ゲームをキャンセルする(ホストのみ) |
/onj help |
ヘルプを表示する |
| 役職 | コマンド | 説明 |
|---|---|---|
| 占い師 | !seer player プレイヤー名 |
プレイヤーの役職を見る |
| 占い師 | !seer center |
中央カード2枚を見る |
| 怪盗 | !thief プレイヤー名 |
プレイヤーとカードを交換 |
| 怪盗 | !thief skip |
何もしない |
| 狩人 | !hunter プレイヤー名 |
道連れ対象を指名 |
| 狩人 | !hunter skip |
道連れを指名しない |
| 人数 | 役職構成 | ゲームの傾向 |
|---|---|---|
| 3人 | 人狼×2, 占い師, 怪盗, 村人 | 基本にして至高。展開が早く推理が白熱 |
| 4人 | 人狼×2, 占い師, 怪盗, 村人×2 | バランス型。最もバランスが良い人数 |
| 5人 | 人狼×2, 占い師, 怪盗, 狂人, 村人×2 | 狂人追加で人狼側とのバランスを調整 |
| 6人 | 人狼×2, 占い師, 怪盗, 狂人, 村人×3 | 騙り合い激化。狂人の嘘COが鍵 |
| 7人 | 人狼×2, 占い師, 怪盗, 狂人, 吊り人, 村人×3 | カオス展開。推理が非常に難しい |
| 8人 | 人狼×2, 占い師, 怪盗, 狂人, 吊り人, 村人×4 | パーティープレイ。勢いで説得! |
※ /onj roles コマンドで自由にカスタマイズ可能です。
/onj roles コマンドで、ボタンUIを使って役職構成を変更できます:
- +/- ボタン: 各役職の枚数を増減
- 🔄 リセット: デフォルト構成にリセット
- ✅ 完了: 設定を確定
注意: 役職カードの合計枚数は「プレイヤー人数 + 2(中央カード)」である必要があります。
- Botを一度サーバーから削除し、再度招待してみてください
- コマンドの同期には最大1時間かかる場合があります
- プライバシー設定で「サーバーメンバーからのダイレクトメッセージを許可する」が有効になっているか確認してください
- 役職カードの合計枚数が「プレイヤー人数 + 2」になっているか確認してください
/onj rolesで調整するか、「🔄 リセット」を使用してください
.envファイルにXAI_API_KEYが正しく設定されているか確認してください- xAI APIの課金が有効になっているか確認してください
- コンソールのエラーメッセージを確認してください
onj_v3/
├── bot.py # Discord Bot本体
├── config.py # ゲーム設定・定数
├── game/
│ ├── __init__.py
│ ├── models.py # データモデル(Role, Player, GameState等)
│ ├── logic.py # ゲームロジック(夜行動、投票、勝敗判定)
│ ├── llm_player.py # AIプレイヤー(Grok API連携)
│ ├── characters.json # AIキャラクター定義(編集可能)
│ └── rules.md # ゲームルール(LLMプロンプト用)
├── pyproject.toml # 依存関係
├── .env.example # 環境変数サンプル
├── CLAUDE.md # 開発ガイド
└── README.md # このファイル
MIT License