Skip to content

Commit

Permalink
add: support for discord bot (mem0ai#412)
Browse files Browse the repository at this point in the history
  • Loading branch information
sahilyadav902 committed Aug 12, 2023
1 parent a232d1b commit 0b72269
Show file tree
Hide file tree
Showing 9 changed files with 154 additions and 1 deletion.
48 changes: 48 additions & 0 deletions docs/examples/discord_bot.mdx
Original file line number Diff line number Diff line change
@@ -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! 🎉
2 changes: 1 addition & 1 deletion docs/mint.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
8 changes: 8 additions & 0 deletions examples/discord_bot/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
__pycache__/
database
db
pyenv
venv
.env
.git
trash_files/
7 changes: 7 additions & 0 deletions examples/discord_bot/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
__pycache__
db
database
pyenv
venv
.env
trash_files/
9 changes: 9 additions & 0 deletions examples/discord_bot/Dockerfile
Original file line number Diff line number Diff line change
@@ -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 changes: 65 additions & 0 deletions examples/discord_bot/discord_bot.py
Original file line number Diff line number Diff line change
@@ -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 changes: 11 additions & 0 deletions examples/discord_bot/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -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 changes: 3 additions & 0 deletions examples/discord_bot/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
discord==2.3.1
embedchain==0.0.30
python-dotenv==1.0.0
2 changes: 2 additions & 0 deletions examples/discord_bot/variables.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
OPENAI_API_KEY=""
DISCORD_BOT_TOKEN=""

0 comments on commit 0b72269

Please sign in to comment.