From 41e4fd4e2e27acc5cc76f26f91bbfebb5765fcbf Mon Sep 17 00:00:00 2001 From: dmitrium12 Date: Mon, 27 Mar 2023 19:52:18 +0700 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BC=D1=83=D1=82=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=83?= =?UTF-8?q?,=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20api,=20=D1=81?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=B7=D0=B0=D0=BF=D0=BE=D0=BC?= =?UTF-8?q?=D0=B8=D0=BD=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bot.py | 43 ++++++++--------- db.sql | Bin 24576 -> 65536 bytes functions/openai_answer.py | 95 +++++++++++++++++++++++++++++-------- not_work_user.json | 4 ++ test.py | 5 -- 5 files changed, 101 insertions(+), 46 deletions(-) mode change 100644 => 100755 Bot.py create mode 100644 not_work_user.json diff --git a/Bot.py b/Bot.py old mode 100644 new mode 100755 index 0384245..b18aaf5 --- a/Bot.py +++ b/Bot.py @@ -2,6 +2,7 @@ from aiogram.utils import executor from loguru import logger from aiogram import Bot, Dispatcher, types from functions import get_audio_messages_func, create_statistic, openai_answer +import json bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI") # создаю объект бота dp = Dispatcher(bot) # создаю объект слушателя @@ -31,29 +32,26 @@ async def statistic(message: types.Message): await bot.send_message(message.chat.id, "У вас нет прав на просмотр статистики") -@dp.message_handler(commands=['response']) -async def answer(message: types.Message): - openai_answer.get_response(message) - await message.answer_document(open("response_ru.txt", "rb"), reply=True) - await message.answer_document(open("resource_ru_not_translate.txt", "rb"), reply=True) - - @dp.message_handler(commands=['r']) async def r(message: types.Message): - import openai - openai.api_key = "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" - response = openai.Completion.create( - model="text-davinci-003", - prompt=' '.join(message.text.split()[1:]), - temperature=0.5, - max_tokens=1000, - top_p=1.0, - frequency_penalty=0.5, - presence_penalty=0.0 - ) - for i in response['choices']: - await bot.send_message(message.chat.id, f"ChatGPT\n{i['text']}", - parse_mode=None, reply_to_message_id=message.message_id) + await openai_answer.get_response_to_openai(message, bot) + + +@dp.message_handler(commands=['r_clear']) +async def r_clear(message: types.Message): + await openai_answer.clear_db(message) + + +@dp.message_handler(content_types=['text']) +async def not_work_user(message: types.Message): + if str(message.from_user.id) == "620318992" and message.text == "Гена, бань его нахуй" and message.reply_to_message: + with open('not_work_user.json', 'r') as f: + data = json.load(f) + data['chat_gpt'].append(message.reply_to_message.from_user.id) + with open('not_work_user.json', 'w') as f: + json.dump(data, f, indent=4) + await message.reply(f"@{message.reply_to_message.from_user.username} " + f"вы больше не можете со мной разговаривать") @dp.message_handler(content_types=['voice', 'video_note', 'video']) # обрабатываю голосовые сообщения, кружки, видео @@ -63,4 +61,5 @@ async def get_audio_messages(message: types.Message): def start_work_bot(): # функция запуска бота logger.info("Бот запустился") # записываю логи - executor.start_polling(dp, skip_updates=False) # запускаю pooling без пропуска пропущенных сообщений + executor.start_polling(dp, skip_updates=True) # запускаю pooling без пропуска пропущенных сообщений + diff --git a/db.sql b/db.sql index 3dc3fcd9928ca58579bfcae7b8554a2995441306..121e10e0123ed9a926c6432251b234b71bed280a 100644 GIT binary patch literal 65536 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 diff --git a/functions/openai_answer.py b/functions/openai_answer.py index e1e2333..1902987 100644 --- a/functions/openai_answer.py +++ b/functions/openai_answer.py @@ -1,14 +1,71 @@ +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:])}] + print(message_sendко) + 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=None, reply_to_message_id=message.message_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() def get_response(message: types.Message): answer_en = get_translation(' '.join(message.text.split()[1:]), "en") - print(answer_en) - response_en = get_response_to_openai(answer_en) - print(response_en) - response_ru = get_translation(response_en, "ru") - resource_ru_not_translate = get_response_to_openai(' '.join(message.text.split()[1:])) - save_file(response_ru, resource_ru_not_translate) + # print(answer_en) + # response_en = get_response_to_openai(answer_en) + # print(response_en) + # response_ru = get_translation(response_en, "ru") + # resource_ru_not_translate = get_response_to_openai(' '.join(message.text.split()[1:])) + # save_file(response_ru, resource_ru_not_translate) def get_translation(text, language): @@ -16,19 +73,19 @@ def get_translation(text, language): return GoogleTranslator(target=language).translate(text) -def get_response_to_openai(text): - import openai - openai.api_key = "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" - response = openai.Completion.create( - model="text-davinci-003", - prompt=text, - temperature=0.5, - max_tokens=1000, - top_p=1.0, - frequency_penalty=0.5, - presence_penalty=0.0 - ) - return response['choices'][0]['text'] +# def get_response_to_openai(text): +# import openai +# openai.api_key = "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" +# response = openai.Completion.create( +# model="text-davinci-003", +# prompt=text, +# temperature=0.5, +# max_tokens=1000, +# top_p=1.0, +# frequency_penalty=0.5, +# presence_penalty=0.0 +# ) +# return response['choices'][0]['text'] def save_file(response_ru, resource_ru_not_translate): diff --git a/not_work_user.json b/not_work_user.json new file mode 100644 index 0000000..4305d4b --- /dev/null +++ b/not_work_user.json @@ -0,0 +1,4 @@ +{ + "chat_gpt": [ + ] +} \ No newline at end of file diff --git a/test.py b/test.py index c8aea3f..e69de29 100644 --- a/test.py +++ b/test.py @@ -1,5 +0,0 @@ -import os - -# os.system("rm -rf config") -os.removedirs("config") -# os.mkdir("config")