summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Gonzalez <roger@rogs.me>2023-04-09 10:06:28 -0300
committerRoger Gonzalez <roger@rogs.me>2023-04-09 10:06:28 -0300
commit45ac9e38f83fbb31b401037102345e9257f48de2 (patch)
tree9a1c473a93a189faba2a3d8f3ab7deefa7524bc1
parentb819f15b63770fbda246d6272332a2bc9832349d (diff)
Added chatgpt
-rw-r--r--.env.example3
-rw-r--r--bot.py59
-rw-r--r--settings.py3
3 files changed, 65 insertions, 0 deletions
diff --git a/.env.example b/.env.example
index 07a4c5f..b5ee796 100644
--- a/.env.example
+++ b/.env.example
@@ -2,6 +2,7 @@ MATRIX_URL="https://my-matrix-url"
MATRIX_USER="@botusername:my.server"
MATRIX_PASSWORD="mybotpassword"
MATRIX_USERNAME="myownusername"
+MATRIX_USERNAMES="myownusername,username2"
BANK_ACCOUNT_NUMBERS="bankaccount1,bankaccount2"
BROU_USERNAME="brou_username"
BROU_PASSWORD="mybroupassword69420"
@@ -20,3 +21,5 @@ ORG_LINKS_FILENAME="my/links/filename.org"
PROMETEO_API_KEY="myprometeoapikey"
PROMETEO_URL='https://myprometeourl.com'
+
+OPEN_AI_API_KEY="my-openai-key"
diff --git a/bot.py b/bot.py
index 9cd9df3..2fabea5 100644
--- a/bot.py
+++ b/bot.py
@@ -14,13 +14,26 @@ from settings import (
MATRIX_URL,
MATRIX_USER,
MATRIX_USERNAME,
+ MATRIX_USERNAMES,
+ OPEN_AI_API_KEY
)
+import openai
+
+openai.api_key = OPEN_AI_API_KEY
creds = botlib.Creds(MATRIX_URL, MATRIX_USER, MATRIX_PASSWORD)
bot = botlib.Bot(creds)
PREFIX = "!"
+MATRIX_USERNAMES = MATRIX_USERNAMES.split(",")
+
+starting_prompt = {"role": "system", "content": "You are a very helpful chatbot"}
+
+CONVERSATION = {}
+for username in MATRIX_USERNAMES:
+ CONVERSATION[username] = [starting_prompt]
+
@bot.listener.on_message_event
async def todo(room, message):
@@ -176,4 +189,50 @@ async def save_link(room, message):
await bot.api.send_text_message(room_id, "Link added!")
+@bot.listener.on_message_event
+async def chatgpt(room, message):
+ """
+ Function that starts a conversation with chatgpt
+ Usage:
+ user: !chatgpt Hello!
+ bot: [prints chatgpt response]
+ """
+ match = botlib.MessageMatch(room, message, bot, PREFIX)
+ message_content = message.body
+ if match.is_not_from_this_bot() and not match.prefix() and not validators.url(message_content):
+ user = message.sender
+
+ if user in MATRIX_USERNAMES:
+ personal_conversation = CONVERSATION[user]
+ room_id = room.room_id
+
+ print(f"Room: {room_id}, User: {user}, Message: chatgpt")
+
+ def format_message(message):
+ return {"role": "user", "content": message}
+
+ personal_conversation.append(format_message(message_content))
+ completion = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=personal_conversation)
+ personal_conversation.append(completion.choices[0].message)
+ await bot.api.send_text_message(room_id, completion.choices[0].message.content)
+
+
+@bot.listener.on_message_event
+async def reset_chatgpt(room, message):
+ """
+ Function that resets a conversation with chatgpt
+ Usage:
+ user: !reset
+ bot: Conversation reset!
+ """
+ match = botlib.MessageMatch(room, message, bot, PREFIX)
+ if match.is_not_from_this_bot() and match.prefix() and match.command("reset"):
+ user = message.sender
+
+ if user in MATRIX_USERNAMES:
+ CONVERSATION[user] = [starting_prompt]
+ room_id = room.room_id
+
+ await bot.api.send_text_message(room_id, "Conversation reset!")
+
bot.run()
diff --git a/settings.py b/settings.py
index 727b2c5..7f0fbed 100644
--- a/settings.py
+++ b/settings.py
@@ -8,6 +8,7 @@ MATRIX_URL = os.environ.get("MATRIX_URL")
MATRIX_USER = os.environ.get("MATRIX_USER")
MATRIX_PASSWORD = os.environ.get("MATRIX_PASSWORD")
MATRIX_USERNAME = os.environ.get("MATRIX_USERNAME")
+MATRIX_USERNAMES = os.environ.get("MATRIX_USERNAMES")
BANK_ACCOUNT_NUMBERS = os.environ.get("BANK_ACCOUNT_NUMBERS").split(",")
@@ -29,3 +30,5 @@ ORG_LINKS_FILENAME = f"{ORG_LOCATION}/{os.environ.get('ORG_LINKS_FILENAME')}"
PROMETEO_API_KEY = os.environ.get("PROMETEO_API_KEY")
PROMETEO_URL = os.environ.get("PROMETEO_URL")
+
+OPEN_AI_API_KEY = os.environ.get("OPEN_AI_API_KEY")