68 lines
3.1 KiB
Python
Executable File
68 lines
3.1 KiB
Python
Executable File
import json
|
|
from aiogram import types
|
|
import sqlite3
|
|
import openai
|
|
|
|
|
|
async def get_response_to_openai(message: types.Message, bot):
|
|
if message.from_user.id in json.load(open("not_work_user.json"))["chat_gpt"]:
|
|
await bot.send_message(message.chat.id, "тебе сюда нельзя")
|
|
return
|
|
conn = sqlite3.connect('db.sql')
|
|
cur = conn.cursor()
|
|
openai.api_key = "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"
|
|
try:
|
|
points = cur.execute("SELECT * FROM 'f'".replace("f", str(message.from_user.id))).fetchall()
|
|
message_send = []
|
|
for i in points:
|
|
message_send.append({"role": i[1], "content": i[2]})
|
|
message_send.append({"role": "user", "content": ' '.join(message.text.split()[1:])})
|
|
except sqlite3.OperationalError:
|
|
message_send = [{"role": "user", "content": ' '.join(message.text.split()[1:])}]
|
|
try:
|
|
response = openai.ChatCompletion.create(
|
|
model="gpt-3.5-turbo",
|
|
messages=message_send,
|
|
temperature=0.5,
|
|
max_tokens=1000,
|
|
top_p=1.0,
|
|
frequency_penalty=0.5,
|
|
presence_penalty=0.0
|
|
)
|
|
await bot.send_message(message.chat.id, f"ChatGPT\n{response['choices'][0]['message']['content']}",
|
|
parse_mode="Markdown", reply_to_message_id=message.message_id)
|
|
except Exception as e:
|
|
print(e)
|
|
conn = sqlite3.connect('db.sql')
|
|
cur = conn.cursor()
|
|
cur.execute(f"DELETE FROM '{str(message.from_user.id)}'")
|
|
conn.commit()
|
|
conn.close()
|
|
await bot.send_message(message.chat.id, "У вас превышено количество сообщений в памяти, я всё очистил"
|
|
" попробуйте задать вопрос заново))")
|
|
try:
|
|
cur.execute("INSERT INTO 'f' (role, content) VALUES (?, ?)".replace("f", str(message.from_user.id)),
|
|
("user", ' '.join(message.text.split()[1:])))
|
|
cur.execute("INSERT INTO 'f' (role, content) VALUES (?, ?)".replace("f", str(message.from_user.id)),
|
|
("assistant", response['choices'][0]['message']['content']))
|
|
conn.commit()
|
|
conn.close()
|
|
except sqlite3.OperationalError:
|
|
cur.execute(f"CREATE TABLE IF NOT EXISTS '{message.from_user.id}' (id INTEGER PRIMARY KEY AUTOINCREMENT"
|
|
f" UNIQUE NOT NULL, role STRING NOT NULL,"
|
|
f" content STRING NOT NULL)")
|
|
cur.execute("INSERT INTO 'f' (role, content) VALUES (?, ?)".replace("f", str(message.from_user.id)),
|
|
("user", ' '.join(message.text.split()[1:])))
|
|
cur.execute("INSERT INTO 'f' (role, content) VALUES (?, ?)".replace("f", str(message.from_user.id)),
|
|
("assistant", response['choices'][0]['message']['content']))
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
|
|
async def clear_db(message: types.Message):
|
|
conn = sqlite3.connect('db.sql')
|
|
cur = conn.cursor()
|
|
cur.execute(f"DELETE FROM '{str(message.from_user.id)}'")
|
|
conn.commit()
|
|
conn.close()
|