Rid3 commited on
Commit
f3e7fd0
·
verified ·
1 Parent(s): 46e0c4d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -31
app.py CHANGED
@@ -8,7 +8,16 @@ from typing import Dict, List, Optional
8
 
9
  from telegram import Update
10
  from telegram.ext import Application, CommandHandler, MessageHandler, ContextTypes, filters
11
- import google.generativeai as genai
 
 
 
 
 
 
 
 
 
12
  import firebase_admin
13
  from firebase_admin import credentials, firestore
14
  import aiohttp
@@ -30,21 +39,27 @@ ACTIVITY_CHECK_INTERVAL = 1800 # 30 минут
30
 
31
  # Firebase инициализация
32
  try:
33
- firebase_admin.initialize_app(credentials.Certificate("firebase_admin.json"))
 
34
  db = firestore.client()
35
  logger.info("✅ Firebase подключен")
36
  except Exception as e:
37
- logger.error(f" Firebase ошибка: {e}")
38
  db = None
39
 
40
  # Google Generative AI
41
- genai.configure(api_key=GOOGLE_API_KEYS[0])
 
 
 
 
 
42
 
43
  # ============= СОСТОЯНИЕ БОТА =============
44
  class BotState:
45
  def __init__(self):
46
- self.request_queue: Dict[int, deque] = {} # chat_id -> очередь запросов
47
- self.processing: Dict[int, bool] = {} # chat_id -> обрабатывается ли
48
  self.last_activity = datetime.now()
49
  self.is_sleeping = False
50
  self.whitelist: set = set()
@@ -57,14 +72,17 @@ class BotState:
57
  try:
58
  doc = db.collection("bot_config").document("whitelist").get()
59
  if doc.exists:
60
- self.whitelist = set(doc.get("users", []))
 
61
  else:
62
  self.whitelist = {ADMIN_ID}
63
  self.save_whitelist()
64
  logger.info(f"📋 Белый список: {len(self.whitelist)} пользователей")
65
  except Exception as e:
66
- logger.error(f"Ошибка загрузки списка: {e}")
67
  self.whitelist = {ADMIN_ID}
 
 
68
 
69
  def save_whitelist(self):
70
  """Сохранить белый список в Firebase"""
@@ -75,7 +93,7 @@ class BotState:
75
  "updated_at": datetime.now()
76
  })
77
  except Exception as e:
78
- logger.error(f"Ошибка сохранения: {e}")
79
 
80
  def is_whitelisted(self, user_id: int) -> bool:
81
  return user_id in self.whitelist or user_id == ADMIN_ID
@@ -95,6 +113,9 @@ bot_state = BotState()
95
  # ============= AI ГЕНЕРАТОР =============
96
  async def generate_text(prompt: str, user_id: int) -> str:
97
  """Генерировать текст через Google Generative AI"""
 
 
 
98
  try:
99
  model = genai.GenerativeModel("gemini-pro")
100
  response = model.generate_content(prompt)
@@ -102,12 +123,15 @@ async def generate_text(prompt: str, user_id: int) -> str:
102
 
103
  # Сохранить в Firebase
104
  if db:
105
- db.collection("users").document(str(user_id)).collection("history").add({
106
- "prompt": prompt,
107
- "response": result,
108
- "timestamp": datetime.now(),
109
- "model": "gemini-pro"
110
- })
 
 
 
111
 
112
  return result
113
  except Exception as e:
@@ -130,7 +154,7 @@ async def send_via_cloudflare(method: str, chat_id: int, text: str, **kwargs):
130
  if resp.status == 200:
131
  return await resp.json()
132
  except Exception as e:
133
- logger.error(f"Cloudflare ошибка: {e}")
134
 
135
  return None
136
 
@@ -149,7 +173,7 @@ async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
149
  /w - Управлять списком (админ)
150
  /help - Справка
151
 
152
- П��осто напишите "ии [текст)" и я отвечу!"""
153
 
154
  await update.message.reply_text(text)
155
 
@@ -296,16 +320,6 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
296
 
297
  bot_state.last_activity = datetime.now()
298
 
299
- async def activity_monitor(context: ContextTypes.DEFAULT_TYPE):
300
- """Мониторить активность каждые 30 минут"""
301
- logger.info("🔍 Проверка активности")
302
-
303
- if (datetime.now() - bot_state.last_activity).seconds > ACTIVITY_CHECK_INTERVAL:
304
- bot_state.is_sleeping = True
305
- logger.info("😴 Бот спит - нет активности")
306
- else:
307
- bot_state.is_sleeping = False
308
-
309
  async def error_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
310
  logger.error(f"Ошибка: {context.error}")
311
 
@@ -328,10 +342,6 @@ def main():
328
  # Обработчик ошибок
329
  app.add_error_handler(error_handler)
330
 
331
- # Job очередь для мониторинга
332
- job_queue = app.job_queue
333
- job_queue.run_repeating(activity_monitor, interval=ACTIVITY_CHECK_INTERVAL, first=60)
334
-
335
  logger.info("✅ Бот запущен. Ctrl+C для остановки.")
336
  app.run_polling()
337
 
 
8
 
9
  from telegram import Update
10
  from telegram.ext import Application, CommandHandler, MessageHandler, ContextTypes, filters
11
+
12
+ # Используем новый google.genai вместо deprecated google.generativeai
13
+ try:
14
+ import google.genai as genai
15
+ except ImportError:
16
+ try:
17
+ import google.generativeai as genai
18
+ except ImportError:
19
+ genai = None
20
+
21
  import firebase_admin
22
  from firebase_admin import credentials, firestore
23
  import aiohttp
 
39
 
40
  # Firebase инициализация
41
  try:
42
+ if not firebase_admin._apps:
43
+ firebase_admin.initialize_app(credentials.Certificate("firebase_admin.json"))
44
  db = firestore.client()
45
  logger.info("✅ Firebase подключен")
46
  except Exception as e:
47
+ logger.warning(f"⚠️ Firebase: {e}")
48
  db = None
49
 
50
  # Google Generative AI
51
+ try:
52
+ if genai:
53
+ genai.configure(api_key=GOOGLE_API_KEYS[0])
54
+ logger.info("✅ Google AI настроен")
55
+ except Exception as e:
56
+ logger.warning(f"⚠️ Google AI: {e}")
57
 
58
  # ============= СОСТОЯНИЕ БОТА =============
59
  class BotState:
60
  def __init__(self):
61
+ self.request_queue: Dict[int, deque] = {}
62
+ self.processing: Dict[int, bool] = {}
63
  self.last_activity = datetime.now()
64
  self.is_sleeping = False
65
  self.whitelist: set = set()
 
72
  try:
73
  doc = db.collection("bot_config").document("whitelist").get()
74
  if doc.exists:
75
+ data = doc.to_dict()
76
+ self.whitelist = set(data.get("users", []))
77
  else:
78
  self.whitelist = {ADMIN_ID}
79
  self.save_whitelist()
80
  logger.info(f"📋 Белый список: {len(self.whitelist)} пользователей")
81
  except Exception as e:
82
+ logger.warning(f"⚠️ Ошибка загрузки списка: {e}")
83
  self.whitelist = {ADMIN_ID}
84
+ else:
85
+ self.whitelist = {ADMIN_ID}
86
 
87
  def save_whitelist(self):
88
  """Сохранить белый список в Firebase"""
 
93
  "updated_at": datetime.now()
94
  })
95
  except Exception as e:
96
+ logger.warning(f"⚠️ Ошибка сохранения: {e}")
97
 
98
  def is_whitelisted(self, user_id: int) -> bool:
99
  return user_id in self.whitelist or user_id == ADMIN_ID
 
113
  # ============= AI ГЕНЕРАТОР =============
114
  async def generate_text(prompt: str, user_id: int) -> str:
115
  """Генерировать текст через Google Generative AI"""
116
+ if not genai:
117
+ return "❌ Google AI не настроен"
118
+
119
  try:
120
  model = genai.GenerativeModel("gemini-pro")
121
  response = model.generate_content(prompt)
 
123
 
124
  # Сохранить в Firebase
125
  if db:
126
+ try:
127
+ db.collection("users").document(str(user_id)).collection("history").add({
128
+ "prompt": prompt,
129
+ "response": result,
130
+ "timestamp": datetime.now(),
131
+ "model": "gemini-pro"
132
+ })
133
+ except Exception as e:
134
+ logger.warning(f"⚠️ Не удалось сохранить: {e}")
135
 
136
  return result
137
  except Exception as e:
 
154
  if resp.status == 200:
155
  return await resp.json()
156
  except Exception as e:
157
+ logger.warning(f"⚠️ Cloudflare: {e}")
158
 
159
  return None
160
 
 
173
  /w - Управлять списком (админ)
174
  /help - Справка
175
 
176
+ Просто напишите "ии [текст] и я отвечу!"""
177
 
178
  await update.message.reply_text(text)
179
 
 
320
 
321
  bot_state.last_activity = datetime.now()
322
 
 
 
 
 
 
 
 
 
 
 
323
  async def error_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
324
  logger.error(f"Ошибка: {context.error}")
325
 
 
342
  # Обработчик ошибок
343
  app.add_error_handler(error_handler)
344
 
 
 
 
 
345
  logger.info("✅ Бот запущен. Ctrl+C для остановки.")
346
  app.run_polling()
347