QQbot: Tencent 公式 SDK で書いた QQ グループのサイコロ Bot
QQbot は QQ グループ向けの Bot で、Tencent 公式の qq-botpy SDK をベースに、グループ内でトークン式サイコロ賭けの遊びを回す。Bot を @ するだけでイベントを受け取り、コアロジックはすべて賭けと開票を軸に動く。
遊び方はトークンサイコロ。大100 単50 と @ 送信すれば 100 を大に、50 を奇にベット、そのあと sh か 🎲 を投げて開票、連続で振るなら sh3。オッズはコードにベタ書きで、大小 1.97、奇偶 2.9、目の一致は最高 6.9、適当に決めた数字だが遊べればいい。その上に胴元と紅包がある。我当老板 で胴元席に座り 100 万トークンで場を開く、hb 100 5 で紅包を送り、他の人が 领取 で受け取り、送り間違えたら 撤回 で取り消す、誰が金を配れるかは admin リストで管理する。残高照会は ye。
触れておきたい点が二つ。データはデータベースには載せず、ローカルの JSON 一つでアカウントを保持するだけだが、グループチャットは並行だ。複数人が同時にベットし同時に紅包を奪うと、読み書きが衝突して残高が誤計算される。そのため永続化はすべて asyncio のロックで直列化している。プロセスは長期常駐で、SIGINT/SIGTERM を受けて優雅に終了する。シグナルを受けたらまずディスクに書き出してから抜けるので、Ctrl+C で帳簿を失うことがない。
設定は探索チェーンを通る。まず config.yaml を見て、なければルートディレクトリに戻り、さらに other/run/ に戻る、あるいは DWGXBOT_CONFIG で直接パスを指す。中身は appid、secret、admins の三つだけ。起動は python Code/QQbot/main/DwgxBot.py の一行、ログと data.json は other/run/ に落ちる。
リポジトリには他のものも詰め込んである。Code/web/ は AES 暗号化通信を試したデモで、WebSocket チャットを 0.0.0.0:20008 に立て、メッセージはセッション鍵で暗号化する。other/pyside6tool/ は PySide6 のデスクトップ小物ツール一式で、別リポジトリに分けるのが面倒でまとめて放り込んだ。スタックに凝ったところはない。qq-botpy 1.2.1、aiohttp、websockets、APScheduler、cryptography、PySide6 6.8、CI は push と PR で compileall を一度だけ回して構文チェックするのみ、テストはまだ書いていない。
練習用プロジェクトで WIP 状態、オッズと一部の URL はまだプレースホルダとしてベタ書きだが、コアの Bot は安定して動く。