Advertisement
GURIN_25

Untitled

Mar 26th, 2023
732
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.30 KB | None | 0 0
  1. import os
  2. import sys
  3. import telebot
  4. import openai
  5. import sqlite3
  6. from sqlite3 import Error
  7. from datetime import datetime
  8.  
  9. # Иппорт ключей
  10. from api_key import openai
  11. from api_key import bot
  12.  
  13. # создаем соединение с базой данных SQLite
  14. try:
  15.     conn = sqlite3.connect('messages.db')
  16. except Error as e:
  17.     print(f"The error '{e}' occurred")
  18.  
  19. # Функция для создания таблицы в базе данных SQLite
  20. def create_table(conn):
  21.     try:
  22.         c = conn.cursor()
  23.         c.execute('''CREATE TABLE IF NOT EXISTS messages
  24.                     (id INTEGER PRIMARY KEY AUTOINCREMENT,
  25.                      user_id INTEGER,
  26.                      user_name TEXT,
  27.                      user_first_name TEXT,
  28.                      user_second_name TEXT,
  29.                      content TEXT,
  30.                      role TEXT,
  31.                      timestamp TEXT)''')
  32.     except Error as e:
  33.         print(f"The error '{e}' occurred")
  34.  
  35. # Функция для сохранения сообщения в базе данных SQLite
  36. def save_message(conn, user_id, user_name, user_first_name, user_second_name, content, role, timestamp):
  37.     try:
  38.         c = conn.cursor()
  39.         c.execute('''INSERT INTO messages (user_id, user_name, user_first_name, user_second_name, content, role, timestamp)
  40.                     VALUES (?, ?, ?, ?, ?, ?, ?)''', (user_id, user_name, user_first_name, user_second_name, content, role, timestamp))
  41.         conn.commit()
  42.     except Error as e:
  43.         print(f"The error '{e}' occurred")
  44.  
  45. def get_last_message(conn):
  46.     try:
  47.         c = conn.cursor()
  48.         c.execute('''SELECT * FROM messages ORDER BY id DESC LIMIT 1''')
  49.         row = c.fetchone()
  50.         if row:
  51.             return {
  52.                 "id": row[0],
  53.                 "user_id": row[1],
  54.                 "user_name": row[2],
  55.                 "user_first_name": row[3],
  56.                 "user_second_name": row[4],
  57.                 "content": row[5],
  58.                 "role": row[6],
  59.                 "timestamp": row[7]
  60.             }
  61.         else:
  62.             return None
  63.     except Error as e:
  64.         print(f"The error '{e}' occurred")
  65.  
  66. # Функция для получения истории сообщений из базы данных SQLite
  67. def get_message_history(conn):
  68.     try:
  69.         c = conn.cursor()
  70.         c.execute('''SELECT * FROM messages''')
  71.         rows = c.fetchall()
  72.         return rows
  73.     except Error as e:
  74.         print(f"The error '{e}' occurred")
  75.  
  76. # Создаем таблицу messages, если ее нет
  77. create_table(conn)
  78.  
  79. messages = []
  80.  
  81. # Функция, обрабатывающая команду /reload
  82. @bot.message_handler(commands=["reload"])
  83. def reload(m, res=False):
  84.     bot.send_message(m.chat.id, "Вынужденный перезапуск!")
  85.     if(m.chat.id != 421486813): bot.send_message(421486813, f"{m.from_user.first_name} (@{m.from_user.username} диалог-{m.chat.id}) отработана команда /reload!")
  86.     os.execv(sys.executable, [sys.executable] + sys.argv)
  87.    
  88. # Функция, обрабатывающая фото
  89. @bot.message_handler(content_types=["photo"])
  90. def handle_text(tg_message):
  91.     bot.send_message(tg_message.chat.id, 'Я думаю, что на картинке что-то очень важное, но открывать специально не буду:)')
  92.  
  93. # Функция, обрабатывающая команду /start
  94. @bot.message_handler(commands=["start"])
  95. def start(m, res=False):
  96.     bot.send_message(m.chat.id, f'Здравствуй, {m.from_user.first_name}!\n\
  97. Я - искусственный интеллект, созданный OpenAI и @alexan_25. Я разработан для помощи людям в общении, работе и решении различных задач.\
  98. Моя цель - помочь людям в их ежедневной жизни и сделать их более продуктивными и удобными.\n\
  99. Как я могу помочь Вам, {m.from_user.first_name}?')
  100.  
  101. last_message = None
  102.  
  103. # Получение сообщений от юзера
  104. @bot.message_handler(content_types=["text"])
  105. def handle_text(tg_message):
  106.     global last_message
  107.    
  108.     # создаем соединение с базой данных SQLite
  109.     try:
  110.         conn = sqlite3.connect('messages.db')
  111.     except Error as e:
  112.         print(f"The error '{e}' occurred")
  113.  
  114.     try:
  115.         user_id = tg_message.chat.id
  116.         user_name = tg_message.from_user.username
  117.         message = tg_message.text
  118.         timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  119.         user_first_name = tg_message.from_user.first_name
  120.         user_second_name = tg_message.from_user.last_name
  121.         save_message(conn, user_id, user_name, user_first_name, user_second_name, message, "user", timestamp) # сохраняем сообщение пользователя в базу данных
  122.         messages = [{"role": "user", "content": message}]
  123.         if last_message: messages.append({"role": "assistant", "content": last_message})
  124.         chat = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages = messages)
  125.         reply = chat.choices[0].message.content
  126.         bot.send_message(tg_message.chat.id, reply)
  127.         last_message = reply
  128.         save_message(conn, user_id, "GPT CHAT", "БОТ", "", reply, "gpt-bot", timestamp) # сохраняем ответ бота в базу данных
  129.     except Exception as e:
  130.         bot.send_message(421486813, f"@{user_name}({user_id} {user_first_name}) перезапуск ошибка->{e}")
  131.         bot.send_message(user_id, "Извините за неудобства, произошла непредвиденная перезагрузка, которая прервала нашу связь. Пожалуйста, повторите ваше последнее сообщение еще раз, чтобы я мог продолжить нашу беседу. Благодарю за понимание!\n\nЕсли я перестал отвечать, напиши об этом моему создателю @alexan_25")
  132.         os.execv(sys.executable, [sys.executable] + sys.argv)
  133.  
  134. # Запускаем бота
  135. bot.polling(none_stop=True, interval=0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement