Discord 上で動作する予算管理 Bot システムです。
開発・ローカル実行手順は docs/development.md を参照してください。実装・設計の詳細は docs/ 配下の各資料を参照してください。
以下は実装済みの主要な Discord スラッシュコマンドの軽い一覧です。運用上の詳細や権限、使い方は 運用資料 を参照してください。
- システム
/become-admin— 初期管理者化(ブートストラップ用パスワード)
- 申請ワークフロー
/create-request— 予算使用申請の作成(証跡添付あり)/list-requests— 自分の申請一覧表示/request-detail— 指定申請の詳細表示(証跡添付を含む)/cancel-request— 申請の取消
- 承認関連
/pending-list— 未承認申請一覧の表示/approve— 申請の承認/reject— 申請の却下/revoke-approval— 承認の取り消し
- 予算関連
/remaining-budget— 班の残予算確認/usage-history— 取引履歴表示/add-budget— 追加予算の付与(管理者権限)
- 班・ユーザー管理
/register-group,/delete-group,/list-groups/register-user,/set-user-role,/remove-user/assign-group,/unassign-group,/group-members,/list-users,/user-info
詳しい実装状況は 実装状況 を参照してください。
Ubuntu 環境で Docker Compose を使って本番稼働させる手順を示します。
- OS: Ubuntu 22.04 LTS 推奨(20.04 でも可)
- Docker: Docker Engine 20.10 以上
git clone https://github.com/CASru-IT/BudgetManagementBotSystem.git
cd BudgetManagementBotSystem.env.example をコピーして .env を作成し、シークレット値を設定します。
cp .env.example .env主な設定項目:
環境変数の詳細(.env):
-
Discord__Token(必須)- Discord の Bot トークンを指定します。公開しないでください。
- 例:
Discord__Token=NzA1...(実際の値は長いトークン文字列)
-
Discord__CommandRegistrationMode(Guild|Global)- スラッシュコマンドの登録先を指定します。この Bot は単一サーバー運用を想定しているため、既定は
Guildです。 Guildでは Discord への反映が速く、起動時に現在の実装済みコマンドだけを登録するため、古いコマンドを落としやすくなります。
- スラッシュコマンドの登録先を指定します。この Bot は単一サーバー運用を想定しているため、既定は
-
Discord__GuildId(Guild登録時は必須)- コマンドを登録する Discord サーバー ID を指定します。
Discord__CommandRegistrationMode=Globalの場合は不要です。
-
DB_USER,DB_PASSWORD,DB_NAME(推奨)- Compose のデフォルト設定ではこれらの値から接続文字列を生成します(
ConnectionStrings__Dbが未指定の場合)。 - 例:
DB_USER=postgres/DB_PASSWORD=secret/DB_NAME=budget
- Compose のデフォルト設定ではこれらの値から接続文字列を生成します(
-
ConnectionStrings__Db(任意、上書き可)- 完全な Npgsql 接続文字列を直接指定する場合に使用します。設定すると上記の
DB_*値より優先して使用されます。 - 例:
ConnectionStrings__Db=Host=postgres;Database=budget;Username=postgres;Password=secret
- 完全な Npgsql 接続文字列を直接指定する場合に使用します。設定すると上記の
-
AdminBootstrap__Password(必須/初期化用)/become-adminコマンドで初期管理者を立てるための共有パスワードです。
-
EvidenceStorage__BasePath(必須)- コンテナ内の証跡ファイル保存先パス。デフォルトは
/app/data/evidences。 docker-compose.ymlではホストの./src/BudgetManagementBotSystem/data/evidencesをマウントしています。ホスト側のディレクトリに書き込み権限が必要です。
- コンテナ内の証跡ファイル保存先パス。デフォルトは
-
FiscalYearStartMonth__Month(推奨)- 会計年度の開始月です。
1から12の範囲で指定します。 - 例:
FiscalYearStartMonth__Month=4
- 会計年度の開始月です。
-
UseInMemoryDatabase(true|false)- 開発時に
trueにすると InMemory DB を使用して PostgreSQL を不要にします。本番では必ずfalseにしてください。
- 開発時に
docker compose up -d --builddocker compose ps
docker compose logs -f appgit pull
docker compose up -d --build停止:
docker compose downdocker-compose.yml では PostgreSQL のデータボリューム名を CasruBudgetDB として定義しています。ボリュームの中身を確認したり、データベースのダンプを取得する代表的な手順を示します(Ubuntu 上での実行を想定)。
- ボリュームの情報を確認する
docker volume inspect CasruBudgetDB- ボリューム内のファイル一覧を取得する(読み取り専用で Alpine コンテナを使う)
docker run --rm -v CasruBudgetDB:/data alpine ls -la /data- PostgreSQL コンテナに接続して psql を使う
docker compose exec -it postgres sh -lc 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB"'- テーブル一覧を確認する
docker compose exec -it postgres sh -lc 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "\dt"'- 1 テーブルの定義を確認する
docker compose exec -it postgres sh -lc 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "\d \"Users\""'- 1 テーブルの中身を確認する
docker compose exec -it postgres sh -lc 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "SELECT * FROM \"Users\" LIMIT 20;"'- CSV として外へ出す
mkdir -p ./readonly
docker compose exec -T postgres sh -lc 'psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "\copy (SELECT * FROM \"Users\") TO STDOUT WITH CSV HEADER"' > ./readonly/users.csv