Skip to content

Discord の使い方

関連: 月次予算 / エージェント / Bot / 取込

役割分担

自動取込の本線には使わない

人との入出力は 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 へ。 予算・残りもコードブロックの表形式で出す。

続けて自然言語で直せる。複数件も可。

id 42 を趣味に
サイゼは趣味、スタバは食費

仕組みは 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 を取り込み唯一の入口にする