Discord の使い方¶
役割分担¶
自動取込の本線には使わない
人との入出力は Discord に置く。 自動取込は Tunnel + メール に置く。 Grafana / PostgreSQL 向けに構造化データをそのまま入れたいことと、Discord 文面パースを本線にすると経路が脆いことが理由である。
| 向き | 用途 | MVP |
|---|---|---|
| 自宅 → Discord | 確認返信、今月の内訳、予算の残り | 必須 |
| Discord → 自宅 | 手動追加(テキスト / 画像)、訂正、取消。DM も可 | 必須 |
| PayPay 自動取込の主経路 | 使わない(Tunnel 直 POST を正とする) | — |
チャンネル案¶
| チャンネル | 用途 |
|---|---|
#finance |
確認返信、内訳、予算の残り |
#finance-inbox |
手動入力(テキスト / 画像 / スクショ) |
#finance-imports(任意) |
週次 CSV 添付 |
最初は #finance 1本でもよい。
混ざってきたら inbox を分ける。
DM でも会話できる(Bot と共通サーバにいるユーザーから)。
手動追加¶
テキスト¶
例:
スタバ 680 食費
現金で電車 200
さっきの取消
給料 280000
このままで(今月予算を確定し、未割当は別枠貯金へ)
上限を 300000 にして(確定後でも天井を直す。別枠の未割当も載せ直す)
確定取り消し(confirmed を draft に戻し、未割当の別枠を戻す)
貯金 60000 食費 70000 にして
家賃を 80000 にして(固定費マスタ)
月末締め(変動の実残を別枠貯金へ)
メニュー
残高
予算メニュー
使った額
サイゼは趣味、スタバは食費
カテゴリを日用品に直して
欲しいもの Switch 35000
旅行で 80000、期限は 2026-09-30
支出を保存すると、返信の末尾に 【変動の残り】 が付く。食費は今日使用・今日残り(または超過)・今週残りを表示し、他のカテゴリは使用額と月残高のみ表示する。
ボタンメニュー(利用状況・予算)¶
次のような短い文言だけ送ると、Gemini を通さずボタン付きメニューが出る。
| ボタン | 内容 |
|---|---|
| 今日・残り | 食費は今日使用・残り/超過・今週残り。他カテゴリは使用額と月残高 |
| 別枠貯金 | 別枠残高 |
| 今月の内訳 | カテゴリ表+直近明細(全文は Grafana) |
| 今月の予算 | 予算サマリ(表) |
| Grafana | grafana.ntatsuya.com へのリンク |
押下は本人のみ。実装は discord_views.py。
Discord 本体の会話は Gemini Function calling(agent_tools.py)。
予算・残り・内訳はコードブロックの表形式。
| 質問の種類 | 使われるツール |
|---|---|
| 今日いくら使った・合計 | get_budget_facts(today_total_spent 等の指標を組み合わせ) |
| 食費の残り・今日目安 | get_remaining |
| 明日いくら使える | get_tomorrow_guide(今日これ以上使わない前提。食費のみ日割り) |
| 週枠・月枠の確認 | get_budget_allotments |
| 今月の内訳・一覧 | get_month_breakdown(直近のみ表で出し、全文は Grafana) |
| 昨日の食費・先週の合計・特定の期間 | get_period_spend(日付を指定して集計。集計した期間を返信に出す) |
日割りガイドは食費のみ。趣味・日用品・医療は使用額と月残高だけ表示する。
週目安は月曜始まり。週開始時点の月残りを日数で按分して今週ぶんを出し、余りは翌週へ持ち越す。 月初・月末の半端な週は日数ぶんしか取らない(8/31 が月曜なら 1 日ぶん)。 今日目安は「今朝の今日枠 − 今日の使用」。週に余裕があれば余りを残日へ再配分し、週をすでに超過していれば週枠÷今週日数を今日枠にする(週の赤字は今日目安に載せない。超過は週目安で見る)。 上限は設けていないので、使い控えた月は月末の目安が大きく出る。月の最終日は月の残り全部がその日の目安になる。 日付・週の切り替わりで再計算する(月の残÷残日数の単純ペースではない)。 超過すると「超過 N円」と出す。
月初は draft の予算案(給与→固定貯金→固定費→変動枠)が出る。 「このままで」で確定する。上限が違っていたら「上限を 300000 にして」。確定を取り消すなら「確定取り消し」。 詳細は 月次予算。
今月の内訳と訂正¶
「今月の内訳」はカテゴリ表+直近明細(件数は絞る)。すべて見るときは Grafana へ。 予算・残りもコードブロックの表形式で出す。
続けて自然言語で直せる。複数件も可。
仕組みは Bot の構成。
Bot が受信し、Gemini で抽出し、検証し、PG に保存し、関西弁で確認返信する。
画像と添付(推奨 UX)¶
よしなに添付して投げる。
| 添付例 | 期待する処理 |
|---|---|
| PayPay / クレカの明細スクショ | 金額、店名、日時を抽出 |
| レシート写真 | 合計金額を優先抽出(明細行は取れればボーナス) |
| 家計メモの写真 | 読める範囲で支出化 |
| CSV ファイル | 週次取込扱い(画像解析ではない) |
フロー:
Discord に画像(+ 任意の一言)
→ Bot が添付を取得
→ raw(画像URL/バイナリメタ)を保存
→ Gemini Vision で構造化抽出
→ プログラム検証
→ PG 保存
→ 「記録した。今日あと ¥…」と返信
テキストと画像が両方ある場合は、テキストをヒント(カテゴリ指定など)として使う。
Bot 要件¶
- Bot + Gateway: Discord → 自宅(メッセージ / 添付の受信)に必要。外向き WebSocket なので自宅の inbound 公開は不要
- Message Content Intent: 本文読み取りに必要
- 添付読み取り権限
MVP から Bot を使う(手動入力と画像があるため)。 Webhook のみでは Discord→自宅ができない。
カテゴリについて¶
PayPay 自動経路と同様、多くの通知からは商品内訳は取れない。
一方で レシート画像で明細が読めるとき は line_items に内訳を保存する。
読めないスクショは合計、店名、日時が中心になる。
店種 + 時間帯から 場面(夕食 / 遊び など) を occasion として推定する。
カテゴリは Gemini 推定、またはユーザーが一言で指定、訂正する。
例: 画像添付 + 日用品 のメッセージ。
やらないこと¶
- PayPay 自動通知の本線を Discord Webhook 経由にする(Tunnel を本線に維持)
- 認証なしで誰でも投稿できる公開 Webhook を取り込み唯一の入口にする