diff options
author | Roger Gonzalez <roger@rogs.me> | 2023-04-09 10:06:28 -0300 |
---|---|---|
committer | Roger Gonzalez <roger@rogs.me> | 2023-04-09 10:06:28 -0300 |
commit | 45ac9e38f83fbb31b401037102345e9257f48de2 (patch) | |
tree | 9a1c473a93a189faba2a3d8f3ab7deefa7524bc1 | |
parent | b819f15b63770fbda246d6272332a2bc9832349d (diff) |
Added chatgpt
-rw-r--r-- | .env.example | 3 | ||||
-rw-r--r-- | bot.py | 59 | ||||
-rw-r--r-- | settings.py | 3 |
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" @@ -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") |