Discord Bot(構成)¶
関連: Discord / 支出の保存 / 月次予算 / Discord エージェント / 更新手順 / systemd
| 用途 | URL |
|---|---|
| この Bot の Application | Discord Developer Portal |
日常のコード反映は systemd 前提で、Bot の更新 を使う。 このページは、何がどう起動するか を説明する。
いまできること¶
- Discord のギルドチャンネル / DM でメッセージを受信する
- Gemini で関西弁の返答を返す(ツッコミ多め。依存・嫉妬は出さない)
- 支出っぽい文を抽出して PostgreSQL (
expenses) に保存(1メッセージで複数件可) - 収入も同様に記録(
incomes/create_income) - 画像添付(レシート、決済画面)を Vision で解析し、金額、店名、内訳、場面を推定
- 大分類 / 小分類 / occasion / 収入分類 は固定リスト(
src/finance_manager/taxonomy.py) - 会話コンテキスト: 今月の支出内訳、支出と収入の訂正、削除
DISCORD_CHANNEL_ID指定時: そのギルドチャンネル + DMDISCORD_CHANNEL_ID空: 見えるギルドチャンネル全部 + DM
ディレクトリ¶
src/finance_manager/
__main__.py … python -m finance_manager の入口
config.py … .env 読み込み
bot.py … Discord イベント(メニュー・tool 結果の表示保険つき)
discord_views.py … 利用状況・予算のボタンメニュー
gemini_client.py … Gemini(Discord は run_agent / 通知は interpret)
agent_tools.py … Function calling の tool 定義と DB 実行
memory.py … 直近やりとり(プロセス内)
scripts/run.sh … venv + PYTHONPATH 込みの起動スクリプト
deploy/finance-manager.service … systemd unit の参考
scripts/run.sh¶
systemd の ExecStart も、手元のフォアグラウンド起動も、このスクリプトを使う。
| コマンド | 効く範囲 |
|---|---|
source .venv/bin/activate |
そのプロセス(または今のシェル)だけ |
export PYTHONPATH=src |
同上。finance_manager パッケージを src/ から見つける |
SSH 先の対話シェルで毎回 source / export しなくてよい。
常駐時は systemd が run.sh を直接実行するので、ログインセッションには依存しない。
フォアグラウンドで試すとき(デバッグ用。本番と二重起動しない):
止める: Ctrl+C
成功時のログ例:
Gemini model chain: gemini-3.5-flash -> ...
Logged in as ...
Listening to DMs + guild channel_id=...
「さっきの〇〇」と今月の内訳¶
- DB からそのユーザーの 今月の支出(最大80件) と直近8件を読む
- プロセス内の直近チャット(最大12往復)を添える
- Gemini が tool(
get_remaining/create_expenses/update_expensesなど)を選んで呼ぶ - update/delete は 自分の支出 id だけ 許可(他人の id は拒否)
- 「今月の内訳」→
get_month_breakdown。カテゴリ表+直近明細(絞り込み)。全文は Grafana - 「今日いくら」「食費の残り」→
get_remaining。表形式の【変動の残り】。内訳一覧にはしない - そのあと「id 42 を趣味に」「サイゼは趣味、スタバは食費」で直せる(複数件可)
Bot 再起動でチャット履歴は消える。 支出一覧は DB から復元されるので、「さっきのスタバ」はまだ効く。