0
0
mirror of https://gitflic.ru/project/maks1ms/ocab.git synced 2024-12-23 16:23:01 +03:00

MVP status. Adding: auto cleaning DB, welcome message in private(PM)chat, forum type chat support, some optimization

This commit is contained in:
armatik 2023-07-13 11:08:02 +03:00
parent 3e10e9b806
commit 96b257fb6b
2 changed files with 22 additions and 4 deletions

View File

@ -6,12 +6,14 @@ import openai
import configparser
import sqlite3
import asyncio
import sys
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.utils.exceptions import MessageCantBeDeleted, MessageToDeleteNotFound
mother_path = os.path.dirname(os.path.dirname(os.getcwd()))
sys.path.insert(1, mother_path)
# Импорт переменных из файла .ini
@ -24,6 +26,7 @@ bot_trigger_all = (config['Telegram']['bot_trigger_all']).split('|')
# удаление лишних элементов массивов
bot_trigger_front.remove('')
bot_trigger_all.remove('')
DB_message_limit = int(config['DataBase']['message_limit'])
# Инициализация бота
@ -83,8 +86,11 @@ async def delete_message(message: types.Message, sleep_time: int = 0):
async def in_message(message: types.Message):
chat_id = message.chat.id
# Получение сообщений в чате, и запись их в базу данных
# Проверка на то, что сообщение не пустое и не отправлено в чате содержащим ChatType = 1 в базе данных chatlist
if (message.chat.type != "group" or message.chat.type != "supergroup") and \
if (message.chat.type == "private" or message.chat.type == "channel"):
await message.reply(
f"{config['Telegram']['private_answer']}",
parse_mode="Markdown")
elif (message.chat.type != "group" or message.chat.type != "supergroup") and \
message.text != '' and message.text != ' ' and \
(cursor.execute("SELECT chat_role FROM chat_list WHERE chat_id;") == 1): return None
else:
@ -118,15 +124,17 @@ async def in_message(message: types.Message):
if response is None:
bot_message_id = await message.reply("Я не понял тебя, попробуй перефразировать")
asyncio.create_task(delete_message(temp_msg, 0))
#заносим сообщение в базу данных в качестве message_id пишем id сообщения которое отправил бот
# заносим сообщение в базу данных в качестве message_id пишем id сообщения которое отправил бот
cursor.execute("INSERT INTO message_list VALUES (?, ?, ?, ?)",
(bot_message_id, "Я не понял тебя, попробуй перефразировать", 0, message.message_id))
else:
bot_message_id = await message.reply(response['choices'][0]['message']['content'], parse_mode="markdown")
asyncio.create_task(delete_message(temp_msg, 0))
#заносим сообщение в базу данных в качестве message_id мы пишем id сообщения в bot_message_id
# заносим сообщение в базу данных в качестве message_id мы пишем id сообщения в bot_message_id
cursor.execute("INSERT INTO message_list VALUES (?, ?, ?, ?)",
(bot_message_id.message_id, response['choices'][0]['message']['content'], 0, message.message_id))
# очищаем базу данных от старых сообщений
cursor.execute("DELETE FROM message_list WHERE message_id < ?", (bot_message_id.message_id - DB_message_limit,))
database.commit()

View File

@ -8,6 +8,12 @@ bot_trigger_front=
# Живой пример: Арма |Армат |Арма, |
bot_trigger_all=
# Живой пример: @arma_ai_bot |помогите |
private_answer=
# Живой пример: Я не понимаю тебя, но я могу поговорить с тобой в группе [{'ArmatikChat'}](https://t.me/ArmatikChat) и ещё в некоторых других группах
reply_ignore=0
# По умолчанию: 0
# Содержит в себе все id топиков чата для чатов с форумным типом, если не заполнить контекст бота СЛОМАЕТСЯ!
# Пример заполнения для @armatikchat: 0| 643885| 476959| 1| 476977| 633077| 630664| 476966| 634567
[Openai]
api_key=****
@ -19,6 +25,10 @@ max_token_count=4000
min_token_for_answer=800
# минимальное количество токенов в сообщении ответа бота (чем больше, тем более длинный ответ ГАРАНТИРОВАН)
[DataBase]
message_limit=3000
# Максимальное количество сообщений в базе данных
[AI_Dungeon]
use=openai
# "openai" or "YaGPT" Пока не используется