A collection of small, self-hosted Telegram bots by @chethober.
They run serverless on Telegram Serverless (tgcloud), Telegram's platform for bots. No server to host.
The bots · How they work · Support · MIT License
On tgcloud you write JavaScript modules (schema, shared libs, update handlers) and the platform runs them in a V8
isolate. Each bot is a standalone project in its own folder with its own README, dependencies and deploy
instructions. Clone the repo, cd into the one you want, and follow its README.
| Folder | Bot | What it does |
|---|---|---|
chsbrbot |
CVEs | Posts new High/Critical CVEs and trending ones (CISA KEV, GitHub PoCs, EPSS), with CVE search, watchlists, digests and followed CVEs |
chthapibot |
APIs | Crypto prices, sports, food & drinks, random pickers and a daily briefing |
chthbrbot |
Anonymous | Personal anonymous-message link bot: people message you without seeing who you are |
chthgamesbot |
Games 🎲 | Casino, poker, Persian card games (Hokm, Shelem) and party games: chat games, inline mode and a graphic Mini App. Play chips (buyable with Stars, never cashed out) |
chthgrambot |
Secretary | An AI secretary for your Telegram Business account: answers your private chats while you're away, in your tone or your own style. Anyone can use it with their own free Cloudflare Workers AI key |
chthmusicbot |
Music | Syncs Spotify, YouTube Music and Apple Music playlists with groups, forum topics and channels, both ways; a shared Spotify queue for groups, /playlist, /top and /random in chats, and song search |
chthvpnbot |
VPN | A directory of VPNs shared by their owners: public listings, private invites with passwords, anonymous memberships. Works best with xtune public profiles (an account per member), and manages xtune servers' users through management links |
The bots share one interface style:
- Buttons, not commands. Everything a user does is a button: a reply keyboard under the text
field and inline buttons under each screen. Slash commands are only
/startand the admin commands (shown in admins' own command menus). - Five languages. English, Persian, Arabic, Russian and Spanish, picked from the user's Telegram language or the 🌐 Language button, including the bot descriptions.
- Clean chat. Button taps are deleted and each screen replaces the previous one, so the chat keeps only real content (messages, games, alerts).
- ℹ️ About. What the bot does, with 🔗 Source code and ⭐ Tip the developer: a ☕ coffee,
🍟 fries, 🍔 burger or 🍕 pizza (50, 100, 250 or 500 Telegram Stars). A tip unlocks nothing; the
bot thanks the tipper and tells its admins. ✨ More from CHTH links to the CHTH websites
(café, gym, shop) and the other bots here.
Each bot carries the same
tgcloud/lib/tips.js, generated withchth_products.jsandreport.jsfrom the shared CHTH kit; edit the kit, not these copies.
Every bot follows it. The multi-utility bot also keeps its slash commands as typed shortcuts (and a command menu in groups), and its hub screens are in English; some admin screens are English too.
Every bot keeps its secrets out of git. Before deploying one, copy its example config
(secrets.example.js, …) to the real filename and fill it in; each README says which.
Nothing in this repo contains live credentials.
The workflow is the same for every bot:
git clone https://github.com/chethober/bots && cd bots/<bot>
npm install
cp hub_secrets.example.js tgcloud/lib/hub_secrets.js # hub reporting, off by default
npx tgcloud login # link the project to your bot
npx tgcloud push # deploy the code
npx tgcloud migrate # apply schema changes to the databaseMost bots also have a one-off setup endpoint or script that applies the bot profile (descriptions, command menus); see each README.
Each bot can report a few events to a private CHTH hub: a /start (with the CHTH link that
brought the user, from ?start=src_<product>), tips, the bot joining or leaving a group or
channel, and handler errors. Only counts and pseudonymous ids are sent, never message contents.
tgcloud/lib/report.js reads HUB_URL, HUB_SECRET and HUB_SOURCE from the git-ignored
tgcloud/lib/hub_secrets.js: copy hub_secrets.example.js there before a local deploy or
test run. Empty values (the example's default) switch reporting off, and a hub that is down
never affects the bot.
Each bot has a GitHub Actions workflow, .github/workflows/<bot>-ci.yml. It runs the bot's tests
(or a syntax check of its modules) on every pull request and push to main that touches the bot's
folder. On main, it then deploys with tgcloud push and applies the safe schema changes with
tgcloud migrate --safe. Destructive schema changes are only listed in the job log, so apply those
by hand with npx tgcloud migrate. You can also run a workflow by hand from the Actions tab.
The workflows read these repository secrets:
| Bot | Secrets |
|---|---|
| every bot | <BOT>_TGCLOUD_TOKEN, the bot's tgcloud project token (e.g. CHTHVPNBOT_TGCLOUD_TOKEN) |
| every bot | CHTH_HUB_URL and <BOT>_HUB_SECRET for hub reporting (both optional) |
chsbrbot |
CHSBRBOT_NVD_API_KEY, CHSBRBOT_GITHUB_TOKEN (both optional) |
chthgamesbot |
CHTHGAMESBOT_BUTTON_SECRET, CHTHGAMESBOT_ADMIN_IDS (a JSON array such as [12345]) |
chthmusicbot |
CHTHMUSICBOT_SPOTIFY_CLIENT_ID, CHTHMUSICBOT_GOOGLE_CLIENT_ID, CHTHMUSICBOT_GOOGLE_CLIENT_SECRET, CHTHMUSICBOT_APPLE_MUSIC_DEVELOPER_TOKEN, CHTHMUSICBOT_SONGLINK_API_KEY (all optional) |
See <bot>/AGENTS.md in any bot for the platform's module rules and
<bot>/docs/tgcloud-sdk.md for the SDK reference.
Like the bots? The free ways to help count the most:
- ⭐ Star this repo, so more people find it.
- 📣 Share a bot with a friend or a group that would use it.
- 🐛 Open an issue with a bug or an idea.
- ☕ Tip in Telegram Stars from any bot's ℹ️ About screen.
MIT © 2026 chethober. Each bot may carry its own LICENSE; where it does, that
file governs that folder.