{"id":48043726,"url":"https://github.com/laitszkin/ltdjms","last_synced_at":"2026-04-27T09:01:39.257Z","repository":{"id":343414548,"uuid":"1106955397","full_name":"LaiTszKin/ltdjms","owner":"LaiTszKin","description":"Java 17 Discord bot management system with virtual currency, game tokens, shop, redemption codes, and AI agent tooling.","archived":false,"fork":false,"pushed_at":"2026-04-14T18:49:12.000Z","size":3225,"stargazers_count":1,"open_issues_count":7,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-14T20:27:50.612Z","etag":null,"topics":["bot-management","dagger2","discord-bot","docker","flyway","game-tokens","java","jda","jooq","langchain4j","maven","postgresql","redemption-codes","redis","virtual-currency"],"latest_commit_sha":null,"homepage":"https://ltdj.vercel.app","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LaiTszKin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":"COPYRIGHT","agents":null,"dco":null,"cla":null}},"created_at":"2025-11-30T09:47:00.000Z","updated_at":"2026-04-14T18:49:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/LaiTszKin/ltdjms","commit_stats":null,"previous_names":["laitszkin/ltdjms"],"tags_count":68,"template":false,"template_full_name":null,"purl":"pkg:github/LaiTszKin/ltdjms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LaiTszKin%2Fltdjms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LaiTszKin%2Fltdjms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LaiTszKin%2Fltdjms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LaiTszKin%2Fltdjms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LaiTszKin","download_url":"https://codeload.github.com/LaiTszKin/ltdjms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LaiTszKin%2Fltdjms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32329466,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bot-management","dagger2","discord-bot","docker","flyway","game-tokens","java","jda","jooq","langchain4j","maven","postgresql","redemption-codes","redis","virtual-currency"],"created_at":"2026-04-04T14:16:18.172Z","updated_at":"2026-04-27T09:01:39.252Z","avatar_url":"https://github.com/LaiTszKin.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LTDJMS\n\nLTDJMS 是一個以 Java 17、Maven 與 JDA 建置的 Discord 管理機器人，將 guild 經濟、商品交易、法幣付款、護航派單與 AI 頻道治理整合在同一套系統中。\n\n## 這個專案能做什麼\n\n- guild 級貨幣、遊戲代幣、交易紀錄與管理面板\n- 商品商店、兌換碼、貨幣購買、綠界超商代碼付款\n- 護航派單、完單確認、售後接案與結案\n- 提及式 AI Chat、AI 頻道白名單、AI Agent 頻道配置\n\n## 先看哪份文件\n\n| 目的 | 文件 |\n| --- | --- |\n| 先快速理解專案 | `README.md` |\n| 啟動本機環境或部署 | `docs/getting-started.md` |\n| 查環境變數與外部整合 | `docs/configuration.md` |\n| 理解模組與資料流 | `docs/architecture.md` |\n| 快速看功能與角色分工 | `docs/features.md` |\n| 準備修改程式或除錯 | `docs/developer-guide.md` |\n| 完整文件導覽 | `docs/README.md` |\n\n## 快速啟動\n\n### 建議路徑：Docker Compose\n\n```bash\ngit clone \u003cyour-repo-url\u003e\ncd ltdjms\nmake setup-env\nmkdir -p prompts\nmake build\nmake start-dev\nmake logs\n```\n\n啟動前至少要準備：\n\n- `DISCORD_BOT_TOKEN`\n- 可連線的 PostgreSQL\n- 可連線的 Redis\n- `AI_SERVICE_API_KEY`\n- 若要啟用 Compose 自架綠界付款 callback，請再提供 `APP_PUBLIC_DOMAIN`、`CADDY_ACME_EMAIL`、`APP_PUBLIC_BASE_URL` 與 `ECPAY_*` 憑證\n\n### 本機 JVM 直跑\n\n```bash\nmake setup-env\nmkdir -p prompts\nmake db-up\nmake build\njava -jar target/ltdjms-*.jar\n```\n\n## 主要入口\n\n- Slash commands：`/currency-config`、`/dice-game-1`、`/dice-game-2`、`/user-panel`、`/admin-panel`、`/shop`、`/dispatch-panel`\n- 提及式 AI：在允許頻道提及 Bot\n- 付款回推：內嵌 `EcpayCallbackHttpServer`\n- 主程式入口：`src/main/java/ltdjms/discord/currency/bot/DiscordCurrencyBot.java`\n- 環境設定入口：`make setup-env`（互動式） / `make update-env`（範本同步）\n\n## 核心能力\n\n### 一般成員\n\n- 查詢個人餘額、遊戲代幣與歷史紀錄\n- 使用商店、兌換碼與骰子遊戲\n- 購買法幣商品、收到訂單編號與付款期限提醒，並在付款完成後收到私訊通知\n- 在允許頻道提及 Bot 取得 AI 回應\n\n### 管理員\n\n- 設定 guild 貨幣、遊戲代幣與遊戲規則\n- 管理商品、兌換碼、AI 頻道與 AI Agent 頻道\n- 建立護航派單、調整護航定價、管理售後名單\n\n### 維運 / 開發者\n\n- 以 Docker Compose 啟動 bot、PostgreSQL、Redis\n- 透過 Flyway migration 維護資料庫 schema\n- 追蹤付款回推、背景 worker、補償查單、事件管線與 Discord 互動流程\n\n## 啟動前必知\n\n- `AI_SERVICE_API_KEY` 目前在啟動時就會驗證，缺少時應用會直接失敗。\n- Docker Compose 自架路徑現在內建 repo 管理的 `Caddy` ingress，會直接對外接 `80/443` 並為 `APP_PUBLIC_DOMAIN` 自動管理 HTTPS。\n- 使用 repo 內 Caddy ingress 時，`APP_PUBLIC_BASE_URL` 應與公開網域對齊，通常就是 `https://\u003cAPP_PUBLIC_DOMAIN\u003e`；程式會在 `ECPAY_RETURN_URL` 留空時自動推導 callback URL。\n- 建議先執行 `make setup-env` 產生或更新 `.env`；之後若 `.env.example` 有新增欄位，再執行 `make update-env` 補齊。\n- `make setup-env` 會同步詢問公開 domain / TLS email，並寫入 `APP_PUBLIC_DOMAIN`、`CADDY_ACME_EMAIL`、`APP_PUBLIC_BASE_URL` 與 callback 策略欄位。\n- `ECPAY_RETURN_URL` 仍可保留為進階 override；只有當公開 callback URL 必須和 `APP_PUBLIC_BASE_URL + ECPAY_CALLBACK_PATH` 不同時才需要手動指定。\n- `ECPAY_CALLBACK_BIND_HOST=127.0.0.1` 與 `ECPAY_CALLBACK_BIND_PORT=8085` 在 Compose 自架模式下屬內部 wiring，通常不需要手動設定。\n- 若 `APP_PUBLIC_BASE_URL` 與 `ECPAY_RETURN_URL` 都未設定，綠界 callback server 不會啟動。\n- 若 Caddy 無法簽出憑證，優先檢查 `APP_PUBLIC_DOMAIN` DNS 是否已指向主機、`80/443` 是否對外開放，並查看 `docker compose logs caddy`。\n- 本機直跑沒有 `make run`；請使用 `java -jar target/ltdjms-*.jar`。\n- 宣傳首頁的 Vercel 自動部署 workflow 位於 `.github/workflows/vercel-landing-page.yml`；它是獨立於 Compose 自架 ingress 的另一條發布路徑，只有 `VERCEL_TRUSTED_AUTHORS` 名單中的 GitHub 使用者修改 `src/main/resources/web/` 並 push 到 `main` 時才會自動部署。\n- GitHub repository 需設定 `VERCEL_TOKEN` secret，以及 `VERCEL_ORG_ID`、`VERCEL_PROJECT_ID`、`VERCEL_TRUSTED_AUTHORS` variables，Vercel 專案則需預先建立並可由該 token 部署。\n- 若同一個 Vercel 專案仍連接 GitHub 自動部署，建議在 Vercel Project Settings -\u003e Git 關閉自動部署或直接斷開 Git 連線，避免與 GitHub Actions 重複部署。\n- 目前以根目錄 `README.md` 與 `docs/*.md` 主文件作為閱讀入口；`docs/modules/`、`docs/architecture/` 等深度文件屬補充參考，遇到衝突時以程式碼為準。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaitszkin%2Fltdjms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flaitszkin%2Fltdjms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaitszkin%2Fltdjms/lists"}