myspace / app.py
Abde2207's picture
Update app.py
238c3dd verified
import os
import telebot
import google.generativeai as genai
from flask import Flask
from threading import Thread
import time
# --- 1. إعداد خادم الويب للبقاء مستيقظاً (Flask) ---
app = Flask('')
@app.route('/')
def home():
return "البوت يعمل بنجاح وهو مستيقظ 24/7!"
def run_flask():
# المنفذ 7860 هو الافتراضي لـ Hugging Face
try:
app.run(host='0.0.0.0', port=7860)
except Exception as e:
print(f"Flask Error: {e}")
def keep_alive():
t = Thread(target=run_flask)
t.daemon = True
t.start()
# --- 2. جلب المتغيرات (Secrets) ---
TELEGRAM_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN", "").strip()
GEMINI_KEY = os.getenv("GEMINI_API_KEY", "").strip()
# التحقق من وجود القيم
if not TELEGRAM_TOKEN or ":" not in TELEGRAM_TOKEN:
print("خطأ: يرجى التأكد من إضافة TELEGRAM_BOT_TOKEN في Secrets بشكل صحيح.")
elif not GEMINI_KEY:
print("خطأ: يرجى إضافة GEMINI_API_KEY في Secrets.")
else:
# إعداد Gemini
genai.configure(api_key=GEMINI_KEY)
model = genai.GenerativeModel('gemini-pro')
# إعداد Telegram Bot مع تفعيل خاصية threaded=False لاستقرار أفضل على الاستضافات المجانية
bot = telebot.TeleBot(TELEGRAM_TOKEN, threaded=False)
# --- 3. أوامر البوت ---
@bot.message_handler(commands=['start'])
def welcome(message):
bot.reply_to(message, "مرحباً! أنا بوت ذكاء اصطناعي مطور. أرسل لي أي شيء وسأجيبك باستخدام Gemini.")
@bot.message_handler(func=lambda message: True)
def handle_message(message):
try:
response = model.generate_content(message.text)
bot.reply_to(message, response.text)
except Exception as e:
print(f"Gemini Error: {e}")
bot.reply_to(message, "عذراً، حدث خطأ بسيط. جرب إرسال الرسالة مرة أخرى.")
# --- 4. التشغيل النهائي مع معالجة أخطاء الشبكة ---
if __name__ == "__main__":
keep_alive()
print("جاري تشغيل النظام...")
while True:
try:
if TELEGRAM_TOKEN and ":" in TELEGRAM_TOKEN:
print("تم بدء تشغيل بوت تليجرام...")
# infinity_polling ستحاول إعادة الاتصال تلقائياً عند حدوث مشاكل في الشبكة
bot.infinity_polling(timeout=20, long_polling_timeout=10)
else:
break
except Exception as e:
print(f"Connection Error: {e}. سأحاول إعادة الاتصال خلال 5 ثوانٍ...")
time.sleep(5)