djontros commited on
Commit
2f59730
·
verified ·
1 Parent(s): c4ab2c3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -5
app.py CHANGED
@@ -1,18 +1,20 @@
1
- from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters, CallbackContext
2
  import google.generativeai as genai
3
  import os
4
  import logging
5
 
6
- # === Логирование ===
7
  logging.basicConfig(level=logging.INFO)
 
8
 
9
- # === Настройки Gemini ===
10
- GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
11
  TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
 
12
 
13
  if not TELEGRAM_TOKEN or not GEMINI_API_KEY:
14
  raise ValueError("TELEGRAM_TOKEN или GEMINI_API_KEY не установлены")
15
 
 
16
  genai.configure(api_key=GEMINI_API_KEY)
17
 
18
  generation_config = {
@@ -26,4 +28,69 @@ safety_settings = [
26
  {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
27
  {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
28
  {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
29
- {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_MEDIUM
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters
2
  import google.generativeai as genai
3
  import os
4
  import logging
5
 
6
+ # === Настройка логирования ===
7
  logging.basicConfig(level=logging.INFO)
8
+ logger = logging.getLogger(__name__)
9
 
10
+ # === Проверка переменных окружения ===
 
11
  TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN")
12
+ GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
13
 
14
  if not TELEGRAM_TOKEN or not GEMINI_API_KEY:
15
  raise ValueError("TELEGRAM_TOKEN или GEMINI_API_KEY не установлены")
16
 
17
+ # === Настройка Gemini ===
18
  genai.configure(api_key=GEMINI_API_KEY)
19
 
20
  generation_config = {
 
28
  {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
29
  {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
30
  {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
31
+ {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"},
32
+ ]
33
+
34
+ model = genai.GenerativeModel(
35
+ model_name="gemini-1.0-pro",
36
+ generation_config=generation_config,
37
+ safety_settings=safety_settings
38
+ )
39
+
40
+ # Хранилище чатов для пользователей
41
+ user_chats = {}
42
+
43
+ # === Команды бота ===
44
+ async def start(update, context):
45
+ user_id = update.effective_user.id
46
+ user_chats[user_id] = model.start_chat(history=[])
47
+ logger.info(f"[{user_id}] Начало нового чата")
48
+ await update.message.reply_text("Привет! Напишите что-нибудь, и я отвечу.")
49
+
50
+ async def reset(update, context):
51
+ user_id = update.effective_user.id
52
+ if user_id in user_chats:
53
+ del user_chats[user_id]
54
+ logger.info(f"[{user_id}] История диалога очищена")
55
+ await update.message.reply_text("История диалога очищена.")
56
+
57
+ async def handle_message(update, context):
58
+ user_id = update.effective_user.id
59
+ text = update.message.text.strip()
60
+
61
+ # Проверки
62
+ if len(text) == 0:
63
+ await update.message.reply_text("Вы отправили пустое сообщение.")
64
+ return
65
+
66
+ if len(text) > 2000:
67
+ await update.message.reply_text("Сообщение слишком длинное. Пожалуйста, сократите его.")
68
+ return
69
+
70
+ # Инициализация чата
71
+ if user_id not in user_chats:
72
+ user_chats[user_id] = model.start_chat(history=[])
73
+
74
+ chat = user_chats[user_id]
75
+
76
+ try:
77
+ logger.info(f"[{user_id}] Запрос: {text}")
78
+ response = chat.send_message(text)
79
+ logger.info(f"[{user_id}] Ответ: {response.text.strip()}")
80
+ await update.message.reply_text(response.text.strip())
81
+ except Exception as e:
82
+ error_msg = f"Ошибка: {str(e)}"
83
+ logger.error(error_msg)
84
+ await update.message.reply_text("Произошла ошибка при обработке запроса.")
85
+
86
+ # === Точка входа ===
87
+ if __name__ == '__main__':
88
+ application = ApplicationBuilder().token(TELEGRAM_TOKEN).build()
89
+
90
+ # Регистрация обработчиков
91
+ application.add_handler(CommandHandler('start', start))
92
+ application.add_handler(CommandHandler('reset', reset))
93
+ application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
94
+
95
+ logger.info("Бот запущен...")
96
+ application.run_polling()