Update main.py
Browse files
main.py
CHANGED
|
@@ -151,7 +151,7 @@ app = Flask(__name__)
|
|
| 151 |
|
| 152 |
@app.route('/')
|
| 153 |
def home():
|
| 154 |
-
return "ربات یکپارچه آلفا (نسخه پرو + مدیریت اشتراک
|
| 155 |
|
| 156 |
def run_flask():
|
| 157 |
app.run(host="0.0.0.0", port=7860)
|
|
@@ -447,9 +447,10 @@ async def process_gemini(client, chat_id, prompt, file_bytes=None, file_name=Non
|
|
| 447 |
await send_with_keyboard(client, chat_id, "❌ متأسفانه پاسخی دریافت نشد. (شاید سایز فایل بیش از حد مجاز بوده است)", False)
|
| 448 |
return
|
| 449 |
|
| 450 |
-
# کسر اعتبار در دیتاست
|
| 451 |
-
|
| 452 |
-
|
|
|
|
| 453 |
|
| 454 |
history.append({"role": "model", "parts": [{"text": final_answer}]})
|
| 455 |
user_states[chat_id]["history"] = history
|
|
@@ -537,7 +538,7 @@ async def process_image(client, chat_id, prompt):
|
|
| 537 |
|
| 538 |
if not generated_image: return await send_with_keyboard(client, chat_id, f"❌ عکس ساخته نشد.\n\n⚠️ خطا:\n{last_error_log[:200]}", True)
|
| 539 |
|
| 540 |
-
# کسر اعتبار
|
| 541 |
user_credits_db[str_chat_id]["image"] -= 1
|
| 542 |
save_db(user_credits_db)
|
| 543 |
|
|
@@ -593,7 +594,7 @@ async def process_image_edit(client, chat_id, image_bytes, prompt):
|
|
| 593 |
if not generated_image:
|
| 594 |
return await send_with_keyboard(client, chat_id, f"❌ متأسفانه ویرایش عکس انجام نشد.\n\n⚠️ علت:\n{last_error_log[:200]}", True)
|
| 595 |
|
| 596 |
-
# کسر اعتبار
|
| 597 |
user_credits_db[str_chat_id]["edit_image"] -= 1
|
| 598 |
save_db(user_credits_db)
|
| 599 |
|
|
@@ -648,9 +649,10 @@ async def process_tts(client, chat_id, user_text, speaker_id, speaker_name):
|
|
| 648 |
except Exception: pass
|
| 649 |
|
| 650 |
if audio_bytes:
|
| 651 |
-
# کسر اعتبار در دیتاست
|
| 652 |
-
|
| 653 |
-
|
|
|
|
| 654 |
|
| 655 |
file_name = f"audio_{random.randint(1000, 999999)}.mp3"
|
| 656 |
with open(file_name, "wb") as f: f.write(audio_bytes)
|
|
@@ -732,9 +734,10 @@ async def process_podcast(client, chat_id, prompt):
|
|
| 732 |
combined_audio += audio_segment
|
| 733 |
except Exception as e: return await send_with_keyboard(client, chat_id, f"❌ خطا در پردازش صدا (آیا pydub و ffmpeg نصب است؟):\n{str(e)}", True)
|
| 734 |
|
| 735 |
-
# کسر اعتبار در دیتاست
|
| 736 |
-
|
| 737 |
-
|
|
|
|
| 738 |
|
| 739 |
file_name = f"final_podcast_{random.randint(1000, 999999)}.mp3"
|
| 740 |
combined_audio.export(file_name, format="mp3")
|
|
@@ -791,9 +794,10 @@ async def process_stt(client, chat_id, audio_bytes, file_name):
|
|
| 791 |
except Exception: pass
|
| 792 |
|
| 793 |
if transcribed_text:
|
| 794 |
-
# کسر اعتبار در دیتاست
|
| 795 |
-
|
| 796 |
-
|
|
|
|
| 797 |
await send_with_keyboard(client, chat_id, f"📝 **متن استخراج شده:**\n\n{transcribed_text}", True)
|
| 798 |
else:
|
| 799 |
await send_with_keyboard(client, chat_id, f"❌ تبدیل فایل به متن ناموفق بود.", True)
|
|
@@ -837,9 +841,10 @@ async def process_file_analysis(client, chat_id, file_bytes, file_name, prompt):
|
|
| 837 |
except Exception: pass
|
| 838 |
|
| 839 |
if final_answer:
|
| 840 |
-
# کسر اعتبار در دیتاست
|
| 841 |
-
|
| 842 |
-
|
|
|
|
| 843 |
await send_with_keyboard(client, chat_id, f"💡 **نتیجه تحلیل:**\n\n{final_answer}", True)
|
| 844 |
else:
|
| 845 |
await send_with_keyboard(client, chat_id, "❌ پاسخی دریافت نشد.", True)
|
|
@@ -934,21 +939,21 @@ else:
|
|
| 934 |
expire_time = datetime.datetime.now() + datetime.timedelta(days=30)
|
| 935 |
user_credits_db[target_id]["expire_date"] = expire_time.isoformat()
|
| 936 |
|
| 937 |
-
# شارژ اعتبار
|
| 938 |
-
user_credits_db[target_id]["chat"] =
|
| 939 |
user_credits_db[target_id]["image"] = 20
|
| 940 |
user_credits_db[target_id]["edit_image"] = 10
|
| 941 |
-
user_credits_db[target_id]["podcast"] =
|
| 942 |
-
user_credits_db[target_id]["tts"] =
|
| 943 |
-
user_credits_db[target_id]["file"] =
|
| 944 |
-
user_credits_db[target_id]["stt"] =
|
| 945 |
|
| 946 |
save_db(user_credits_db)
|
| 947 |
await send_with_keyboard(client, chat_id, f"✅ حساب کاربر `{target_id}` به مدت ۳۰ روز شارژ شد و به پرو ارتقا یافت.", False)
|
| 948 |
|
| 949 |
# ارسال پیام اطلاعرسانی به خود کاربر هدف
|
| 950 |
try:
|
| 951 |
-
await send_with_keyboard(client, target_id, "🎉 **کاربر گرامی، تبریک!**\n\nحساب شما با موفقیت توسط پشتیبانی به **🌟 نسخه پرو (ویژه)** ارتقا یافت.\nهماکنون بستههای یکماهه شما فعال گردید.\n\nجهت مشاهده جزئیات روی دکمه «حساب کاربری 👤» کلیک کنید.", True)
|
| 952 |
except Exception as e:
|
| 953 |
print(f"Failed to notify target user: {e}")
|
| 954 |
|
|
@@ -1004,7 +1009,7 @@ else:
|
|
| 1004 |
await send_with_keyboard(client, chat_id, "سلام! به ربات هوشمند آلفا خوش آمدید 🤖\n\nلطفاً برای شروع، از کیبورد پایین یکی از بخشها را انتخاب کنید:", True)
|
| 1005 |
return
|
| 1006 |
|
| 1007 |
-
# --- حساب کاربری
|
| 1008 |
if user_text_str in ["/account", "حساب کاربری 👤"]:
|
| 1009 |
creds = get_user_credits(chat_id)
|
| 1010 |
is_prem = creds.get("is_premium", False)
|
|
@@ -1020,47 +1025,59 @@ else:
|
|
| 1020 |
status_text = "🥉 نسخه رایگان (آزمایشی)"
|
| 1021 |
daily_note = "*سهمیه شما هر روز ساعت ۰۰:۰۰ بامداد به صورت خودکار مجدداً شارژ میگردد.*"
|
| 1022 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1023 |
account_profile = f"""👤 **اطلاعات حساب کاربری شما**
|
| 1024 |
|
| 1025 |
🔹 **شناسه یکتا:** `{chat_id}`
|
| 1026 |
🔹 **وضعیت اشتراک:** {status_text}
|
| 1027 |
|
| 1028 |
📊 **سهمیه باقیمانده شما:**
|
| 1029 |
-
- 💬 چت هوشمند: {
|
| 1030 |
-
- 🎨 ساخت عکس: {
|
| 1031 |
-
- 🪄 ویرایش عکس پیشرفته: {
|
| 1032 |
-
- 🎙 ساخت پادکست: {
|
| 1033 |
-
- 🗣 تبدیل متن به صدا: {
|
| 1034 |
-
- 📁 تحلیل فایل: {
|
| 1035 |
-
- 📝 تبدیل صدا به متن: {
|
| 1036 |
|
| 1037 |
{daily_note}"""
|
| 1038 |
await send_with_keyboard(client, chat_id, account_profile, True)
|
| 1039 |
return
|
| 1040 |
|
| 1041 |
-
# --- خرید اشتراک
|
| 1042 |
if user_text_str in ["/buy", "خرید اشتراک 💎"]:
|
| 1043 |
buy_text = f"""💎 **خرید اشتراک ویژه آلفا پرو (یک ماهه)**
|
| 1044 |
|
| 1045 |
با تهیه اشتراک ویژه، محدودیتها را کنار بزنید و از نهایت قدرت هوش مصنوعی لذت ببرید! 🚀
|
| 1046 |
|
| 1047 |
🎁 **بسته طلایی یکماهه شامل:**
|
| 1048 |
-
|
| 1049 |
-
|
| 1050 |
-
|
| 1051 |
-
|
| 1052 |
-
|
| 1053 |
-
|
| 1054 |
-
|
|
|
|
| 1055 |
|
| 1056 |
-
💳 **هزینه اشتراک یک ماهه:**
|
| 1057 |
|
| 1058 |
💳 **شماره کارت جهت واریز:**
|
| 1059 |
`6104338667771394`
|
| 1060 |
👤 **به نام:** کوهی
|
| 1061 |
|
| 1062 |
✅ **نحوه فعالسازی:**
|
| 1063 |
-
پس از واریز مبلغ، لطفاً رسید پرداختی را به همراه **شناسه یکتای خود** (که در پایین آمده) به آیدی پشتیبانی زیر ارسال کنید تا اشتراک شما ف
|
| 1064 |
|
| 1065 |
🔑 **شناسه یکتای شما:** `{chat_id}`
|
| 1066 |
|
|
@@ -1069,17 +1086,17 @@ else:
|
|
| 1069 |
await send_with_keyboard(client, chat_id, buy_text, True)
|
| 1070 |
return
|
| 1071 |
|
| 1072 |
-
# --- انتقال اکانت ---
|
| 1073 |
if user_text_str in ["/transfer", "انتقال اکانت از برنامه به ربات"]:
|
| 1074 |
transfer_text = f"""🔄 **انتقال اکانت از برنامه به ربات**
|
| 1075 |
|
| 1076 |
کاربر گرامی، در صورتی که داخل برنامه «هوش مصنوعی آلفا» پیشتر اشتراک تهیه کردهاید، نیازی به خرید مجدد اشتراک داخل ربات نیست! 🎉
|
| 1077 |
|
| 1078 |
-
کافیست **شناسه یکتای** ربات روبیکای خود را کپی کرده و برای پشتیبانی ما ارسال کنید تا اکانت اشتراکی شما به سرعت از برنامه به ربات روبیکا انتقال داده شود.
|
| 1079 |
|
| 1080 |
🔑 **شناسه یکتای ربات شما:** `{chat_id}`
|
| 1081 |
|
| 1082 |
-
👨💻 **
|
| 1083 |
🆔 @H_a_m_e_d100"""
|
| 1084 |
await send_with_keyboard(client, chat_id, transfer_text, True)
|
| 1085 |
return
|
|
|
|
| 151 |
|
| 152 |
@app.route('/')
|
| 153 |
def home():
|
| 154 |
+
return "ربات یکپارچه آلفا (نسخه پرو + مدیریت اشتراک نامحدود + دیتاست) روشن است! 🚀"
|
| 155 |
|
| 156 |
def run_flask():
|
| 157 |
app.run(host="0.0.0.0", port=7860)
|
|
|
|
| 447 |
await send_with_keyboard(client, chat_id, "❌ متأسفانه پاسخی دریافت نشد. (شاید سایز فایل بیش از حد مجاز بوده است)", False)
|
| 448 |
return
|
| 449 |
|
| 450 |
+
# کسر اعتبار در دیتاست (اگر نامحدود نیست)
|
| 451 |
+
if not creds.get("is_premium"):
|
| 452 |
+
user_credits_db[str_chat_id]["chat"] -= 1
|
| 453 |
+
save_db(user_credits_db)
|
| 454 |
|
| 455 |
history.append({"role": "model", "parts": [{"text": final_answer}]})
|
| 456 |
user_states[chat_id]["history"] = history
|
|
|
|
| 538 |
|
| 539 |
if not generated_image: return await send_with_keyboard(client, chat_id, f"❌ عکس ساخته نشد.\n\n⚠️ خطا:\n{last_error_log[:200]}", True)
|
| 540 |
|
| 541 |
+
# کسر اعتبار (ساخت عکس محدود است حتی برای پرو)
|
| 542 |
user_credits_db[str_chat_id]["image"] -= 1
|
| 543 |
save_db(user_credits_db)
|
| 544 |
|
|
|
|
| 594 |
if not generated_image:
|
| 595 |
return await send_with_keyboard(client, chat_id, f"❌ متأسفانه ویرایش عکس انجام نشد.\n\n⚠️ علت:\n{last_error_log[:200]}", True)
|
| 596 |
|
| 597 |
+
# کسر اعتبار (ویرایش عکس محدود است حتی برای پرو)
|
| 598 |
user_credits_db[str_chat_id]["edit_image"] -= 1
|
| 599 |
save_db(user_credits_db)
|
| 600 |
|
|
|
|
| 649 |
except Exception: pass
|
| 650 |
|
| 651 |
if audio_bytes:
|
| 652 |
+
# کسر اعتبار در دیتاست (اگر نامحدود نیست)
|
| 653 |
+
if not creds.get("is_premium"):
|
| 654 |
+
user_credits_db[str_chat_id]["tts"] -= 1
|
| 655 |
+
save_db(user_credits_db)
|
| 656 |
|
| 657 |
file_name = f"audio_{random.randint(1000, 999999)}.mp3"
|
| 658 |
with open(file_name, "wb") as f: f.write(audio_bytes)
|
|
|
|
| 734 |
combined_audio += audio_segment
|
| 735 |
except Exception as e: return await send_with_keyboard(client, chat_id, f"❌ خطا در پردازش صدا (آیا pydub و ffmpeg نصب است؟):\n{str(e)}", True)
|
| 736 |
|
| 737 |
+
# کسر اعتبار در دیتاست (اگر نامحدود نیست)
|
| 738 |
+
if not creds.get("is_premium"):
|
| 739 |
+
user_credits_db[str_chat_id]["podcast"] -= 1
|
| 740 |
+
save_db(user_credits_db)
|
| 741 |
|
| 742 |
file_name = f"final_podcast_{random.randint(1000, 999999)}.mp3"
|
| 743 |
combined_audio.export(file_name, format="mp3")
|
|
|
|
| 794 |
except Exception: pass
|
| 795 |
|
| 796 |
if transcribed_text:
|
| 797 |
+
# کسر اعتبار در دیتاست (اگر نامحدود نیست)
|
| 798 |
+
if not creds.get("is_premium"):
|
| 799 |
+
user_credits_db[str_chat_id]["stt"] -= 1
|
| 800 |
+
save_db(user_credits_db)
|
| 801 |
await send_with_keyboard(client, chat_id, f"📝 **متن استخراج شده:**\n\n{transcribed_text}", True)
|
| 802 |
else:
|
| 803 |
await send_with_keyboard(client, chat_id, f"❌ تبدیل فایل به متن ناموفق بود.", True)
|
|
|
|
| 841 |
except Exception: pass
|
| 842 |
|
| 843 |
if final_answer:
|
| 844 |
+
# کسر اعتبار در دیتاست (اگر نامحدود نیست)
|
| 845 |
+
if not creds.get("is_premium"):
|
| 846 |
+
user_credits_db[str_chat_id]["file"] -= 1
|
| 847 |
+
save_db(user_credits_db)
|
| 848 |
await send_with_keyboard(client, chat_id, f"💡 **نتیجه تحلیل:**\n\n{final_answer}", True)
|
| 849 |
else:
|
| 850 |
await send_with_keyboard(client, chat_id, "❌ پاسخی دریافت نشد.", True)
|
|
|
|
| 939 |
expire_time = datetime.datetime.now() + datetime.timedelta(days=30)
|
| 940 |
user_credits_db[target_id]["expire_date"] = expire_time.isoformat()
|
| 941 |
|
| 942 |
+
# شارژ اعتبار پرو (فقط برای عکس و ویرایش محدودیت گذاشته شده، بقیه ۹۹۹۹۹۹ است)
|
| 943 |
+
user_credits_db[target_id]["chat"] = 999999
|
| 944 |
user_credits_db[target_id]["image"] = 20
|
| 945 |
user_credits_db[target_id]["edit_image"] = 10
|
| 946 |
+
user_credits_db[target_id]["podcast"] = 999999
|
| 947 |
+
user_credits_db[target_id]["tts"] = 999999
|
| 948 |
+
user_credits_db[target_id]["file"] = 999999
|
| 949 |
+
user_credits_db[target_id]["stt"] = 999999
|
| 950 |
|
| 951 |
save_db(user_credits_db)
|
| 952 |
await send_with_keyboard(client, chat_id, f"✅ حساب کاربر `{target_id}` به مدت ۳۰ روز شارژ شد و به پرو ارتقا یافت.", False)
|
| 953 |
|
| 954 |
# ارسال پیام اطلاعرسانی به خود کاربر هدف
|
| 955 |
try:
|
| 956 |
+
await send_with_keyboard(client, target_id, "🎉 **کاربر گرامی، تبریک!**\n\nحساب شما با موفقیت توسط پشتیبانی به **🌟 نسخه پرو (ویژه)** ارتقا یافت.\nهماکنون بستههای نامحدود و طلایی یکماهه شما فعال گردید.\n\nجهت مشاهده جزئیات روی دکمه «حساب کاربری 👤» کلیک کنید.", True)
|
| 957 |
except Exception as e:
|
| 958 |
print(f"Failed to notify target user: {e}")
|
| 959 |
|
|
|
|
| 1009 |
await send_with_keyboard(client, chat_id, "سلام! به ربات هوشمند آلفا خوش آمدید 🤖\n\nلطفاً برای شروع، از کیبورد پایین یکی از بخشها را انتخاب کنید:", True)
|
| 1010 |
return
|
| 1011 |
|
| 1012 |
+
# --- حساب کاربری (با جایگذاری نامحدود) ---
|
| 1013 |
if user_text_str in ["/account", "حساب کاربری 👤"]:
|
| 1014 |
creds = get_user_credits(chat_id)
|
| 1015 |
is_prem = creds.get("is_premium", False)
|
|
|
|
| 1025 |
status_text = "🥉 نسخه رایگان (آزمایشی)"
|
| 1026 |
daily_note = "*سهمیه شما هر روز ساعت ۰۰:۰۰ بامداد به صورت خودکار مجدداً شارژ میگردد.*"
|
| 1027 |
|
| 1028 |
+
# استفاده از عبارت نامحدود برای کاربران پرو
|
| 1029 |
+
chat_rem = "نامحدود ∞" if is_prem else creds['chat']
|
| 1030 |
+
podcast_rem = "نامحدود ∞" if is_prem else creds['podcast']
|
| 1031 |
+
tts_rem = "نامحدود ∞" if is_prem else creds['tts']
|
| 1032 |
+
file_rem = "نامحدود ∞" if is_prem else creds['file']
|
| 1033 |
+
stt_rem = "نامحدود ∞" if is_prem else creds['stt']
|
| 1034 |
+
|
| 1035 |
+
# برای عکسها همان تعداد را نشان میدهیم
|
| 1036 |
+
image_rem = creds['image']
|
| 1037 |
+
edit_image_rem = creds['edit_image']
|
| 1038 |
+
|
| 1039 |
account_profile = f"""👤 **اطلاعات حساب کاربری شما**
|
| 1040 |
|
| 1041 |
🔹 **شناسه یکتا:** `{chat_id}`
|
| 1042 |
🔹 **وضعیت اشتراک:** {status_text}
|
| 1043 |
|
| 1044 |
📊 **سهمیه باقیمانده شما:**
|
| 1045 |
+
- 💬 چت هوشمند: {chat_rem}
|
| 1046 |
+
- 🎨 ساخت عکس: {image_rem} تصویر
|
| 1047 |
+
- 🪄 ویرایش عکس پیشرفته: {edit_image_rem} تصویر
|
| 1048 |
+
- 🎙 ساخت پادکست: {podcast_rem}
|
| 1049 |
+
- 🗣 تبدیل متن به صدا: {tts_rem}
|
| 1050 |
+
- 📁 تحلیل فایل: {file_rem}
|
| 1051 |
+
- 📝 تبدیل صدا به متن: {stt_rem}
|
| 1052 |
|
| 1053 |
{daily_note}"""
|
| 1054 |
await send_with_keyboard(client, chat_id, account_profile, True)
|
| 1055 |
return
|
| 1056 |
|
| 1057 |
+
# --- دکمه جدید: خرید اشتراک (نامحدود شدن بخشها) ---
|
| 1058 |
if user_text_str in ["/buy", "خرید اشتراک 💎"]:
|
| 1059 |
buy_text = f"""💎 **خرید اشتراک ویژه آلفا پرو (یک ماهه)**
|
| 1060 |
|
| 1061 |
با تهیه اشتراک ویژه، محدودیتها را کنار بزنید و از نهایت قدرت هوش مصنوعی لذت ببرید! 🚀
|
| 1062 |
|
| 1063 |
🎁 **بسته طلایی یکماهه شامل:**
|
| 1064 |
+
🤖 چت با هوش مصنوعی بصورت نامحدود
|
| 1065 |
+
🗣 تبدیل متن به صدا بصورت نامحدود با ۳۰ گوینده
|
| 1066 |
+
🎙 ساخت پادکست بصورت نامحدود
|
| 1067 |
+
|
| 1068 |
+
🪄 ۱۰ ویرایش تصویر
|
| 1069 |
+
🎨 ۲۰ تولید تصویر
|
| 1070 |
+
📁 تحلیل نامحدود فایل و سند
|
| 1071 |
+
📝 تبدیل فایل صوتی به متن نامحدود
|
| 1072 |
|
| 1073 |
+
💳 **هزینه اشتراک یک ماهه:** ۲۵۰ هزار تومان
|
| 1074 |
|
| 1075 |
💳 **شماره کارت جهت واریز:**
|
| 1076 |
`6104338667771394`
|
| 1077 |
👤 **به نام:** کوهی
|
| 1078 |
|
| 1079 |
✅ **نحوه فعالسازی:**
|
| 1080 |
+
پس از واریز مبلغ، لطفاً رسید پرداختی را به همراه **شناسه یکتای خود** (که در پایین آمده) به آیدی پشتیبانی زیر ارسال کنید تا اشتراک شما فعال گردد:
|
| 1081 |
|
| 1082 |
🔑 **شناسه یکتای شما:** `{chat_id}`
|
| 1083 |
|
|
|
|
| 1086 |
await send_with_keyboard(client, chat_id, buy_text, True)
|
| 1087 |
return
|
| 1088 |
|
| 1089 |
+
# --- دکمه انتقال اکانت ---
|
| 1090 |
if user_text_str in ["/transfer", "انتقال اکانت از برنامه به ربات"]:
|
| 1091 |
transfer_text = f"""🔄 **انتقال اکانت از برنامه به ربات**
|
| 1092 |
|
| 1093 |
کاربر گرامی، در صورتی که داخل برنامه «هوش مصنوعی آلفا» پیشتر اشتراک تهیه کردهاید، نیازی به خرید مجدد اشتراک داخل ربات نیست! 🎉
|
| 1094 |
|
| 1095 |
+
کافیست **شناسه یکتای** ربات روبیکای خود را کپی کرده و برای پشتیبانی ما در برنامه هوش مصنوعی آلفا ارسال کنید تا اکانت اشتراکی شما به سرعت از برنامه به ربات روبیکا انتقال داده شود.
|
| 1096 |
|
| 1097 |
🔑 **شناسه یکتای ربات شما:** `{chat_id}`
|
| 1098 |
|
| 1099 |
+
👨💻 **دقت کنید شناسه ربات رو به پشتیبانی داخل خود برنامه هوش مصنوعی آلفا ارسال کنید:**
|
| 1100 |
🆔 @H_a_m_e_d100"""
|
| 1101 |
await send_with_keyboard(client, chat_id, transfer_text, True)
|
| 1102 |
return
|