mirror of
https://github.com/tiennm99/tiennm99bot.git
synced 2026-10-11 12:28:54 +00:00
Nine commands mirroring the names @Stickers uses: /newpack, /mypack, /addsticker, /delsticker, /editsticker, /ordersticker, /setpackicon, /renamepack and /delpack, plus a confirm callback for the destructive one. Sources are replied stickers, photos or image documents; photos are downloaded, resampled to 512px and re-uploaded. One pack per user, keyed by owner id. Creating a pack is the only operation here that makes a durable, publicly linkable object on a user's behalf, so it is built around proving ownership rather than assuming it: - A name is claimed globally and create-only before Telegram is called. A pending record alone proves only that a caller *asked* for a name, which is exactly what someone naming a victim's public slug also does. - Adopting an existing set additionally requires that the claim predates this invocation. The claim lives in our store and the pack lives at Telegram, so a wiped store would otherwise make every pack adoptable. - Names are released only on positive evidence that no pack stands behind them, never on a generic failure, so a transient error cannot hand a live name to the next caller. - Ownership refusals are byte-identical across failure modes, so they cannot be used to probe which sets exist. Error classification is positive-only throughout: "the set is gone" and "nothing was created" are each proven from a specific Telegram response, never inferred from an error. Post-action commits run on a context detached from the request so a shutdown mid-handler cannot lose the record of something Telegram already did. Enabled explicitly via MODULES rather than by default.
50 lines
2.5 KiB
Bash
50 lines
2.5 KiB
Bash
# miti99bot — self-host (Coolify + MongoDB Atlas) environment.
|
|
# Copy to .env and fill in. .env is gitignored — never commit real secrets.
|
|
|
|
# ============================ Required ============================
|
|
# Telegram bot token from @BotFather.
|
|
TELEGRAM_BOT_TOKEN=123456:ABC-DEF...
|
|
|
|
# MongoDB Atlas connection. MONGO_URL is the full SRV string INCLUDING the
|
|
# db username + password — treat it as a secret (it is never logged).
|
|
# Create a least-privilege user: readWrite on this one database only.
|
|
MONGO_URL=mongodb+srv://botuser:STRONG_UNIQUE_PASSWORD@cluster0.xxxxx.mongodb.net/?retryWrites=true&w=majority
|
|
MONGO_DATABASE=miti99bot
|
|
|
|
# ============================ Operational =========================
|
|
# Comma-separated module list. Empty = load every module, including any module
|
|
# added later — so list them explicitly when a deployment should only gain a new
|
|
# module deliberately. `sticker` creates real, durable Telegram sticker sets on
|
|
# behalf of users, which is worth enabling on purpose rather than by default.
|
|
MODULES=util,misc,amlich,wordle,loldle,lol,stock,gold,coin,stats,monkeyd,sticker
|
|
# Telegram user id for owner-only commands (renamed from BOT_OWNER_ID).
|
|
OWNER_ID=
|
|
# Comma-separated admin Telegram user ids (renamed from ADMIN_USER_IDS).
|
|
ADMIN_IDS=
|
|
|
|
# SOURCE_COMMIT (commit SHA) is read at startup for the deploynotify owner DM.
|
|
# Do NOT set it here. Coolify provides it at runtime. Keep "Include Source
|
|
# Commit in Build" disabled so Docker layer cache survives across commits.
|
|
# Local `docker compose up` has none, so deploynotify reports "unknown".
|
|
|
|
# PandaScore API token for the lol module's schedule fetches (free tier at
|
|
# https://app.pandascore.co/dashboard, no credit card). Secret — never logged.
|
|
# Without it every /lol* fetch fails; the stale cache covers ≤60 min.
|
|
LOL_PANDASCORE_TOKEN=
|
|
|
|
# Optional /wheelofnames GIF renderer. Standard deployment:
|
|
# https://github.com/tiennm99/wheelofnames. Leave blank to fall back to text
|
|
# selection.
|
|
WHEELOFNAMES_API_URL=
|
|
# Bearer token matching the wheelofnames service API_TOKEN when URL is set.
|
|
WHEELOFNAMES_API_TOKEN=
|
|
|
|
# ====================== Leave UNSET on self-host ==================
|
|
# Defaults are correct for self-host:
|
|
# KV_PROVIDER — auto-selects mongodb because MONGO_URL is set
|
|
# PORT — defaults to 8080 (internal health server)
|
|
# TELEGRAM_WEBHOOK_SECRET — long polling has no webhook
|
|
# GOLD_VNAPP_API_KEY — gold module auto-fetches + caches the key to Mongo
|
|
# Stock/coin/gold URL env overrides are not supported; modules use coded
|
|
# default providers.
|