Docfile commited on
Commit
6b038fd
·
verified ·
1 Parent(s): 5264859

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +201 -172
app.py CHANGED
@@ -2,14 +2,13 @@ from flask import Flask, request, render_template, jsonify
2
  import PIL.Image
3
  from google import genai
4
  from google.genai import types
5
- import requests
6
  import os
7
  from tempfile import NamedTemporaryFile
8
  import tempfile
9
  from datetime import datetime
10
  import logging
11
- import socket
12
- import dns.resolver
13
 
14
  app = Flask(__name__)
15
 
@@ -50,195 +49,222 @@ TELEGRAM_CHAT_ID = "-4972732072"
50
  gen = GOOGLE_API_KEY
51
  client = genai.Client(api_key=gen)
52
 
53
- def test_network_connectivity():
54
- """Teste la connectivité réseau de base."""
55
- results = {}
56
-
57
- # Test 1: Ping Google DNS
58
- try:
59
- socket.create_connection(("8.8.8.8", 53), timeout=5)
60
- results['google_dns'] = {"success": True, "message": "Connexion à Google DNS réussie"}
61
- except Exception as e:
62
- results['google_dns'] = {"success": False, "message": f"Échec connexion Google DNS: {str(e)}"}
63
-
64
- # Test 2: Résolution DNS de google.com
65
- try:
66
- socket.gethostbyname("google.com")
67
- results['dns_google'] = {"success": True, "message": "Résolution DNS google.com réussie"}
68
- except Exception as e:
69
- results['dns_google'] = {"success": False, "message": f"Échec résolution DNS google.com: {str(e)}"}
70
-
71
- # Test 3: Résolution DNS de api.telegram.org
72
- try:
73
- ip = socket.gethostbyname("api.telegram.org")
74
- results['dns_telegram'] = {"success": True, "message": f"Résolution DNS api.telegram.org réussie: {ip}"}
75
- except Exception as e:
76
- results['dns_telegram'] = {"success": False, "message": f"Échec résolution DNS api.telegram.org: {str(e)}"}
77
-
78
- # Test 4: Connexion HTTPS à api.telegram.org
79
- try:
80
- response = requests.get("https://api.telegram.org/", timeout=10)
81
- results['https_telegram'] = {"success": True, "message": f"Connexion HTTPS réussie: {response.status_code}"}
82
- except Exception as e:
83
- results['https_telegram'] = {"success": False, "message": f"Échec connexion HTTPS: {str(e)}"}
84
-
85
- return results
86
-
87
- def send_image_to_telegram_with_fallback(image_path, caption=""):
88
- """Envoie une image vers le groupe Telegram avec différentes méthodes."""
89
-
90
- # Méthode 1: URL standard
91
- url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendPhoto"
92
- result = _try_send_image(url, image_path, caption, "URL standard")
93
- if result[0]:
94
- return result
95
-
96
- # Méthode 2: Essayer avec l'IP directe (nécessite de résoudre l'IP d'abord)
97
- try:
98
- ip = socket.gethostbyname("api.telegram.org")
99
- url_ip = f"https://{ip}/bot{TELEGRAM_BOT_TOKEN}/sendPhoto"
100
- result = _try_send_image(url_ip, image_path, caption, "IP directe",
101
- headers={"Host": "api.telegram.org"})
102
- if result[0]:
103
- return result
104
- except Exception as e:
105
- logger.error(f"Impossible de résoudre l'IP: {e}")
106
 
107
- return False, "Toutes les méthodes ont échoué"
108
-
109
- def _try_send_image(url, image_path, caption, method_name, headers=None):
110
- """Tentative d'envoi d'image avec une méthode spécifique."""
111
  try:
112
- logger.info(f"Tentative d'envoi avec {method_name}: {url}")
113
-
114
  if not os.path.exists(image_path):
 
115
  return False, f"Le fichier {image_path} n'existe pas"
116
 
117
  file_size = os.path.getsize(image_path)
118
- if file_size > 10 * 1024 * 1024:
119
- return False, f"Fichier trop volumineux: {file_size} bytes"
 
120
 
121
  if file_size == 0:
 
122
  return False, f"Fichier vide: {image_path}"
