add: support for discord bot (#412)
This commit is contained in:
committed by
GitHub
parent
a232d1b779
commit
0b72269e18
48
docs/examples/discord_bot.mdx
Normal file
48
docs/examples/discord_bot.mdx
Normal file
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: '🤖 Discord Bot'
|
||||
---
|
||||
|
||||
### 🔑 Keys Setup
|
||||
|
||||
- Set your `OPENAI_API_KEY` in your variables.env file.
|
||||
- Go to [https://discord.com/developers/applications/](https://discord.com/developers/applications/) and click on `New Application`.
|
||||
- Enter the name for your bot, accept the terms and click on `Create`. On the resulting page, enter the details of your bot as you like.
|
||||
- On the left sidebar, click on `Bot`. Under the heading `Privileged Gateway Intents`, toggle all 3 options to ON position. Save your changes.
|
||||
- Now click on `Reset Token` and copy the token value. Set it as `DISCORD_BOT_TOKEN` in variables.env file.
|
||||
- On the left sidebar, click on `OAuth2` and go to `General`.
|
||||
- Set `Authorization Method` to `In-app Authorization`. Under `Scopes` select `bot`.
|
||||
- Under `Bot Permissions` allow the following and then click on `Save Changes`.
|
||||
```text
|
||||
Read Messages/View Channel
|
||||
Send Messages
|
||||
Read Message History
|
||||
Mention everyone
|
||||
```
|
||||
- Now under `OAuth2` and go to `URL Generator`. Under `Scopes` select `bot`.
|
||||
- Under `Bot Permissions` set the same permissions as above.
|
||||
- Now scroll down and copy the `Generated URL`. Paste it in a browser window and select the Server where you want to add the bot.
|
||||
- Click on `Continue` and authorize the bot.
|
||||
- 🎉 The bot has been successfully added to your server.
|
||||
|
||||
### 🐳 Docker Setup
|
||||
|
||||
- To setup your discord bot using docker, run the following command inside this folder using your terminal.
|
||||
```bash
|
||||
docker-compose up --build
|
||||
```
|
||||
📝 Note: The build command might take a while to install all the packages depending on your system resources.
|
||||
|
||||
### 🚀 Usage Instructions
|
||||
|
||||
- Go to the server where you have added your bot.
|
||||
- You can add data sources to the bot using the command:
|
||||
```text
|
||||
/ec add <data_type> <url_or_text>
|
||||
```
|
||||
- You can ask your queries from the bot using the command:
|
||||
```text
|
||||
/ec query <question>
|
||||
```
|
||||
📝 Note: To use the bot privately, you can message the bot directly by right clicking the bot and selecting `Message`.
|
||||
|
||||
🎉 Happy Chatting! 🎉
|
||||
@@ -36,7 +36,7 @@
|
||||
},
|
||||
{
|
||||
"group": "Examples",
|
||||
"pages": ["examples/full_stack", "examples/api_server"]
|
||||
"pages": ["examples/full_stack", "examples/api_server", "examples/discord_bot"]
|
||||
},
|
||||
{
|
||||
"group": "Contribution Guidelines",
|
||||
|
||||
8
examples/discord_bot/.dockerignore
Normal file
8
examples/discord_bot/.dockerignore
Normal file
@@ -0,0 +1,8 @@
|
||||
__pycache__/
|
||||
database
|
||||
db
|
||||
pyenv
|
||||
venv
|
||||
.env
|
||||
.git
|
||||
trash_files/
|
||||
7
examples/discord_bot/.gitignore
vendored
Normal file
7
examples/discord_bot/.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
__pycache__
|
||||
db
|
||||
database
|
||||
pyenv
|
||||
venv
|
||||
.env
|
||||
trash_files/
|
||||
9
examples/discord_bot/Dockerfile
Normal file
9
examples/discord_bot/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM python:3.11 AS backend
|
||||
|
||||
WORKDIR /usr/src/discord_bot
|
||||
COPY requirements.txt .
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
CMD ["python", "discord_bot.py"]
|
||||
65
examples/discord_bot/discord_bot.py
Normal file
65
examples/discord_bot/discord_bot.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import os
|
||||
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
from dotenv import load_dotenv
|
||||
|
||||
from embedchain import App
|
||||
|
||||
load_dotenv()
|
||||
intents = discord.Intents.default()
|
||||
intents.message_content = True
|
||||
|
||||
bot = commands.Bot(command_prefix="/ec ", intents=intents)
|
||||
root_folder = os.getcwd()
|
||||
|
||||
|
||||
def initialize_chat_bot():
|
||||
global chat_bot
|
||||
chat_bot = App()
|
||||
|
||||
|
||||
@bot.event
|
||||
async def on_ready():
|
||||
print(f"Logged in as {bot.user.name}")
|
||||
initialize_chat_bot()
|
||||
|
||||
|
||||
@bot.event
|
||||
async def on_command_error(ctx, error):
|
||||
if isinstance(error, commands.CommandNotFound):
|
||||
await send_response(ctx, "Invalid command. Please refer to the documentation for correct syntax.")
|
||||
else:
|
||||
print("Error occurred during command execution:", error)
|
||||
|
||||
|
||||
@bot.command()
|
||||
async def add(ctx, data_type: str, *, url_or_text: str):
|
||||
print(f"User: {ctx.author.name}, Data Type: {data_type}, URL/Text: {url_or_text}")
|
||||
try:
|
||||
chat_bot.add(data_type, url_or_text)
|
||||
await send_response(ctx, f"Added {data_type} : {url_or_text}")
|
||||
except Exception as e:
|
||||
await send_response(ctx, f"Failed to add {data_type} : {url_or_text}")
|
||||
print("Error occurred during 'add' command:", e)
|
||||
|
||||
|
||||
@bot.command()
|
||||
async def query(ctx, *, question: str):
|
||||
print(f"User: {ctx.author.name}, Query: {question}")
|
||||
try:
|
||||
response = chat_bot.chat(question)
|
||||
await send_response(ctx, response)
|
||||
except Exception as e:
|
||||
await send_response(ctx, "An error occurred. Please try again!")
|
||||
print("Error occurred during 'query' command:", e)
|
||||
|
||||
|
||||
async def send_response(ctx, message):
|
||||
if ctx.guild is None:
|
||||
await ctx.send(message)
|
||||
else:
|
||||
await ctx.reply(message)
|
||||
|
||||
|
||||
bot.run(os.environ["DISCORD_BOT_TOKEN"])
|
||||
11
examples/discord_bot/docker-compose.yml
Normal file
11
examples/discord_bot/docker-compose.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
backend:
|
||||
container_name: embedchain_discord_bot
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
env_file:
|
||||
- variables.env
|
||||
3
examples/discord_bot/requirements.txt
Normal file
3
examples/discord_bot/requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
discord==2.3.1
|
||||
embedchain==0.0.30
|
||||
python-dotenv==1.0.0
|
||||
2
examples/discord_bot/variables.env
Normal file
2
examples/discord_bot/variables.env
Normal file
@@ -0,0 +1,2 @@
|
||||
OPENAI_API_KEY=""
|
||||
DISCORD_BOT_TOKEN=""
|
||||
Reference in New Issue
Block a user