Opera8 commited on
Commit
2292154
·
verified ·
1 Parent(s): 59de54f

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +80 -14
main.py CHANGED
@@ -2,23 +2,83 @@ import os
2
  import threading
3
  import random
4
  import aiohttp
 
5
  import traceback
6
  import asyncio
7
- from flask import Flask
8
  from rubpy.bot import BotClient, filters
9
 
10
- # --- تنظیمات وب سرور ---
 
 
11
  app = Flask(__name__)
12
 
 
 
 
13
  @app.route('/')
14
  def home():
15
- return "ربات روبیکا (منوی هوشمند) روشن است! 🚀"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  def run_flask():
18
- app.run(host="0.0.0.0", port=7860)
 
 
19
 
 
 
 
20
 
21
- # --- لیست تمام سرورهای تولید صدای شما ---
22
  WORKER_URLS =[
23
  "https://hamed744-ttspro.hf.space/generate",
24
  "https://hamed744-ttspro2.hf.space/generate",
@@ -31,7 +91,7 @@ WORKER_URLS =[
31
  "https://hamed744-ttspro9.hf.space/generate",
32
  ]
33
 
34
- # --- دیکشنری ۳۰ گوینده ---
35
  SPEAKERS = {
36
  "1": ("شهاب (مرد)", "Charon"), "2": ("آوا (زن)", "Zephyr"), "3": ("نوید (مرد)", "Achird"),
37
  "4": ("آرمان (مرد)", "Zubenelgenubi"), "5": ("مهسا (زن)", "Vindemiatrix"), "6": ("دانا (مرد)", "Rasalgethi"),
@@ -48,7 +108,7 @@ SPEAKERS = {
48
  # دیکشنری برای ذخیره موقت متن کاربر
49
  user_states = {}
50
 
51
- # --- پردازش و ساخت صدا در پس‌زمینه ---
52
  async def process_tts(client, chat_id, user_text, speaker_id, speaker_name):
53
  try:
54
  await client.send_message(chat_id, f"⏳ در حال ساخت صدا با گوینده «{speaker_name}»...\n(لطفاً چند ثانیه صبور باشید)")
@@ -109,12 +169,10 @@ async def process_tts(client, chat_id, user_text, speaker_id, speaker_name):
109
  traceback.print_exc()
110
 
111
 
112
- # --- تنظیمات ربات روبیکا ---
113
  bot_token = os.environ.get("RUBIKA_AUTH", "").strip()
114
 
115
- if not bot_token:
116
- print("خطا: توکن وارد نشده است!")
117
- else:
118
  bot = BotClient(bot_token)
119
 
120
  @bot.on_update(filters.private)
@@ -139,7 +197,7 @@ else:
139
  user_text_str = str(user_text).strip()
140
 
141
  # پیام خوشامدگویی
142
- if user_text_str in ["/start", "سلام"]:
143
  welcome_text = "سلام! 🎙️\nمن ربات هوش مصنوعی تبدیل متن به صدا هستم.\n\nهر متنی که دوست داری رو برام بفرست تا با ده‌ها گوینده مختلف برات بخونمش!"
144
  await update.reply(welcome_text)
145
  return
@@ -186,12 +244,20 @@ else:
186
  await update.reply(menu_text)
187
 
188
  except Exception as e:
189
- print(f"خطای کلی سیستم: {e}")
190
  traceback.print_exc()
 
 
 
191
 
 
 
 
192
  if __name__ == "__main__":
 
193
  threading.Thread(target=run_flask, daemon=True).start()
194
 
 
195
  if bot_token:
196
- print("ربات تبدیل متن به صدا روشن شد...")
197
  bot.run()
 
2
  import threading
3
  import random
4
  import aiohttp
5
+ import requests
6
  import traceback
7
  import asyncio
8
+ from flask import Flask, request, Response
9
  from rubpy.bot import BotClient, filters
10
 
11
+ # ====================================================================
12
+ # 🌐 بخش اول: تنظیمات وب‌سرور FLASK و تونل (پروکسی) برای دور زدن فیلترینگ
13
+ # ====================================================================
14
  app = Flask(__name__)
15
 
16
+ HF_PODCAST_URL = "https://ezmarynoori-podgen.hf.space"
17
+ HF_SADA_URL = "https://ezmarynoori-sada.hf.space"
18
+
19
  @app.route('/')
20
  def home():
21
+ return "ربات روبیکا و سرور پراکسی Ai Sada روشن و فعال است! 🚀"
22
+
23
+ # این روت تمام درخواست‌های سایت شما را می‌گیرد و به هاگینگ فیس می‌فرستد
24
+ @app.route('/proxy/<target>/<path:subpath>', methods=['GET', 'POST'])
25
+ def proxy_hub(target, subpath):
26
+ # تشخیص سرور هدف
27
+ if target == 'podcast':
28
+ base_url = HF_PODCAST_URL
29
+ elif target == 'sada':
30
+ base_url = HF_SADA_URL
31
+ else:
32
+ return "Invalid target", 400
33
+
34
+ url = f"{base_url}/{subpath}"
35
+
36
+ # انتقال هدرهای امنیتی (فقط هدرهایی که خودمان برای امنیت تعریف کردیم)
37
+ headers = {
38
+ 'X-App-Auth': request.headers.get('X-App-Auth', ''),
39
+ 'X-CSRF-Token': request.headers.get('X-CSRF-Token', ''),
40
+ }
41
+
42
+ # اگر درخواست JSON بود، هدر Content-Type را تنظیم می‌کنیم
43
+ if request.is_json:
44
+ headers['Content-Type'] = 'application/json'
45
+
46
+ # حذف هدرهای خالی
47
+ headers = {k: v for k, v in headers.items() if v}
48
+
49
+ try:
50
+ if request.method == 'POST':
51
+ # بررسی اینکه آیا فایل صوتی در درخواست آپلود شده است (مثل بخش کلون صدا)
52
+ if request.files:
53
+ files = {k: (v.filename, v.stream, v.mimetype) for k, v in request.files.items()}
54
+ res = requests.post(url, data=request.form, files=files, headers=headers)
55
+ else:
56
+ # درخواست های معمولی (JSON)
57
+ res = requests.post(url, data=request.get_data(), headers=headers)
58
+ else:
59
+ # درخواست های GET (مثل دانلود فایل)
60
+ res = requests.get(url, params=request.args, headers=headers)
61
+
62
+ # برگرداندن پاسخ هاگینگ فیس مستقیما به سایت (بدون تغییر)
63
+ return Response(
64
+ res.content,
65
+ status=res.status_code,
66
+ content_type=res.headers.get('Content-Type', 'application/json')
67
+ )
68
+ except Exception as e:
69
+ print(f"Proxy Error: {e}")
70
+ return str(e), 500
71
 
72
  def run_flask():
73
+ # اجرای وب سرور در پس‌زمینه
74
+ app.run(host="0.0.0.0", port=7860, threaded=True)
75
+
76
 
77
+ # ====================================================================
78
+ # 🤖 بخش دوم: تنظیمات ربات روبیکا (تولید صدای مستقیم برای کاربران داخلی)
79
+ # ====================================================================
80
 
81
+ # سرورهای تولید صدای ربات
82
  WORKER_URLS =[
83
  "https://hamed744-ttspro.hf.space/generate",
84
  "https://hamed744-ttspro2.hf.space/generate",
 
91
  "https://hamed744-ttspro9.hf.space/generate",
92
  ]
93
 
94
+ # لیست گویندگان
95
  SPEAKERS = {
96
  "1": ("شهاب (مرد)", "Charon"), "2": ("آوا (زن)", "Zephyr"), "3": ("نوید (مرد)", "Achird"),
97
  "4": ("آرمان (مرد)", "Zubenelgenubi"), "5": ("مهسا (زن)", "Vindemiatrix"), "6": ("دانا (مرد)", "Rasalgethi"),
 
108
  # دیکشنری برای ذخیره موقت متن کاربر
109
  user_states = {}
110
 
111
+ # پردازش و ساخت صدا در پس‌زمینه (برای ربات)
112
  async def process_tts(client, chat_id, user_text, speaker_id, speaker_name):
113
  try:
114
  await client.send_message(chat_id, f"⏳ در حال ساخت صدا با گوینده «{speaker_name}»...\n(لطفاً چند ثانیه صبور باشید)")
 
169
  traceback.print_exc()
170
 
171
 
172
+ # راه‌اندازی ربات روبیکا
173
  bot_token = os.environ.get("RUBIKA_AUTH", "").strip()
174
 
175
+ if bot_token:
 
 
176
  bot = BotClient(bot_token)
177
 
178
  @bot.on_update(filters.private)
 
197
  user_text_str = str(user_text).strip()
198
 
199
  # پیام خوشامدگویی
200
+ if user_text_str in["/start", "سلام"]:
201
  welcome_text = "سلام! 🎙️\nمن ربات هوش مصنوعی تبدیل متن به صدا هستم.\n\nهر متنی که دوست داری رو برام بفرست تا با ده‌ها گوینده مختلف برات بخونمش!"
202
  await update.reply(welcome_text)
203
  return
 
244
  await update.reply(menu_text)
245
 
246
  except Exception as e:
247
+ print(f"خطای کلی ربات: {e}")
248
  traceback.print_exc()
249
+ else:
250
+ print("خطا: توکن RUBIKA_AUTH تنظیم نشده است!")
251
+
252
 
253
+ # ====================================================================
254
+ # 🚀 اجرای همزمان Flask و Rubika Bot
255
+ # ====================================================================
256
  if __name__ == "__main__":
257
+ # اجرای Flask در یک Thread مجزا
258
  threading.Thread(target=run_flask, daemon=True).start()
259
 
260
+ # اجرای ربات روبیکا در Thread اصلی
261
  if bot_token:
262
+ print("سیستم کامل شد! تونل Flask و ربات روبیکا همزمان روشن شدند...")
263
  bot.run()