Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

83 Commits

Folders and files

Repository files navigation

🏮 座敷童の賭場 (casino-bot)

Discord 上で動く 和風カジノ Bot。 ただのギャンブルツールではなく、座敷童というキャラクターと「縁を結んでいく」育成体験を、賭博メカニクスの上に重ねた構造。

「賭けて、勝って、負けて、座敷童に少しずつ気に入られていく Discord Bot」


🌌 ブランチ運用

現在の開発・本番運用は v2 ブランチ で進めています(main は v1 時代のスナップショット)。 v2 以降の主な追加要素:

  • 二種目通貨経済(エテル ⇄ Gil 両替・/両替)
  • VIP 月会員制度(/vip・奥座敷の特典)
  • 対人ゲーム7種(/勝負 丁半 / チンチロ / サシ / ブラックジャック / インディアン / 5枚交換ポーカー / 板)
  • 奥座敷ホールデム(/勝負 奥ポーカー・VIP専用テキサスホールデム、サイドポット対応)
  • 卓を立てる(勝負と連動するプライベートVCの自動生成・デポジット制)
  • 連鎖ボーナス(燃える炉)(ソロ連勝で配当倍率ブースト)
  • 釈迦の心づけ / 釈迦の説法(オーナー専用の褒章 / 罰則)
  • /管理 設定 のパネル化(チャンネル・ロール・ログ送信先を UI から)
  • アステル(座敷童キャラの段階・好感度・モード制御)
  • トランザクションフィード(取引ログのライブ送信)

VPS(ConoHa)では v2 を pull → npm run build → pm2 restart で本番反映。 個別の機能やバグ修正は v2 に直接コミットしていく開発スタイル。


✨ 特徴

  • キャラクター駆動:全ての勝敗・操作に座敷童のセリフが付き、好感度・覚醒段階・モード(default / tsundere / yami)でセリフが動的に変化
  • 7段階の覚醒システム:幽か → 灯し → 宿り → 結び → 花憑き → 常盤 → 顕現。段階に応じてデイリー倍率・加護率・JPボーナス・福税軽減が解放
  • 五行属性(覚醒3で解放):木 / 火 / 土 / 金 / 水。相生 ×1.2、相剋 ×1.5
  • インフレ抑制経済:累進奉納(福の重み)/残高上限/動的ハウスエッジ/プール分配の4層構造で長期インフレを抑制
  • 11種のスラッシュコマンド、/遊ぶ 配下に6ゲームを集約
  • 冪等で壊れない設計:bet ロック、SAVEPOINT トランザクション、起動時の自動返金、PM2 自動再起動

🎮 ゲーム一覧

コマンド 内容
/遊ぶ 巻物 🎰 百鬼夜行巻物(スロット、JP 付き)
/遊ぶ 札遊び 🃏 花札勝負(ブラックジャック)
/遊ぶ 暴落 📈 龍脈昇り(クラッシュ)
/遊ぶ 丁半 🎴 丁半博打(ハイ&ロー)
/遊ぶ 輪盤 🎡 運命の水鏡(共有型ルーレット)
/遊ぶ 賽 🎲 チンチロ
/競馬 🏇 神馬競走(パリミューチュエル、土日 21:00 自動開催)
/龍脈 📈 龍脈相場(5銘柄、3時間ごとに値動き)
/福分け 📅 デイリーボーナス
/座敷童 覚醒 status / mode / element
/案内 ホーム画面

🛠 技術スタック

  • 言語: TypeScript 5.7 (strict)
  • ランタイム: Node.js 24(node:sqlite を使うため 22+ 必須)
  • ライブラリ: discord.js v14 / node-cron / dotenv
  • 永続化: SQLite(WAL モード、foreign_keys ON)
  • プロセス管理: PM2
  • デプロイ先: ConoHa VPS(Ubuntu 24.04)

🚀 セットアップ

1. 依存インストール

npm install

2. 環境変数

.env をプロジェクト直下に作成:

DISCORD_TOKEN=...     # 必須
CLIENT_ID=...         # 必須
GUILD_ID=             # 任意:開発時のみ即時デプロイ用
RACE_CHANNEL_ID=      # 任意:定期競馬の開催チャンネル
OWNER_ID=             # 任意:監視ダッシュボードから集計除外

3. スラッシュコマンド登録

npm run deploy

4. 起動

# 開発(ts-node)
npm run dev

# 本番(ビルド + node)
npm run build
npm start

5. PM2 で常駐

npm run pm2:start
npm run pm2:logs
npm run pm2:restart

📁 ディレクトリ構成

src/
├─ index.ts             — エントリ、interaction ルータ
├─ config.ts            — 環境変数読込
├─ deploy-commands.ts   — スラッシュコマンド登録
│
├─ core/                — 横断ドメインロジック
│  ├─ db.ts             — DB 初期化・マイグレーション
│  ├─ bank.ts           — 残高操作・bet バリデーション
│  ├─ economy.ts        — 福の重み・動的HE・プール分配
│  ├─ dialogue.ts       — 座敷童セリフエンジン
│  ├─ zashikiStage.ts   — 7段階覚醒システム
│  ├─ quests.ts         — クエスト
│  └─ scheduler.ts      — cron スケジューラ
│
├─ games/               — 各ゲーム実装
├─ ui/                  — Embed / ホーム画面 / パネル
└─ admin/               — /管理 コマンド

💰 経済設計の要点

累進奉納(福の重み)

所持金が多いほど勝利金から自動天引き:

所持金 奉納率
≤ 10,000 0%
≤ 50,000 5%
≤ 100,000 10%
≤ 300,000 20%
それ以上 30%

天引き分は JP プール / 底辺保護プールへ。覚醒段階6で 50% 軽減。

動的ハウスエッジ

サーバー全体の小判総量を playerCount × 15,000 と比較し、デフレ時は -2%、インフレ時は +2% を自動補正。最終 HE は 0〜15% にクランプ。

ハウス収益の分配

ハウスが吸収した小判は 20% → JP / 30% → 底辺保護 / 50% → 消滅。50%消滅が長期インフレへの最終ブレーキ。

格(Tier)

格 必要 Lv bet 上限
👤 人間 1 500
🌗 半妖 10 2,000
👹 妖 25 10,000
🐉 大妖 50 50,000
⛩️ 神 100 100,000

🛡 防御層

  1. validateBet() — integer / safe integer / 範囲チェック
  2. adjustBalance() — 負残高拒否、Number.isSafeInteger でオーバーフロー防御
  3. game_sessions テーブルでゲーム単位ロック、競馬は is_racing の原子 UPDATE
  4. 金銭操作は runTransaction (SAVEPOINT) でアトミック
  5. 起動時 refundStaleBetsOnStartup() で未精算競馬ベットを全額返金
  6. interaction / process 例外吸収で 1リクエスト失敗による全停止を防止
  7. PM2 で落ちても自動再起動、メモリ 500M 超でも再起動

📅 スケジューラ

cron 式 内容
0 21 * * 6,0 競馬:土日 21:00 JST 自動開催
0 */3 * * * 龍脈相場:3時間ごとに全銘柄更新

TZ=Asia/Tokyo を PM2 env で強制。


📦 バックアップ

npm run backup

scripts/backup.sh を毎日 04:30 cron 実行。sqlite3 .backup で online backup、7日以上前は自動削除。


📖 ドキュメント

  • DESIGN.md — 設計思想・経済設計・覚醒システムの詳細
  • DEPLOY.md — VPS デプロイ手順

📝 ライセンス

Private project.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages