尚未偵測到更新。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.