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:
parent
3e10e9b806
commit
96b257fb6b
@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
@ -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" Пока не используется
|
Loading…
Reference in New Issue
Block a user