123
 
124
- with open(image_path, 'rb') as photo:
125
- files = {'photo': ('image.jpg', photo, 'image/jpeg')}
126
- data = {
127
- 'chat_id': TELEGRAM_CHAT_ID,
128
- 'caption': caption[:1024] if caption else ""
129
- }
130
-
131
- # Augmenter le timeout et ajouter des headers si nécessaire
132
- request_headers = headers or {}
133
- response = requests.post(url, files=files, data=data,
134
- timeout=30, headers=request_headers)
135
-
136
- logger.info(f"{method_name} - Réponse HTTP: {response.status_code}")
137
-
138
- if response.status_code == 200:
139
- response_json = response.json()
140
- if response_json.get('ok'):
141
- logger.info(f"✅ {method_name} - Envoi réussi")
142
- return True, f"{method_name} - Image envoyée avec succès"
143
- else:
144
- error_msg = response_json.get('description', 'Erreur inconnue')
145
- return False, f"{method_name} - Erreur API: {error_msg}"
146
- else:
147
- return False, f"{method_name} - Erreur HTTP {response.status_code}: {response.text}"
 
 
 
148
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
  except Exception as e:
150
- logger.error(f"{method_name} - Erreur: {str(e)}")
151
- return False, f"{method_name} - Erreur: {str(e)}"
152
 
153
- def send_message_to_telegram_with_fallback(message):
154
- """Envoie un message texte avec fallback."""
 
 
155
 
156
- # Méthode 1: URL standard
157
- url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
158
- result = _try_send_message(url, message, "URL standard")
159
- if result[0]:
160
- return result
161
-
162
- # Méthode 2: IP directe
163
- try:
164
- ip = socket.gethostbyname("api.telegram.org")
165
- url_ip = f"https://{ip}/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
166
- result = _try_send_message(url_ip, message, "IP directe",
167
- headers={"Host": "api.telegram.org"})
168
- if result[0]:
169
- return result
170
- except Exception as e:
171
- logger.error(f"Impossible de résoudre l'IP: {e}")
172
-
173
- return False, "Toutes les méthodes ont échoué"
174
-
175
- def _try_send_message(url, message, method_name, headers=None):
176
- """Tentative d'envoi de message avec une méthode spécifique."""
177
  try:
178
- data = {
179
- 'chat_id': TELEGRAM_CHAT_ID,
180
- 'text': message,
181
- 'parse_mode': 'HTML'
182
- }
183
 
184
- request_headers = headers or {}
185
- response = requests.post(url, data=data, timeout=30, headers=request_headers)
186
-
187
- if response.status_code == 200:
188
- response_json = response.json()
189
- if response_json.get('ok'):
190
- return True, f"{method_name} - Message envoyé avec succès"
191
- else:
192
- return False, f"{method_name} - Erreur API: {response_json.get('description')}"
193
  else:
194
- return False, f"{method_name} - Erreur HTTP: {response.status_code}"
195
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  except Exception as e:
197
- return False, f"{method_name} - Erreur: {str(e)}"
198
-
199
- # Remplacer les anciennes fonctions par les nouvelles
200
- send_image_to_telegram = send_image_to_telegram_with_fallback
201
- send_message_to_telegram = send_message_to_telegram_with_fallback
202
 
203
  def test_bot_permissions():
204
  """Teste les permissions du bot dans le groupe."""
205
- url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/getChat"
 
206
 
207
  try:
208
- data = {'chat_id': TELEGRAM_CHAT_ID}
209
- response = requests.post(url, data=data, timeout=30)
210
 
211
- logger.info(f"Test permissions - Status: {response.status_code}")
212
- logger.debug(f"Test permissions - Response: {response.text}")
 
213
 
214
- if response.status_code == 200:
215
- chat_info = response.json()
216
- if chat_info.get('ok'):
217
- return True, f"Bot autorisé dans le chat: {chat_info['result'].get('title', 'Chat sans titre')}"
218
- else:
219
- return False, f"Erreur API: {chat_info.get('description')}"
220
- else:
221
- return False, f"Erreur HTTP: {response.status_code} - {response.text}"
222
-
 
 
 
 
 
 
 
223
  except Exception as e:
224
- logger.error(f"Erreur test permissions: {str(e)}")
225
  return False, f"Erreur: {str(e)}"
226
 
227
- # Nouvelle route pour diagnostiquer les problèmes réseau
228
- @app.route('/network_test', methods=['GET'])
229
- def network_test():
230
- """Route pour tester la connectivité réseau."""
231
- results = test_network_connectivity()
232
- return jsonify(results)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
 
234
- # Route pour tester les permissions
235
  @app.route('/test_bot_permissions', methods=['GET'])
236
  def test_bot_permissions_route():
237
  """Route pour tester les permissions du bot."""
238
  success, message = test_bot_permissions()
239
  return jsonify({
240
  "success": success,
241
- "message": message
 
242
  })
243
 
244
  @app.route('/', methods=['GET'])
@@ -342,9 +368,9 @@ def svt_submit():
342
  telegram_results = []
343
 
344
  try:
345
- # Test des permissions avant envoi
346
- perm_success, perm_message = test_bot_permissions()
347
- logger.info(f"Test permissions: {perm_success} - {perm_message}")
348
 
349
  # Traitement des images
350
  for i, image in enumerate(images):
@@ -413,14 +439,15 @@ def svt_submit():
413
  logger.info("Réponse générée avec succès")
414
 
415
  # Envoi de la réponse vers Telegram
416
- telegram_message = f"🤖 <b>Réponse générée</b>\n\n📝 <b>Type:</b> {option}\n\n{answer[:3500]}..."
417
  msg_success, msg_message = send_message_to_telegram(telegram_message)
418
  logger.info(f"Envoi réponse Telegram: {msg_success} - {msg_message}")
419
 
420
  return jsonify({
421
  "response": answer,
422
  "telegram_status": telegram_results,
423
- "bot_permissions": {"success": perm_success, "message": perm_message}
 
424
  })
425
 
426
  except Exception as e:
@@ -431,7 +458,8 @@ def svt_submit():
431
  return jsonify({
432
  "error": "Erreur lors du traitement",
433
  "details": str(e),
434
- "telegram_status": telegram_results
 
435
  }), 500
436
 
437
  finally:
@@ -447,10 +475,11 @@ def svt_submit():
447
  @app.route('/test_telegram', methods=['GET'])
448
  def test_telegram():
449
  """Route pour tester la connexion Telegram."""
450
- success, message = send_message_to_telegram("🧪 Test de connexion du bot SVT")
451
  return jsonify({
452
  "success": success,
453
- "message": message
 
454
  })
455
 
456
  @app.route('/debug_telegram', methods=['GET'])
@@ -458,15 +487,18 @@ def debug_telegram():
458
  """Route pour débugger les problèmes Telegram."""
459
  results = {}
460
 
461
- # Test 1: Permissions du bot
 
 
 
462
  perm_success, perm_message = test_bot_permissions()
463
  results['permissions'] = {"success": perm_success, "message": perm_message}
464
 
465
- # Test 2: Envoi d'un message simple
466
- msg_success, msg_message = send_message_to_telegram("🔧 Test de débogage")
467
  results['message_test'] = {"success": msg_success, "message": msg_message}
468
 
469
- # Test 3: Vérification des variables d'environnement
470
  results['config'] = {
471
  "bot_token_set": bool(TELEGRAM_BOT_TOKEN),
472
  "chat_id_set": bool(TELEGRAM_CHAT_ID),
@@ -474,9 +506,6 @@ def debug_telegram():
474
  "chat_id_format": TELEGRAM_CHAT_ID.startswith("-") if TELEGRAM_CHAT_ID else False
475
  }
476
 
477
- # Test 4: Diagnostic réseau
478
- results['network'] = test_network_connectivity()
479
-
480
  return jsonify(results)
481
 
482
  if __name__ == '__main__':
 
2
  import PIL.Image
3
  from google import genai
4
  from google.genai import types
5
+ import telebot
6
  import os
7
  from tempfile import NamedTemporaryFile
8
  import tempfile
9
  from datetime import datetime
10
  import logging
11
+ import time
 
12
 
13
  app = Flask(__name__)
14
 
 
49
  gen = GOOGLE_API_KEY
50
  client = genai.Client(api_key=gen)
51
 
52
+ # Initialisation du bot Telegram avec options avancées
53
+ try:
54
+ bot = telebot.TeleBot(
55
+ TELEGRAM_BOT_TOKEN,
56
+ parse_mode='HTML',
57
+ disable_web_page_preview=True,
58
+ timeout=60, # Timeout plus long
59
+ num_threads=2 # Utiliser plusieurs threads
60
+ )
61
+ logger.info("Bot Telegram initialisé avec succès")
62
+ except Exception as e:
63
+ logger.error(f"Erreur initialisation bot: {e}")
64
+ bot = None
65
+
66
+ def send_image_to_telegram(image_path, caption="", max_retries=3):
67
+ """Envoie une image vers le groupe Telegram avec pyTelegramBotAPI."""
68
+ if not bot:
69
+ return False, "Bot Telegram non initialisé"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
 
 
 
 
71
  try:
72
+ # Vérifications de base
 
73
  if not os.path.exists(image_path):
74
+ logger.error(f"Le fichier {image_path} n'existe pas")
75
  return False, f"Le fichier {image_path} n'existe pas"
76
 
77
  file_size = os.path.getsize(image_path)
78
+ if file_size > 50 * 1024 * 1024: # 50MB limite pour les documents
79
+ logger.error(f"Fichier trop volumineux: {file_size} bytes")
80
+ return False, f"Fichier trop volumineux: {file_size} bytes (limite: 50MB)"
81
 
82
  if file_size == 0:
83
+ logger.error(f"Fichier vide: {image_path}")
84
  return False, f"Fichier vide: {image_path}"
85
 
86
+ logger.info(f"Envoi de l'image: {image_path} (taille: {file_size} bytes)")
87
+
88
+ # Tentatives d'envoi avec retry automatique
89
+ for attempt in range(max_retries):
90
+ try:
91
+ logger.info(f"Tentative {attempt + 1}/{max_retries}")
92
+
93
+ with open(image_path, 'rb') as photo:
94
+ # Si le fichier est < 10MB, l'envoyer comme photo
95
+ if file_size < 10 * 1024 * 1024:
96
+ message = bot.send_photo(
97
+ chat_id=TELEGRAM_CHAT_ID,
98
+ photo=photo,
99
+ caption=caption[:1024] if caption else "",
100
+ timeout=120
101
+ )
102
+ else:
103
+ # Sinon l'envoyer comme document
104
+ message = bot.send_document(
105
+ chat_id=TELEGRAM_CHAT_ID,
106
+ document=photo,
107
+ caption=caption[:1024] if caption else "",
108
+ timeout=120
109
+ )
110
+
111
+ logger.info(f"✅ Image envoyée avec succès (Message ID: {message.message_id})")
112
+ return True, f"Image envoyée avec succès (tentative {attempt + 1})"
113
 
114
+ except telebot.apihelper.ApiTelegramException as e:
115
+ logger.error(f"Erreur API Telegram (tentative {attempt + 1}): {e}")
116
+ if attempt == max_retries - 1: # Dernière tentative
117
+ return False, f"Erreur API Telegram après {max_retries} tentatives: {str(e)}"
118
+ time.sleep(2 ** attempt) # Backoff exponentiel
119
+
120
+ except Exception as e:
121
+ logger.error(f"Erreur inattendue (tentative {attempt + 1}): {e}")
122
+ if attempt == max_retries - 1:
123
+ return False, f"Erreur inattendue après {max_retries} tentatives: {str(e)}"
124
+ time.sleep(2 ** attempt)
125
+
126
+ return False, f"Échec après {max_retries} tentatives"
127
+
128
  except Exception as e:
129
+ logger.error(f"Erreur critique lors de l'envoi: {str(e)}")
130
+ return False, f"Erreur critique: {str(e)}"
131
 
132
+ def send_message_to_telegram(message, max_retries=3):
133
+ """Envoie un message texte vers le groupe Telegram."""
134
+ if not bot:
135
+ return False, "Bot Telegram non initialisé"
136
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  try:
138
+ # Diviser le message s'il est trop long (limite Telegram: 4096 caractères)
139
+ max_length = 4000 # On garde une marge
140
+ messages = []
 
 
141
 
142
+ if len(message) <= max_length:
143
+ messages = [message]
 
 
 
 
 
 
 
144
  else:
145
+ # Diviser le message en chunks
146
+ for i in range(0, len(message), max_length):
147
+ chunk = message[i:i + max_length]
148
+ messages.append(chunk)
149
+
150
+ # Envoyer chaque partie
151
+ for i, msg_part in enumerate(messages):
152
+ for attempt in range(max_retries):
153
+ try:
154
+ logger.info(f"Envoi message partie {i + 1}/{len(messages)} (tentative {attempt + 1})")
155
+
156
+ sent_message = bot.send_message(
157
+ chat_id=TELEGRAM_CHAT_ID,
158
+ text=msg_part,
159
+ parse_mode='HTML',
160
+ timeout=60
161
+ )
162
+
163
+ logger.info(f"✅ Message partie {i + 1} envoyé (ID: {sent_message.message_id})")
164
+ break # Sortir de la boucle de retry si réussi
165
+
166
+ except telebot.apihelper.ApiTelegramException as e:
167
+ logger.error(f"Erreur API Telegram partie {i + 1} (tentative {attempt + 1}): {e}")
168
+ if attempt == max_retries - 1:
169
+ return False, f"Erreur API après {max_retries} tentatives: {str(e)}"
170
+ time.sleep(2 ** attempt)
171
+
172
+ except Exception as e:
173
+ logger.error(f"Erreur inattendue partie {i + 1} (tentative {attempt + 1}): {e}")
174
+ if attempt == max_retries - 1:
175
+ return False, f"Erreur inattendue après {max_retries} tentatives: {str(e)}"
176
+ time.sleep(2 ** attempt)
177
+
178
+ return True, f"Message envoyé avec succès ({len(messages)} partie(s))"
179
+
180
  except Exception as e:
181
+ logger.error(f"Erreur critique envoi message: {str(e)}")
182
+ return False, f"Erreur critique: {str(e)}"
 
 
 
183
 
184
  def test_bot_permissions():
185
  """Teste les permissions du bot dans le groupe."""
186
+ if not bot:
187
+ return False, "Bot Telegram non initialisé"
188
 
189
  try:
190
+ logger.info("Test des permissions du bot...")
 
191
 
192
+ # Obtenir les informations du chat
193
+ chat = bot.get_chat(TELEGRAM_CHAT_ID)
194
+ logger.info(f"Chat trouvé: {chat.title if hasattr(chat, 'title') else 'Chat privé'}")
195
 
196
+ # Obtenir les informations du bot
197
+ bot_info = bot.get_me()
198
+ logger.info(f"Bot: @{bot_info.username} ({bot_info.first_name})")
199
+
200
+ # Tester l'envoi d'un message simple
201
+ test_message = bot.send_message(
202
+ chat_id=TELEGRAM_CHAT_ID,
203
+ text="🔧 Test de permissions réussi",
204
+ timeout=30
205
+ )
206
+
207
+ return True, f"Bot @{bot_info.username} autorisé dans '{chat.title if hasattr(chat, 'title') else 'le chat'}'"
208
+
209
+ except telebot.apihelper.ApiTelegramException as e:
210
+ logger.error(f"Erreur API lors du test: {e}")
211
+ return False, f"Erreur API Telegram: {str(e)}"
212
  except Exception as e:
213
+ logger.error(f"Erreur lors du test des permissions: {str(e)}")
214
  return False, f"Erreur: {str(e)}"
215
 
