Spaces:
Runtime error
Runtime error
| import os, json, urllib.request, subprocess, traceback, sys | |
| from http.server import BaseHTTPRequestHandler, HTTPServer | |
| PORT = 7860 | |
| # .strip() уберет случайные пробелы, если они есть в секретах | |
| TOKEN = os.environ.get("TELEGRAM_BOT_TOKEN", "").strip() | |
| ALLOWED_USER = os.environ.get("TELEGRAM_ALLOWED_USERS", "").strip() | |
| def log(msg): | |
| """Мгновенный вывод в логи Hugging Face""" | |
| print(msg, flush=True) | |
| sys.stdout.flush() | |
| def send_tg(chat_id, text): | |
| """Прямая отправка в Telegram БЕЗ Cloudflare""" | |
| if not TOKEN: | |
| log("❌ Ошибка: Не задан TELEGRAM_BOT_TOKEN") | |
| return | |
| url = f"https://api.telegram.org/bot{TOKEN}/sendMessage" | |
| data = json.dumps({"chat_id": chat_id, "text": str(text)}).encode('utf-8') | |
| # Добавляем User-Agent, чтобы Телеграм не ругался на скрипт | |
| headers = { | |
| "Content-Type": "application/json", | |
| "User-Agent": "Mozilla/5.0" | |
| } | |
| req = urllib.request.Request(url, data=data, headers=headers) | |
| try: | |
| urllib.request.urlopen(req) | |
| log(f"✈️ Сообщение успешно отправлено в чат {chat_id}") | |
| except Exception as e: | |
| log(f"❌ Ошибка отправки в Telegram: {e}") | |
| class WebhookHandler(BaseHTTPRequestHandler): | |
| def do_POST(self): | |
| length = int(self.headers.get('Content-Length', 0)) | |
| data = json.loads(self.rfile.read(length)) | |
| # Сразу отдаем 200 OK Телеграму | |
| self.send_response(200) | |
| self.end_headers() | |
| if "message" in data and "text" in data["message"]: | |
| chat_id = str(data["message"]["chat"]["id"]) | |
| text = data["message"]["text"] | |
| log(f"📥 Получено: {text}") | |
| if ALLOWED_USER and chat_id != ALLOWED_USER: | |
| log("⛔ Блокировка: чужой ID.") | |
| send_tg(chat_id, "⛔ Доступ закрыт.") | |
| return | |
| send_tg(chat_id, "🤖 Принято! Запускаю Гермеса...") | |
| try: | |
| log("🧠 Выполняю команду hermes...") | |
| my_env = os.environ.copy() | |
| # ПРАВИЛЬНЫЙ ПОРЯДОК АРГУМЕНТОВ | |
| cmd = [ | |
| "hermes", | |
| "-m", "openai/z-ai/glm-5.1", | |
| "-z", text, | |
| "chat", | |
| "--cli" | |
| ] | |
| result = subprocess.run(cmd, capture_output=True, text=True, env=my_env) | |
| reply = result.stdout.strip() | |
| err_reply = result.stderr.strip() | |
| if err_reply: | |
| log(f"⚠️ Лог Гермеса (stderr): {err_reply}") | |
| if not reply: | |
| reply = err_reply | |
| if reply: | |
| log(f"📤 Ответ получен: {len(reply)} симв.") | |
| send_tg(chat_id, reply[-4000:]) | |
| else: | |
| log("❓ Гермес вернул пустоту.") | |
| send_tg(chat_id, "✅ Пустой ответ от Гермеса.") | |
| except Exception as e: | |
| error_trace = traceback.format_exc() | |
| log(f"❌ ОШИБКА:\n{error_trace}") | |
| send_tg(chat_id, f"❌ Системная ошибка: {e}") | |
| def do_GET(self): | |
| self.send_response(200) | |
| self.end_headers() | |
| self.wfile.write(b"Server Online") | |
| if __name__ == "__main__": | |
| log(f"🚀 Starting Hermes Webhook Bridge on port {PORT}") | |
| HTTPServer(('0.0.0.0', PORT), WebhookHandler).serve_forever() | |