5.2 KiB
5.2 KiB
Discord LNbits Bot
A full-stack Dockerized membership engine that lets users purchase Discord roles via Bitcoin Lightning (LNbits). It provides:
- A Discord bot that dynamically registers slash-commands per membership “plan”
- A Flask web UI (port 3000) for configuring your Discord/LNbits credentials and creating/editing membership plans
- A Postgres backend to persist plans, subscriptions, and payment logs
- Automated expiry logic (calendar-month, rolling-days, fixed-date) with scheduled role revocation
🚀 Features
- 🔧 One-click Docker Compose: bot + web UI + database
- ✅ Dynamic slash-commands for each plan (no code changes needed)
- ⚡ Lightning invoices via LNbits REST API
- 🌐 WebSocket listener for incoming payments
- 👤 Automatic role assignment on payment
- ⏰ Scheduled cleanup of expired subscriptions
- 📊 Persistent audit log in Postgres (raw JSON, timestamps, statuses)
📋 Requirements
- A Discord Bot Token (from the Developer Portal)
- LNbits Wallet Invoice Key
- A running LNbits instance (e.g., Sats.Love)
- Docker Engine (v20+)
- Docker Compose (v1.29+ or the built-in docker compose)
1️⃣ Setting Up Your Bot
Generate a Proper Bot Invite Link
- Go to: Discord Developer Portal
- Click New Application
- Go to OAuth2 > URL Generator
- Check these Scopes:
- ✅ bot
- ✅ applications.commands (for slash commands)
- Under Bot Permissions, check:
- ✅ Manage Roles
- ✅ Send Messages
- ✅ Embed Links
- ✅ Read Message History
- Copy & paste the generated link into your browser.
- Select your Discord server and click Authorize.
Enable Privileged Intents
- Go to Discord Developer Portal.
- Select your bot application.
- Navigate to
Bot
in the left sidebar. - Scroll down to
Privileged Gateway Intents
. - Enable the following:
- ✅ Presence Intent
- ✅ Server Members Intent
- ✅ Message Content Intent
- Click Save Changes.
Ensure Correct Role Permissions
- Go to Server Settings →
Roles
. - Drag the bot’s role ABOVE the role it needs to assign.
- Ensure the bot has these permissions:
- ✅ Manage Roles
- ✅ Read Messages
- ✅ Send Messages
2️⃣ Installation Guide
1. Install System Dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip python3-venv -y
2. Clone the Repository
git clone https://code.rustysats.com/saulteafarmer/discord-lnbits-bot
cd discord-lnbits-bot
3. Copy & Edit .env
cp .env.example .env
nano .env
4. Buld & run
docker-compose up -d --build
5. Open the web UI
Visit: http://localhost:3000
- Configure your Discord Bot Token, Guild ID, LNbits URL, LNbits Invoice Key
- Define membership plans (command name, role ID, channel ID, price, expiry policy)
3️⃣ Find Your Discord Guild ID & Role ID
Before configuring the bot, retrieve your Guild ID and Role ID.
🔹 How to Find Your Guild ID (Server ID):
- Open Discord → Go to User Settings (⚙️).
- Scroll down to Advanced → Enable Developer Mode.
- Right-click your server name (left sidebar) → Click Copy ID.
- Save this ID for later (
guild_id
).
🔹 How to Find Your Role ID:
- Open your Discord Server.
- Go to Server Settings → Roles.
- Right-click on the role you want to assign → Click Copy ID.
- Save this ID for later (
role_id
).
4️⃣ Configure the Bot
Edit the config.json
file inside the bot directory:
sudo nano config.json
{
"discord_token": "YOUR_DISCORD_BOT_TOKEN",
"guild_id": "YOUR_GUILD_ID",
"role_id": "YOUR_ROLE_ID",
"lnbits_url": "https://sats.love",
"lnbits_api_key": "YOUR_INVOICE_READ_KEY",
"channelid": "YOUR_CHANNELID_FOR_PURCHASE_ROOM",
"price": 1000,
"command_name": "support",
"invoicemessage": "Invoice for your purchase."
}
🔹 What Each Setting Does:
discord_token
→ Your bot token from Discord Developer Portalguild_id
→ Your Discord server IDrole_id
→ The Discord role the bot will assignlnbits_url
→ Base URL of your LNbits instancelnbits_api_key
→ Invoice-only key from LNbits (⚠️ NOT an admin key)price
→ Price in satoshis (e.g.,1000
= 1000 sats)command_name
→ Name of the command (default:support
)invoicemessage
→ Message to be sent with invoicechannelid
→ Discord channel where invoices and confirmations post
5️⃣ Run the Bot
python3 discord_lnbits_bot.py
6️⃣ Running the Bot in the Background
nohup python3 discord_lnbits_bot.py &
🔹 To stop the bot:
pkill -f discord_lnbits_bot.py
License
This project is open-source and free to use. Contributions welcome!