Skip to content

Aimitmk/onj_v3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐺 ワンナイト人狼 Discord Bot

Discord上で3〜8人向けのワンナイト人狼風ゲームを遊べるBotです。 人数が足りない場合はAIプレイヤー(Grok 4.1 Fast)で補完できます!

特徴

  • プレイ人数: 3〜8人
  • 中央カード: 2枚
  • 対応役職: 9種類(村人、人狼、大狼、占い師、怪盗、狩人、吊り人、狂人、村長)
  • スラッシュコマンド対応: Discord の / コマンドで操作
  • 役職構成カスタマイズ: ホストがゲーム開始前に役職を自由に変更可能
  • 🤖 AIプレイヤー対応: 人数が足りない時はLLMプレイヤーで補完

🤖 AIプレイヤー機能

人数が足りない場合、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プレイヤー機能を使用する場合)

1. リポジトリのクローン

git clone https://github.com/Aimitmk/onj_v3.git
cd onj_v3

2. 仮想環境の作成と有効化

# 仮想環境を作成
uv venv .venv

# 有効化 (macOS / Linux)
source .venv/bin/activate

# 有効化 (Windows PowerShell)
.venv\Scripts\Activate.ps1

# 有効化 (Windows コマンドプロンプト)
.venv\Scripts\activate.bat

3. 依存パッケージのインストール

uv pip install discord.py python-dotenv httpx

4. 環境変数の設定

cp .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 の取得方法:

  1. Discordの「ユーザー設定」→「詳細設定」→「開発者モード」を ON にする
  2. テストしたいサーバーを右クリック →「サーバーIDをコピー」

XAI_API_KEY の取得方法:

  1. xAI Console にアクセス
  2. アカウントを作成し、APIキーを取得

🤖 Discord Botの準備

  1. Discord Developer Portal にアクセス
  2. 「New Application」でアプリケーションを作成
  3. 「Bot」タブでBotを作成し、トークンをコピー
  4. ⚠️ 重要:Privileged Gateway Intents を有効にする
    • 「Bot」タブの下部にある「Privileged Gateway Intents」セクションで以下を ON にする:
      • SERVER MEMBERS INTENT
      • MESSAGE CONTENT INTENT
  5. 「OAuth2」→「URL Generator」で以下の権限を選択:
    • Scopes: bot, applications.commands
    • Bot Permissions: Send Messages, Send Messages in Threads, Embed Links, Read Message History
  6. 生成されたURLでBotをサーバーに招待

🚀 Botの起動

python bot.py

起動成功時、コンソールに以下のようなメッセージが表示されます:

ワンナイト人狼Bot がログインしました: BotName#1234
ギルド XXXXXXXXXX にコマンドを同期しました: 1個

📖 遊び方

ゲームの流れ

  1. ゲーム開始: /onj start で募集フェーズを開始
  2. 参加: /onj join でプレイヤーが参加
  3. AIプレイヤー追加: /onj add_bot で人数が足りない場合にAIを追加
  4. 役職設定: /onj roles で役職構成をカスタマイズ(オプション)
  5. ゲーム開始: /onj begin でゲームを開始(3〜8人必要)
  6. 夜フェーズ: 各役職がDMで行動を選択(時間制限なし、全員完了まで待機)
  7. 昼フェーズ: 議論後、/onj vote @プレイヤー で投票
  8. 結果発表: 処刑結果と勝敗が発表される

コマンド一覧

コマンド 説明
/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 ヘルプを表示する

夜フェーズの行動(DMで操作)

役職 コマンド 説明
占い師 !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時間かかる場合があります

DMが届かない

  • プライバシー設定で「サーバーメンバーからのダイレクトメッセージを許可する」が有効になっているか確認してください

役職構成エラー

  • 役職カードの合計枚数が「プレイヤー人数 + 2」になっているか確認してください
  • /onj roles で調整するか、「🔄 リセット」を使用してください

AIプレイヤーが動作しない

  • .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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages