2025-03-09 03:42:12 +00:00

180 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Discord LNbits Bot
This bot allows users to purchase a **Discord role** using **Bitcoin Lightning payments** through LNbits. Users request an invoice via a **slash command**, and the bot automatically assigns the role **once payment is confirmed**.
## Features
✅ Users request an invoice using `/support` (configurable).
✅ The bot generates a **Lightning invoice** via LNbits.
✅ Once paid, the bot assigns a **Discord role**.
✅ Configurable check intervals & max attempts to verify payments.
---
## Requirements
- **Ubuntu 24.04**
- **Python 3.10+**
- **A Discord Bot Token** (from the [Developer Portal](https://discord.com/developers/applications))
- **LNbits Wallet Invoice Key**
- **A running LNbits instance** (e.g., [Sats.Love](https://sats.love/))
---
## 1⃣ Setting Up Your Bot
### Generate a Proper Bot Invite Link
1. **Go to**: [Discord Developer Portal](https://discord.com/developers/applications)
2. **Click New Application**
3. Go to **OAuth2 > URL Generator**
4. **Check these Scopes**:
-**bot**
-**applications.commands** (for slash commands)
4. **Under Bot Permissions**, check:
-**Manage Roles**
-**Send Messages**
-**Embed Links**
-**Read Message History**
5. **Copy & paste the generated link into your browser.**
6. **Select your Discord server** and click **Authorize**.
---
### Enable Privileged Intents
1. **Go to** [Discord Developer Portal](https://discord.com/developers/applications).
2. **Select your bot application.**
3. **Navigate to** `Bot` in the left sidebar.
4. **Scroll down to** `Privileged Gateway Intents`.
5. **Enable** the following:
-**Presence Intent**
-**Server Members Intent**
-**Message Content Intent**
6. **Click Save Changes.**
---
### Ensure Correct Role Permissions
1. **Go to Server Settings**`Roles`.
2. **Drag the bots role ABOVE** the role it needs to assign.
3. **Ensure the bot has these permissions**:
-**Manage Roles**
-**Read Messages**
-**Send Messages**
---
## 2⃣ Installation Guide
### 1. Install System Dependencies
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip python3-venv -y
```
### 2. Clone the Repository
```bash
git clone https://code.rustysats.com/saulteafarmer/discord-lnbits-bot
cd discord-lnbits-bot
```
### 3. Create & Activate Virtual Environment
```bash
python3 -m venv venv
source venv/bin/activate
```
### 4. Install Dependencies
```bash
pip install -r requirements.txt
```
---
## 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):
1. Open **Discord** → Go to **User Settings** (⚙️).
2. Scroll down to **Advanced** → Enable **Developer Mode**.
3. **Right-click your server name** (left sidebar) → Click **Copy ID**.
4. **Save this ID** for later (`guild_id`).
### 🔹 How to Find Your Role ID:
1. Open your **Discord Server**.
2. Go to **Server Settings****Roles**.
3. **Right-click on the role** you want to assign → Click **Copy ID**.
4. **Save this ID** for later (`role_id`).
---
## 4⃣ Configure the Bot
Edit the `config.json` file inside the bot directory:
```bash
sudo nano config.json
```
```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",
"price": 1000,
"command_name": "support",
"check_interval": 30,
"max_checks": 20
}
```
### 🔹 What Each Setting Does:
- **`discord_token`** → Your bot token from Discord Developer Portal
- **`guild_id`** → Your Discord server ID
- **`role_id`** → The Discord role the bot will assign
- **`lnbits_url`** → Base URL of your LNbits instance
- **`lnbits_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`)
- **`check_interval`** → How often (in seconds) the bot checks for payments
- **`max_checks`** → How many times the bot will check before stopping
---
## 5⃣ Run the Bot
```bash
python3 discord_lnbits_bot.py
```
---
## 6⃣ Running the Bot in the Background
```bash
nohup python3 discord_lnbits_bot.py &
```
🔹 **To stop the bot**:
```bash
pkill -f discord_lnbits_bot.py
```
---
## License
This project is **open-source** and free to use. Contributions welcome!