User: привет
Assistant: Привет! Как я могу помочь тебе сегодня?
User: DENISTOR, [15.12.2024 23:04]
оптимизируй код, пожалуйста:
import json
import telebot
import g4f
from telebot import types
# Инициализируем объект бота с токеном вашего Telegram бота
BOT = telebot.TeleBot('<TRUFFLEHOG_REDACTED_TELEGRAMBOTTOKEN>')

# Словарь для хранения контекста чатов
chats_context = {}

# Список сообщений об ошибках
stop_messages = ["Model not found or too long input."," Or any other error (xD)",
                 'Model not found or too long input. Or any other error (xD)',
                 "Generated by BLACKBOX.AI, try unlimited chat https://www.blackbox.ai and for API requests replace  https://www.blackbox.ai with https://api.blackbox.ai",
                 'Generated by BLACKBOX.AI, try unlimited chat https://www.blackbox.ai and for API requests replace  ',
                 'https://www.blackbox.ai with https://api.blackbox.ai']


def load_data():
    """Загружает сохраненные контексты чатов из файла."""
    global chats_context
    try:
        with open('chats_context.json', 'r', encoding='utf-8') as file:
            DATA_json = file.read()
        chats_context = json.loads(DATA_json)
        print('chats_context загружен!')
    except Exception as e:
        print(f'Не удалось загрузить chats_context из json: {e}')


load_data()


def save_data():
    """Сохраняет текущий контекст чатов в файл."""
    try:
        with open('chats_context.json', 'w', encoding='utf-8') as file:
            json.dump(chats_context, file, ensure_ascii=False, indent=4)
    except Exception as e:
        print(f'Не удалось сохранить chats_context в json: {e}')
def generate_text(chat_id, question):
    if question:
        context = chats_context[str(chat_id)]
        response = ''
        answer = False
        print('____________________')
        while not answer:
            response = g4f.ChatCompletion.create(
                model=g4f.models.gpt_4o,
                messages=context
            )
            for i in range(len(stop_messages)):
                print(response + "|||" + stop_messages[i])
                if stop_messages[i] in str(response) or stop_messages[i] == str(response):
                    answer = False
                    break
                else:
                    answer = True
                print(answer)

        context.append({"role": "assistant", "content": response})
        markup = types.InlineKeyboardMarkup()
        markup.row(types.InlineKeyboardButton('🔁регенерировать ответ🔁', callback_data='regen'))
        BOT.send_message(chat_id, response, parse_mode="Markdown", reply_markup=markup)

        # Обновляем контекст для чата
        chats_context[str(chat_id)] = context

        save_data()
    else:
        BOT.send_message(chat_id, 'Пожалуйста, введите вопрос после команды /gpt.')


@BOT.message_handler(commands=['start'])
def start(message):
    """Отправляет приветственное сообщение пользователю."""
    chat_id = message.chat.id
    BOT.send_message(chat_id,
                     f'Привет {message.from_user.first_name}! Я бот с встроенным ChatGPT 4o.\n Используй команду /gpt, чтобы задать вопрос.\n Для сброса контекста используйте команду /gpt_reset.')


@BOT.message_handler(commands=['gpt'])
def gpt(message):
    """Обрабатывает команду /gpt и получает вопрос от пользователя."""
    chat_id = message.chat.id
    question = message.text[len("/gpt "):].strip()
    if chats_context.get(str(chat_id)) is not None:
        context = chats_context[str(chat_id)]
    else:
        context = []

    context.append({"role": "user", "content": question})
    chats_context[str(chat_id)] = context
    save_data()
    generate_text(chat_id, question)
Assistant: