尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Bitcoin Lightning wallet inside Telegram. Send & receive sats, tip in groups, pay BOLT11 invoices, connect any NWC wallet, and monetize private chats with one-time or monthly access. Instant free transfers between users.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Bitcoin Lightning wallet inside Telegram — send, receive, tip, and monetize chats with sats.
ZapGram turns Telegram into a Lightning payment app: instant tips in groups, invoices with QR codes, transfers between users at message speed, and paid access to private communities.
Partner: 21ideas — community with Bitcoin learning materials.
In the 21ideas community ZapGram is used for:
Telegram channel: @bitcoin21ideas
ZapGram guide from 21ideas: 21ideas.org/zapgram/
| Lightning-native | Built for satoshis and BOLT11 invoices — not fiat wrappers. |
| Zero-fee inside Telegram | Transfers between ZapGram wallets are free and as fast as a message. |
| Your keys, optional | Keep sats in the built-in wallet, or connect any wallet that supports NWC. |
| Chats that earn | Monetize private groups and channels with one-time or monthly Lightning access. |
| Native to Telegram | Tips with /tip, invoices in DM, join requests that pay themselves. |
| Optional support | Voluntary % on payments, one-shot and monthly donations via /donate. |
| Open source | Inspect the code, self-host, or contribute. |
Every user gets a Lightning wallet the moment they open the bot.
@usernameInternal transfers between ZapGram users settle instantly and without network fees — money moves like a DM.
Prefer self-custody? Connect any Lightning wallet that supports Nostr Wallet Connect — for example Alby or Coinos.
nostr+walletconnect://… URLYour external wallet stays under your control; ZapGram only acts within the permissions you grant.
Add the bot to a chat and tip with /tip:
| Command | What it does |
|---|---|
/tip | 21 sats to the group owner (or channel creator on a post) |
/tip 100 | Custom amount to the owner |
Reply + /tip | Tip the author of that message |
Reply + /tip 1000 | Tip the author with a custom amount |
/tip @user | Tip a specific user (default 21 sats) |
/tip 50 @user | Tip a user with a custom amount |
Make the bot an admin (delete messages is enough) so owner-bound tips work cleanly and technical messages stay out of the way. In channels, tip replies to posts go to the channel creator.
ZapGram is free to use. You can optionally support the bot author:
/donate); failure only notifies you in private chat./donate hub — your personal stats, community totals (all-time + last 30 days), one-shot amounts (21 · 100 · 1 000 · 10 000 · 100 000 or custom), and in-bot monthly auto-donate (charges every 30 days; first charge when you enable).[email protected].This is separate from the small platform fee on paid-chat Lightning subscriptions (SUBSCRIPTION_FEE_PERCENT).
lnbc… invoice → review amount, memo, fee, expiry → confirmTurn a private group or channel into a sat-gated community — Lightning and/or on-chain Bitcoin.
For owners
@zap_gram_bot with invite users and ban users rightsFor members
Subscriptions
UI follows your Telegram language: Russian or English (everything else falls back to English).
/start/tip 21 @usernameUseful commands:
| Command | |
|---|---|
/wallet | Balance, receive, send |
/donate | One-shot / monthly support, your stats, community totals |
/help | Bitcoin, Lightning, supported wallets |
Layered design + vertical feature slices. Full write-up: docs/architecture.md.
core → infra → modules → telegram / http / jobs
↑
bootstrap (composition root)
Entry: src/main.ts → createContainer() → createApp() → start / graceful shutdown.
Bun, TypeScript, grammY, Elysia, Drizzle (SQLite), LNbits, Nostr Wallet Connect, pino, Biome.
Lightning backend: Alby
# install
bun install
# typecheck + lint + tests
bun run ci
# local bot (needs .env; HOST must be a public HTTPS URL)
bun run start:dev
Feature requests: users submit them from the main menu. Set ADMIN_TELEGRAM_IDS (comma-separated Telegram user ids) so new requests are DMed to you. Optional sats tips use the same rails as /donate. Events land in PostHog as feature_requested (filter Activity / build an insight). Without admin ids, requests still capture analytics only.
Requires LNbits extensions Watch Only + SatsPay on the same instance as LNBITS_URL.
| Setting | Notes |
|---|---|
SatsPay webhook_method | POST (default GET breaks ZapGram) |
| SatsPay / Watch Only network | Match LNBITS_ONCHAIN_NETWORK (Mainnet or Testnet) |
| Mempool URL | Mainnet: https://mempool.space · Testnet: https://mempool.space/testnet |
HOST | Public HTTPS origin of the bot (SatsPay POSTs ${HOST}/satspay/webhook/${BOT_WEBHOOK_SECRET}) |
LNBITS_ADMIN_KEY | Bot wallet admin key (creates WO wallets under that user) |
Compose passes LNBITS_ONCHAIN_NETWORK (default Mainnet). After enabling on-chain in the Chats menu, smoke: paste account zpub → member join → Pay on-chain → pay ≥ price → grant.
Persistence: compose sets LNBITS_EXTENSIONS_PATH=/app/data/extensions, so installed LNbits extension code lives on the lnbits-data volume (/app/data/extensions/extensions/<id>) next to the DB and survives container recreates. Without it LNbits 1.x installs extensions into /app/lnbits/extensions inside the container: after a redeploy the DB still lists them, the files are gone, and you get Extension 'satspay' disabled / 500 on enable. When upgrading an existing instance to this setting, reinstall Watch Only and SatsPay once (Admin → Extensions); their data in the DB is kept.
MIT — free to use, modify, and distribute, including commercially.