0
0
mirror of https://gitflic.ru/project/maks1ms/ocab.git synced 2024-12-24 16:44:44 +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 configparser
import sqlite3 import sqlite3
import asyncio import asyncio
import sys
from aiogram import Bot, Dispatcher, executor, types from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.utils.exceptions import MessageCantBeDeleted, MessageToDeleteNotFound from aiogram.utils.exceptions import MessageCantBeDeleted, MessageToDeleteNotFound
mother_path = os.path.dirname(os.path.dirname(os.getcwd())) mother_path = os.path.dirname(os.path.dirname(os.getcwd()))
sys.path.insert(1, mother_path)
# Импорт переменных из файла .ini # Импорт переменных из файла .ini
@ -24,6 +26,7 @@ bot_trigger_all = (config['Telegram']['bot_trigger_all']).split('|')
# удаление лишних элементов массивов # удаление лишних элементов массивов
bot_trigger_front.remove('') bot_trigger_front.remove('')
bot_trigger_all.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): async def in_message(message: types.Message):
chat_id = message.chat.id chat_id = message.chat.id
# Получение сообщений в чате, и запись их в базу данных # Получение сообщений в чате, и запись их в базу данных
# Проверка на то, что сообщение не пустое и не отправлено в чате содержащим ChatType = 1 в базе данных chatlist if (message.chat.type == "private" or message.chat.type == "channel"):
if (message.chat.type != "group" or message.chat.type != "supergroup") and \ 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 \ message.text != '' and message.text != ' ' and \
(cursor.execute("SELECT chat_role FROM chat_list WHERE chat_id;") == 1): return None (cursor.execute("SELECT chat_role FROM chat_list WHERE chat_id;") == 1): return None
else: else:
@ -118,15 +124,17 @@ async def in_message(message: types.Message):
if response is None: if response is None:
bot_message_id = await message.reply("Я не понял тебя, попробуй перефразировать") bot_message_id = await message.reply("Я не понял тебя, попробуй перефразировать")
asyncio.create_task(delete_message(temp_msg, 0)) asyncio.create_task(delete_message(temp_msg, 0))
#заносим сообщение в базу данных в качестве message_id пишем id сообщения которое отправил бот # заносим сообщение в базу данных в качестве message_id пишем id сообщения которое отправил бот
cursor.execute("INSERT INTO message_list VALUES (?, ?, ?, ?)", cursor.execute("INSERT INTO message_list VALUES (?, ?, ?, ?)",
(bot_message_id, "Я не понял тебя, попробуй перефразировать", 0, message.message_id)) (bot_message_id, "Я не понял тебя, попробуй перефразировать", 0, message.message_id))
else: else:
bot_message_id = await message.reply(response['choices'][0]['message']['content'], parse_mode="markdown") bot_message_id = await message.reply(response['choices'][0]['message']['content'], parse_mode="markdown")
asyncio.create_task(delete_message(temp_msg, 0)) 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 (?, ?, ?, ?)", cursor.execute("INSERT INTO message_list VALUES (?, ?, ?, ?)",
(bot_message_id.message_id, response['choices'][0]['message']['content'], 0, message.message_id)) (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() database.commit()

View File

@ -8,6 +8,12 @@ bot_trigger_front=
# Живой пример: Арма |Армат |Арма, | # Живой пример: Арма |Армат |Арма, |
bot_trigger_all= bot_trigger_all=
# Живой пример: @arma_ai_bot |помогите | # Живой пример: @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] [Openai]
api_key=**** api_key=****
@ -19,6 +25,10 @@ max_token_count=4000
min_token_for_answer=800 min_token_for_answer=800
# минимальное количество токенов в сообщении ответа бота (чем больше, тем более длинный ответ ГАРАНТИРОВАН) # минимальное количество токенов в сообщении ответа бота (чем больше, тем более длинный ответ ГАРАНТИРОВАН)
[DataBase]
message_limit=3000
# Максимальное количество сообщений в базе данных
[AI_Dungeon] [AI_Dungeon]
use=openai use=openai
# "openai" or "YaGPT" Пока не используется # "openai" or "YaGPT" Пока не используется