# Создание экземпляра Telegram бота с использованием токена
bot = telebot.TeleBot("Telegrma token") # Замените на реальный токен
# Удаление webhook (если он был установлен ранее)
bot.delete_webhook()
# Обработчик команд "/start" и "/help"
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
# Отправляем приветственное сообщение с инструкциями
bot.reply_to(message, "Привет! Я бот, созданный помочь тебе сделать домашнее задание. Если ты готов напиши условие задачи, которую надо решить и отправь её мне!. Пример: Реши пример 2+2, распиши подробно все этапы решения.\n После отправки мне запроса мне нужно немного время для обработки и ответа Вам.\n Этот процес может занимать до 30сек.\n Вы не переживайте я Вам отвечу в любом случае! ")
# Обработчик текстовых сообщений
@bot.message_handler(content_types=['text'])
def check_message_length(message):
# Проверяем длину текста сообщения
if len(message.text) > 3000:
# Если превышен лимит символов, отправляем сообщение об ошибке
bot.send_message(message.chat.id, 'Максимальное количество символов 3000. Вы превысили ограничение, измените текст сообщения.')
else:
# Иначе передаем сообщение на обработку
process_message(message)
# Функция для обработки сообщений
def process_message(message):
# Извлекаем текст сообщения и информацию о пользователе
zapros = message.text
first_name = message.from_user.first_name
user_id = message.from_user.id
# Устанавливаем API-ключ для OpenAI
openai.api_key = "API_key ChatGPT" # Замените на реальный API-ключ
# Проверяем длину текста сообщения
if len(zapros) > 4096:
# Если превышен лимит символов, отправляем сообщение об ошибке
bot.send_message(message.chat.id, 'Максимальное количество символов 4096. Вы превысили ограничение, измените текст сообщения')
return
# Создаем курсор для работы с базой данных
mycursor = mydb.cursor()
# SQL-запрос для проверки существования пользователя по ID
sql = "SELECT user_id FROM users WHERE user_id = %s"
val = str(user_id)
mycursor.execute(sql, [val])
# Получаем результат запроса
myresult = mycursor.fetchall()
# Установка параметров для модели GPT-3
model_engine = "text-davinci-003"
prompt = zapros
max_tokens = min(2800, 4096 - len(zapros)) # Уменьшаем количество токенов для завершения
try:
# Выполняем запрос к API OpenAI, чтобы получить ответ
completion = openai.Completion.create(
engine=model_engine,
prompt=prompt,
max_tokens=max_tokens,
temperature=0.5,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
# Отправляем ответ пользователя в чат Telegram
bot.send_message(message.chat.id, first_name + ' Ваш ID:' + str(user_id) + '\nОтвет: ' + completion.choices[0].text)
# Проверяем, существует ли пользователь в базе данных
if len(myresult) == 0:
# Если нет, добавляем его данные и запрос в базу данных
sql = "INSERT INTO users (name, user_id, data) VALUES (%s, %s, %s)"
val = (first_name, str(user_id), datetime.now())
mycursor.execute(sql, val)
mydb.commit()
sql_request = "INSERT INTO request (id_user, data, request, answer) VALUES (%s,%s, %s, %s)"
val_request = (user_id, datetime.now(), message.text, completion.choices[0].text)
mycursor.execute(sql_request, val_request)
mydb.commit()
else:
# Если пользователь уже существует, добавляем только новый запрос и ответ
sql_request = "INSERT INTO request (id_user, data, request,answer) VALUES (%s,%s, %s,%s )"
val_request = (user_id, datetime.now(), message.text, completion.choices[0].text)
mycursor.execute(sql_request, val_request)
mydb.commit()
except openai.error.InvalidRequestError:
# Обработка ошибки при превышении лимита символов
bot.send_message(message.chat.id, 'Максимальное количество символов 3000. Вы превысили ограничение, измените текст сообщения')
except openai.error.RateLimitError:
# Обработка ошибки при ограничении на количество запросов к OpenAI
bot.send_message(message.chat.id, 'Извините, возникли проблемы на стороне ChatGPT. Пожалуйста