216
+ def get_bot_status():
217
+ """Obtient le statut du bot et des connexions."""
218
+ status = {
219
+ "bot_initialized": bot is not None,
220
+ "bot_info": None,
221
+ "chat_info": None,
222
+ "api_accessible": False
223
+ }
224
+
225
+ if bot:
226
+ try:
227
+ # Informations du bot
228
+ bot_info = bot.get_me()
229
+ status["bot_info"] = {
230
+ "username": bot_info.username,
231
+ "first_name": bot_info.first_name,
232
+ "id": bot_info.id,
233
+ "is_bot": bot_info.is_bot
234
+ }
235
+ status["api_accessible"] = True
236
+
237
+ # Informations du chat
238
+ try:
239
+ chat = bot.get_chat(TELEGRAM_CHAT_ID)
240
+ status["chat_info"] = {
241
+ "id": chat.id,
242
+ "type": chat.type,
243
+ "title": getattr(chat, 'title', 'N/A'),
244
+ "member_count": getattr(chat, 'member_count', 'N/A')
245
+ }
246
+ except Exception as e:
247
+ status["chat_error"] = str(e)
248
+
249
+ except Exception as e:
250
+ status["bot_error"] = str(e)
251
+
252
+ return status
253
+
254
+ # Routes Flask
255
+ @app.route('/bot_status', methods=['GET'])
256
+ def bot_status():
257
+ """Route pour obtenir le statut du bot."""
258
+ return jsonify(get_bot_status())
259
 
 
260
  @app.route('/test_bot_permissions', methods=['GET'])
261
  def test_bot_permissions_route():
262
  """Route pour tester les permissions du bot."""
263
  success, message = test_bot_permissions()
264
  return jsonify({
265
  "success": success,
266
+ "message": message,
267
+ "bot_status": get_bot_status()
268
  })
269
 
270
  @app.route('/', methods=['GET'])
 
368
  telegram_results = []
369
 
370
  try:
371
+ # Test du statut du bot avant traitement
372
+ bot_status = get_bot_status()
373
+ logger.info(f"Statut du bot: {bot_status}")
374
 
375
  # Traitement des images
376
  for i, image in enumerate(images):
 
439
  logger.info("Réponse générée avec succès")
440
 
441
  # Envoi de la réponse vers Telegram
442
+ telegram_message = f"🤖 <b>Réponse générée</b>\n\n📝 <b>Type:</b> {option}\n\n{answer}"
443
  msg_success, msg_message = send_message_to_telegram(telegram_message)
444
  logger.info(f"Envoi réponse Telegram: {msg_success} - {msg_message}")
445
 
446
  return jsonify({
447
  "response": answer,
448
  "telegram_status": telegram_results,
449
+ "bot_status": bot_status,
450
+ "response_sent": {"success": msg_success, "message": msg_message}
451
  })
452
 
453
  except Exception as e:
 
458
  return jsonify({
459
  "error": "Erreur lors du traitement",
460
  "details": str(e),
461
+ "telegram_status": telegram_results,
462
+ "bot_status": get_bot_status()
463
  }), 500
464
 
465
  finally:
 
475
  @app.route('/test_telegram', methods=['GET'])
476
  def test_telegram():
477
  """Route pour tester la connexion Telegram."""
478
+ success, message = send_message_to_telegram("🧪 Test de connexion du bot SVT avec pyTelegramBotAPI")
479
  return jsonify({
480
  "success": success,
481
+ "message": message,
482
+ "bot_status": get_bot_status()
483
  })
484
 
485
  @app.route('/debug_telegram', methods=['GET'])
 
487
  """Route pour débugger les problèmes Telegram."""
488
  results = {}
489
 
490
+ # Test 1: Statut du bot
491
+ results['bot_status'] = get_bot_status()
492
+
493
+ # Test 2: Permissions du bot
494
  perm_success, perm_message = test_bot_permissions()
495
  results['permissions'] = {"success": perm_success, "message": perm_message}
496
 
497
+ # Test 3: Envoi d'un message simple
498
+ msg_success, msg_message = send_message_to_telegram("🔧 Test de débogage avec pyTelegramBotAPI")
499
  results['message_test'] = {"success": msg_success, "message": msg_message}
500
 
501
+ # Test 4: Vérification des variables d'environnement
502
  results['config'] = {
503
  "bot_token_set": bool(TELEGRAM_BOT_TOKEN),
504
  "chat_id_set": bool(TELEGRAM_CHAT_ID),
 
506
  "chat_id_format": TELEGRAM_CHAT_ID.startswith("-") if TELEGRAM_CHAT_ID else False
507
  }
508
 
 
 
 
509
  return jsonify(results)
510
 
511
  if __name__ == '__main__':