Update main.py
Browse files
main.py
CHANGED
|
@@ -1958,6 +1958,7 @@ async def process_create_file(client, chat_id, topic):
|
|
| 1958 |
|
| 1959 |
# ==============================================================================
|
| 1960 |
# 🟢 پارت 20: بدنه اصلی ربات (Handler)، دستورات مدیریتی، حلقه اصلی و استارت
|
|
|
|
| 1961 |
# ==============================================================================
|
| 1962 |
# ==================================================================
|
| 1963 |
# حلقه و مدیریت اصلی ربات
|
|
@@ -2026,9 +2027,6 @@ else:
|
|
| 2026 |
if not msg_id and msg_obj:
|
| 2027 |
msg_id = msg_obj.get("message_id") if isinstance(msg_obj, dict) else getattr(msg_obj, "message_id", None)
|
| 2028 |
|
| 2029 |
-
str_chat_id = str(chat_id).replace("`", "").replace("'", "").replace('"', "").strip()
|
| 2030 |
-
creds = get_user_credits(str_chat_id)
|
| 2031 |
-
|
| 2032 |
# ===================================================================
|
| 2033 |
# 🛑 سیستم صد در صد قطعی ضد تکرار پیام با استفاده از دیتابیس ابری
|
| 2034 |
# ===================================================================
|
|
@@ -2036,758 +2034,13 @@ else:
|
|
| 2036 |
str_msg_id = str(msg_id).strip()
|
| 2037 |
if is_message_processed(str_msg_id):
|
| 2038 |
return
|
|
|
|
| 2039 |
mark_message_processed(str_msg_id)
|
|
|
|
| 2040 |
# ===================================================================
|
| 2041 |
-
|
| 2042 |
-
user_text = getattr(update, "text", "") or getattr(msg_obj, "text", "")
|
| 2043 |
-
user_text_str = str(user_text).strip() if user_text else ""
|
| 2044 |
-
user_text_lower = user_text_str.lower()
|
| 2045 |
-
|
| 2046 |
-
if is_user_spamming(str_chat_id):
|
| 2047 |
-
return
|
| 2048 |
-
|
| 2049 |
-
if str_chat_id not in user_states:
|
| 2050 |
-
user_states[str_chat_id] = {"mode": None, "text": "", "history":[], "file_bytes": None, "file_name": None, "last_time": time.time()}
|
| 2051 |
-
else:
|
| 2052 |
-
user_states[str_chat_id]["last_time"] = time.time()
|
| 2053 |
-
|
| 2054 |
-
if user_text_lower.startswith(f"{ADMIN_CODE} pro=") or user_text_lower.startswith(f"{ADMIN_CODE}pro="):
|
| 2055 |
-
parts = user_text_str.split("=", 1)
|
| 2056 |
-
if len(parts) >= 2:
|
| 2057 |
-
target_id = parts[1].replace("`", "").replace("'", "").replace('"', "").strip()
|
| 2058 |
-
if target_id:
|
| 2059 |
-
if target_id not in user_credits_db or not isinstance(user_credits_db[target_id], dict):
|
| 2060 |
-
user_credits_db[target_id] = {
|
| 2061 |
-
"is_premium": False,
|
| 2062 |
-
"expire_date": None,
|
| 2063 |
-
"last_reset": "",
|
| 2064 |
-
"chat": 10,
|
| 2065 |
-
"image": 0,
|
| 2066 |
-
"edit_image": 0,
|
| 2067 |
-
"podcast": 2,
|
| 2068 |
-
"tts": 5,
|
| 2069 |
-
"file": 1,
|
| 2070 |
-
"stt": 5,
|
| 2071 |
-
"voice_conv": 3,
|
| 2072 |
-
"voice_clone": 1,
|
| 2073 |
-
"last_msg_id": 0,
|
| 2074 |
-
"has_joined": True,
|
| 2075 |
-
"invited_count": 0,
|
| 2076 |
-
"used_referral": False,
|
| 2077 |
-
"referral_code": ""
|
| 2078 |
-
}
|
| 2079 |
-
|
| 2080 |
-
user_credits_db[target_id]["is_premium"] = True
|
| 2081 |
-
expire_time = datetime.datetime.now() + datetime.timedelta(days=30)
|
| 2082 |
-
user_credits_db[target_id]["expire_date"] = expire_time.isoformat()
|
| 2083 |
-
|
| 2084 |
-
user_credits_db[target_id]["chat"] = 999999
|
| 2085 |
-
user_credits_db[target_id]["image"] = 10
|
| 2086 |
-
user_credits_db[target_id]["edit_image"] = 5
|
| 2087 |
-
user_credits_db[target_id]["podcast"] = 999999
|
| 2088 |
-
user_credits_db[target_id]["tts"] = 999999
|
| 2089 |
-
user_credits_db[target_id]["file"] = 999999
|
| 2090 |
-
user_credits_db[target_id]["stt"] = 999999
|
| 2091 |
-
user_credits_db[target_id]["voice_conv"] = 999999
|
| 2092 |
-
user_credits_db[target_id]["voice_clone"] = 999999
|
| 2093 |
-
|
| 2094 |
-
save_db(user_credits_db)
|
| 2095 |
-
await send_with_keyboard(client, chat_id, f"✅ حساب کاربر `{target_id}` به مدت ۳۰ روز شارژ شد و به پرو ارتقا یافت.", False)
|
| 2096 |
-
try:
|
| 2097 |
-
await send_with_keyboard(client, target_id, "🎉 **کاربر گرامی، تبریک!**\n\nحساب شما با موفقیت توسط پشتیبانی به **🌟 نسخه پرو (ویژه)** ارتقا یافت.\nهماکنون بستههای نامحدود و طلایی یکماهه شما فعال گردید.\n\nجهت مشاهده جزئیات روی دکمه «حساب کاربری 👤» کلیک کنید.", True)
|
| 2098 |
-
except Exception: pass
|
| 2099 |
-
return
|
| 2100 |
-
|
| 2101 |
-
if user_text_lower.startswith(f"{ADMIN_CODE} free=") or user_text_lower.startswith(f"{ADMIN_CODE}free="):
|
| 2102 |
-
parts = user_text_str.split("=", 1)
|
| 2103 |
-
if len(parts) >= 2:
|
| 2104 |
-
target_id = parts[1].replace("`", "").replace("'", "").replace('"', "").strip()
|
| 2105 |
-
if target_id:
|
| 2106 |
-
if target_id in user_credits_db and isinstance(user_credits_db[target_id], dict):
|
| 2107 |
-
user_credits_db[target_id]["is_premium"] = False
|
| 2108 |
-
user_credits_db[target_id]["expire_date"] = None
|
| 2109 |
-
user_credits_db[target_id]["last_reset"] = ""
|
| 2110 |
-
user_credits_db[target_id]["image"] = 0
|
| 2111 |
-
user_credits_db[target_id]["edit_image"] = 0
|
| 2112 |
-
save_db(user_credits_db)
|
| 2113 |
-
await send_with_keyboard(client, chat_id, f"✅ اشتراک کاربر `{target_id}` لغو شد و به رایگان تبدیل گشت.", False)
|
| 2114 |
-
try:
|
| 2115 |
-
await send_with_keyboard(client, target_id, "⚠️ کاربر گرامی، اشتراک ویژه شما به پایان رسید و حساب شما به نسخه رایگان (آزمایشی) تغییر یافت.", True)
|
| 2116 |
-
except Exception: pass
|
| 2117 |
-
return
|
| 2118 |
-
|
| 2119 |
-
if user_text_lower.startswith(f"{ADMIN_CODE} =") or user_text_lower.startswith(f"{ADMIN_CODE}="):
|
| 2120 |
-
parts = user_text_str.split("=", 1)
|
| 2121 |
-
if len(parts) >= 2:
|
| 2122 |
-
target_id = parts[1].replace("`", "").replace("'", "").replace('"', "").strip()
|
| 2123 |
-
if target_id:
|
| 2124 |
-
if target_id in user_credits_db and isinstance(user_credits_db[target_id], dict):
|
| 2125 |
-
t_creds = user_credits_db[target_id]
|
| 2126 |
-
is_prem = t_creds.get("is_premium", False)
|
| 2127 |
-
|
| 2128 |
-
if is_prem:
|
| 2129 |
-
expire_txt = "نامشخص"
|
| 2130 |
-
days_left = 0
|
| 2131 |
-
if t_creds.get("expire_date"):
|
| 2132 |
-
exp_d = datetime.datetime.fromisoformat(t_creds["expire_date"])
|
| 2133 |
-
now = datetime.datetime.now()
|
| 2134 |
-
diff = exp_d - now
|
| 2135 |
-
days_left = diff.days if diff.days >= 0 else 0
|
| 2136 |
-
|
| 2137 |
-
jy, jm, jd = gregorian_to_jalali(exp_d.year, exp_d.month, exp_d.day)
|
| 2138 |
-
expire_txt = f"{jy:04d}/{jm:02d}/{jd:02d}"
|
| 2139 |
-
status_text = f"🌟 نسخه پرو (ویژه)\n📅 انقضا: {expire_txt}\n⏳ باقیمانده: {days_left} روز"
|
| 2140 |
-
else:
|
| 2141 |
-
status_text = "🥉 نسخه رایگان (آزمایشی)\n⏳ وضعیت: سهمیه روزانه محدود"
|
| 2142 |
-
|
| 2143 |
-
chat_rem = "نامحدود ∞" if is_prem else t_creds.get('chat', 0)
|
| 2144 |
-
vc_rem = "نامحدود ∞" if is_prem else t_creds.get('voice_conv', 0)
|
| 2145 |
-
clone_rem = "نامحدود ∞" if is_prem else t_creds.get('voice_clone', 0)
|
| 2146 |
-
podcast_rem = "نامحدود ∞" if is_prem else t_creds.get('podcast', 0)
|
| 2147 |
-
tts_rem = "نامحدود ∞" if is_prem else t_creds.get('tts', 0)
|
| 2148 |
-
file_rem = "نامحدود ∞" if is_prem else t_creds.get('file', 0)
|
| 2149 |
-
stt_rem = "نامحدود ∞" if is_prem else t_creds.get('stt', 0)
|
| 2150 |
-
image_rem = t_creds.get('image', 0)
|
| 2151 |
-
edit_image_rem = t_creds.get('edit_image', 0)
|
| 2152 |
-
invs = t_creds.get('invited_count', 0)
|
| 2153 |
-
joined_status = "بله ✅" if t_creds.get('has_joined') else "خیر ❌"
|
| 2154 |
-
|
| 2155 |
-
info_msg = f"""🔍 **اطلاعات اختصاصی کاربر:**
|
| 2156 |
-
👤 شناسه: `{target_id}`
|
| 2157 |
-
عضو کانال: {joined_status}
|
| 2158 |
-
|
| 2159 |
-
🔹 **وضعیت اشتراک:**
|
| 2160 |
-
{status_text}
|
| 2161 |
-
🎁 **تعداد افراد دعوت شده:** {invs} نفر
|
| 2162 |
-
|
| 2163 |
-
📊 **سهمیه باقیمانده فعلی:**
|
| 2164 |
-
💬 چت: {chat_rem}
|
| 2165 |
-
🎨 تولید عکس: {image_rem}
|
| 2166 |
-
🪄 ویرایش عکس: {edit_image_rem}
|
| 2167 |
-
🎙️ تغییر صدا: {vc_rem}
|
| 2168 |
-
👤 کلون کردن صدا: {clone_rem}
|
| 2169 |
-
🎙 پادکست: {podcast_rem}
|
| 2170 |
-
🗣 متن به صدا: {tts_rem}
|
| 2171 |
-
📁 تحلیل فایل: {file_rem}
|
| 2172 |
-
📝 صدا به متن: {stt_rem}"""
|
| 2173 |
-
await send_with_keyboard(client, chat_id, info_msg, False)
|
| 2174 |
-
else:
|
| 2175 |
-
await send_with_keyboard(client, chat_id, f"❌ کاربری با شناسه `{target_id}` در دیتابیس ربات یافت نشد.", False)
|
| 2176 |
-
return
|
| 2177 |
-
|
| 2178 |
-
is_file = False
|
| 2179 |
-
file_name = f"unknown_file_{uuid.uuid4().hex[:6]}.jpg"
|
| 2180 |
|
| 2181 |
-
|
| 2182 |
-
|
| 2183 |
-
file_attr = getattr(msg_obj, attr, None)
|
| 2184 |
-
if file_attr:
|
| 2185 |
-
is_file = True
|
| 2186 |
-
file_name = getattr(file_attr, 'file_name', file_name)
|
| 2187 |
-
break
|
| 2188 |
-
|
| 2189 |
-
if not is_file and hasattr(msg_obj, 'to_dict'):
|
| 2190 |
-
msg_dict = msg_obj.to_dict()
|
| 2191 |
-
for attr in['file', 'file_inline', 'photo', 'voice', 'audio', 'document', 'video']:
|
| 2192 |
-
if attr in msg_dict:
|
| 2193 |
-
is_file = True
|
| 2194 |
-
file_attr = msg_dict.get(attr, {})
|
| 2195 |
-
file_name = file_attr.get('file_name', file_name) if isinstance(file_attr, dict) else file_name
|
| 2196 |
-
break
|
| 2197 |
-
|
| 2198 |
-
if user_text_str == "✅ عضو شدم":
|
| 2199 |
-
if not creds.get("has_joined", False):
|
| 2200 |
-
user_credits_db[str_chat_id]["has_joined"] = True
|
| 2201 |
-
save_db(user_credits_db)
|
| 2202 |
-
await send_with_keyboard(client, chat_id, "🎉 **عضویت شما با موفقیت تایید شد! خیلی خوش آمدید.**\n\nحالا میتوانید از تمامی امکانات ربات استفاده کنید.\nلطفاً یکی از گزینههای منو را انتخاب کنید:", True)
|
| 2203 |
-
return
|
| 2204 |
-
else:
|
| 2205 |
-
await send_with_keyboard(client, chat_id, "✅ شما قبلاً عضو شدهاید! لطفا از منوی اصلی استفاده کنید.", True)
|
| 2206 |
-
return
|
| 2207 |
-
|
| 2208 |
-
if not creds.get("has_joined", False):
|
| 2209 |
-
join_msg = "👋 **سلام کاربر گرامی!**\n\nجهت استفاده از خدمات ربات هوش مصنوعی آلفا و مطلع شدن از آخرین آپدیتها، لطفا ابتدا در کانال رسمی ما عضو شوید:\n\n📢 **آیدی کانال:** @aialpha\n\n👇 پس از عضویت در کانال، بر روی دکمه **«✅ عضو شدم»** کلیک کنید تا ربات برای شما فعال شود."
|
| 2210 |
-
try:
|
| 2211 |
-
payload = {"chat_id": chat_id, "text": join_msg, "chat_keypad_type": "New", "chat_keypad": JOIN_KEYPAD_DICT}
|
| 2212 |
-
await client._make_request("sendMessage", payload)
|
| 2213 |
-
except Exception:
|
| 2214 |
-
await client.send_message(chat_id, join_msg)
|
| 2215 |
-
return
|
| 2216 |
-
|
| 2217 |
-
if user_text_lower.startswith("/start"):
|
| 2218 |
-
user_states[str_chat_id]["mode"] = None
|
| 2219 |
-
user_states[str_chat_id]["file_bytes"] = None
|
| 2220 |
-
await send_with_keyboard(client, chat_id, "سلام! به ربات هوش مصنوعی آلفا خوش آمدید 🤖\n\nلطفاً برای شروع، از کیبورد پایین یکی از بخشها را انتخاب کنید:", True)
|
| 2221 |
-
return
|
| 2222 |
-
|
| 2223 |
-
if user_text_str in["سلام", "لغو", "/cancel", "❌ لغو", "برگشت♻️"]:
|
| 2224 |
-
user_states[str_chat_id]["mode"] = None
|
| 2225 |
-
user_states[str_chat_id]["file_bytes"] = None
|
| 2226 |
-
await send_with_keyboard(client, chat_id, "سلام! به ربات هوش مصنوعی آلفا خوش آمدید 🤖\n\nلطفاً برای شروع، از کیبورد پایین یکی از بخشها را انتخاب کنید:", True)
|
| 2227 |
-
return
|
| 2228 |
-
|
| 2229 |
-
if user_text_str in["/account", "حساب کاربری 👤"]:
|
| 2230 |
-
is_prem = creds.get("is_premium", False)
|
| 2231 |
-
|
| 2232 |
-
if is_prem:
|
| 2233 |
-
expire_txt = "نامشخص"
|
| 2234 |
-
days_left = 0
|
| 2235 |
-
if creds.get("expire_date"):
|
| 2236 |
-
exp_d = datetime.datetime.fromisoformat(creds["expire_date"])
|
| 2237 |
-
now = datetime.datetime.now()
|
| 2238 |
-
diff = exp_d - now
|
| 2239 |
-
days_left = diff.days if diff.days >= 0 else 0
|
| 2240 |
-
|
| 2241 |
-
jy, jm, jd = gregorian_to_jalali(exp_d.year, exp_d.month, exp_d.day)
|
| 2242 |
-
expire_txt = f"{jy:04d}/{jm:02d}/{jd:02d} (ساعت {exp_d.hour:02d}:{exp_d.minute:02d})"
|
| 2243 |
-
|
| 2244 |
-
status_text = "🌟 نسخه پرو (ویژه)"
|
| 2245 |
-
expire_info = f"\n📅 **تاریخ انقضا:** {expire_txt}\n⏳ **زمان باقیمانده:** {days_left} روز"
|
| 2246 |
-
daily_note = "*نکته: سهمیه پردازشی شما مختص همین دوره یکماهه میباشد.*"
|
| 2247 |
-
else:
|
| 2248 |
-
status_text = "🥉 نسخه رایگان (آزمایشی)"
|
| 2249 |
-
expire_info = ""
|
| 2250 |
-
daily_note = "*نکته: سهمیه شما هر روز ساعت ۰۰:۰۰ بامداد به صورت خودکار مجدداً شارژ میگردد.*"
|
| 2251 |
-
|
| 2252 |
-
chat_rem = "نامحدود ∞" if is_prem else creds['chat']
|
| 2253 |
-
vc_rem = "نامحدود ∞" if is_prem else creds.get('voice_conv', 0)
|
| 2254 |
-
clone_rem = "نامحدود ∞" if is_prem else creds.get('voice_clone', 0)
|
| 2255 |
-
podcast_rem = "نامحدود ∞" if is_prem else creds['podcast']
|
| 2256 |
-
tts_rem = "نامحدود ∞" if is_prem else creds['tts']
|
| 2257 |
-
file_rem = "نامحدود ∞" if is_prem else creds['file']
|
| 2258 |
-
stt_rem = "نامحدود ∞" if is_prem else creds['stt']
|
| 2259 |
-
image_rem = creds['image']
|
| 2260 |
-
edit_image_rem = creds['edit_image']
|
| 2261 |
-
invited_count = creds.get('invited_count', 0)
|
| 2262 |
-
my_code = get_or_create_referral_code(str_chat_id)
|
| 2263 |
-
|
| 2264 |
-
account_profile = f"""👤 **اطلاعات حساب کاربری شما**
|
| 2265 |
-
|
| 2266 |
-
🔹 **شناسه یکتا:** `{chat_id}`
|
| 2267 |
-
🎫 **کد هدیه شما:** `{my_code}`
|
| 2268 |
-
🔹 **وضعیت اشتراک:** {status_text}{expire_info}
|
| 2269 |
-
🎁 **تعداد افراد دعوت شده:** {invited_count} نفر
|
| 2270 |
-
|
| 2271 |
-
📊 **سهمیه باقیمانده شما:**
|
| 2272 |
-
- 💬 چت هوشمند: {chat_rem}
|
| 2273 |
-
- 🎨 تولید تصویر: {image_rem} عدد
|
| 2274 |
-
- 🪄 ویرایش تصویر: {edit_image_rem} عدد
|
| 2275 |
-
- 🎙️ تغییر صدا: {vc_rem}
|
| 2276 |
-
- 👤 کلون کردن صدا: {clone_rem}
|
| 2277 |
-
- 🎙 ساخت پادکست: {podcast_rem}
|
| 2278 |
-
- 🗣 تبدیل متن به صدا: {tts_rem}
|
| 2279 |
-
- 📁 تحلیل فایل و سند: {file_rem}
|
| 2280 |
-
- 📝 تبدیل صدا به متن: {stt_rem}
|
| 2281 |
-
|
| 2282 |
-
{daily_note}"""
|
| 2283 |
-
await send_with_keyboard(client, chat_id, account_profile, True)
|
| 2284 |
-
return
|
| 2285 |
-
|
| 2286 |
-
if user_text_str in["/invite", "دعوت دوستان 🎁"]:
|
| 2287 |
-
invites = creds.get("invited_count", 0)
|
| 2288 |
-
remains = 10 - (invites % 10)
|
| 2289 |
-
my_code = get_or_create_referral_code(str_chat_id)
|
| 2290 |
-
|
| 2291 |
-
invite_text = f"""🎁 **سیستم دعوت دوستان (دو سر سود)**
|
| 2292 |
-
|
| 2293 |
-
با دعوت دوستان خود به ربات آلفا، هم شما و هم دوستتان هدیه میگیرید!
|
| 2294 |
-
به دوست خود بگویید پس از ورود به ربات، دکمه **«ثبت کد هدیه 🎫»** را بزند و کد زیر را وارد کند.
|
| 2295 |
-
✨ **سود دوست شما:** در همان لحظه 10 تبدیل رایگان متن به صدا دریافت میکند.
|
| 2296 |
-
✨ **سود شما:** به آمار دعوتهایتان اضافه میشود و به ازای هر **10 نفر**، **3 روز اشتراک پرو نامحدود** میگیرید.
|
| 2297 |
-
|
| 2298 |
-
📊 **آمار شما:**
|
| 2299 |
-
- تعداد دعوتهای موفق: {invites} نفر
|
| 2300 |
-
- دعوتهای باقیمانده تا جایزه بعدی: {remains} نفر
|
| 2301 |
-
|
| 2302 |
-
کد هدیه اختصاصی شما:
|
| 2303 |
-
`{my_code}`
|
| 2304 |
-
|
| 2305 |
-
(متن زیر را کپی کرده و برای دوستانتان بفرستید 👇)"""
|
| 2306 |
-
await send_with_keyboard(client, chat_id, invite_text, True)
|
| 2307 |
-
|
| 2308 |
-
forward_text = f"""🤖 **ربات هوش مصنوعی آلفا پرو**
|
| 2309 |
-
|
| 2310 |
-
✨ با این ربات میتونی کارهای زیر رو به راحتی انجام بدی:
|
| 2311 |
-
💬 چت با پیشرفتهترین هوش مصنوعی
|
| 2312 |
-
🎨 ساخت و ویرایش حرفهای عکس
|
| 2313 |
-
🎙️ تغییر صدا و کلون کردن صدا
|
| 2314 |
-
🎙 ساخت پادکست اختصاصی
|
| 2315 |
-
🗣 تبدیل متن به صدا (30 گوینده مختلف)
|
| 2316 |
-
📝 تبدیل صدا و ویدیو به متن
|
| 2317 |
-
📁 تحلیل فایلها و ساخت مقاله
|
| 2318 |
-
|
| 2319 |
-
👇 اول وارد ربات زیر شو:
|
| 2320 |
-
@aialphabot
|
| 2321 |
-
|
| 2322 |
-
سپس دکمه **«ثبت کد هدیه 🎫»** را بزن و کد 8 رقمی زیر رو وارد کن تا همون اول **10 تا تبدیل صدا هدیه بگیری**:
|
| 2323 |
-
`{my_code}`"""
|
| 2324 |
-
await send_with_keyboard(client, chat_id, forward_text, False)
|
| 2325 |
-
return
|
| 2326 |
-
|
| 2327 |
-
if user_text_str in["/referral", "ثبت کد هدیه 🎫"]:
|
| 2328 |
-
if creds.get("used_referral", False):
|
| 2329 |
-
await send_with_keyboard(client, chat_id, "❌ شما قبلاً کد هدیه یک نفر را ثبت کردهاید و فقط یکبار مجاز به استفاده از این امکان هستید.", True)
|
| 2330 |
-
return
|
| 2331 |
-
user_states[str_chat_id]["mode"] = "waiting_for_referral_code"
|
| 2332 |
-
msg = "🎫 **ثبت کد هدیه**\n\nکد هدیه 8 رقمی (اعداد) که از دوست خود دریافت کردهاید را اینجا وارد کنید تا در همان لحظه **10 سهمیه تبدیل رایگان متن به صدا** هدیه بگیرید!\n\n(برای انصراف دکمه «برگشت♻️» را بزنید)"
|
| 2333 |
-
await send_with_keyboard(client, chat_id, msg, True)
|
| 2334 |
-
return
|
| 2335 |
-
|
| 2336 |
-
if user_text_str in["/buy", "خرید اشتراک 💎"]:
|
| 2337 |
-
buy_text = f"""💎 **خرید اشتراک ویژه آلفا پرو (یک ماهه)**
|
| 2338 |
-
|
| 2339 |
-
با تهیه اشتراک ویژه، محدودیتها را کنار بزنید و از نهایت قدرت هوش مصنوعی لذت ببرید! 🚀
|
| 2340 |
-
|
| 2341 |
-
━━━━━━━━━━━━━━━━━━━
|
| 2342 |
-
🎁 **بسته طلایی یکماهه شامل:**
|
| 2343 |
-
🤖 چت با هوش مصنوعی: نامحدود ∞
|
| 2344 |
-
🎙️ تغییر صدا و کلون کردن صدا: نامحدود ∞
|
| 2345 |
-
🗣 تبدیل متن به صدا (۳۰ گوینده): نامحدود ∞
|
| 2346 |
-
🎙 ساخت پادکست: نامحدود ∞
|
| 2347 |
-
📁 تحلیل فایل و سند: نامحدود ∞
|
| 2348 |
-
📝 تبدیل فایل صوتی به متن: نامحدود ∞
|
| 2349 |
-
🪄 ویرایش تصویر: 5 عدد
|
| 2350 |
-
🎨 تولید تصویر: 10 عدد
|
| 2351 |
-
━━━━━━━━━━━━━━━━━━━
|
| 2352 |
-
|
| 2353 |
-
💳 **هزینه اشتراک یک ماهه:** 250 هزار تومان
|
| 2354 |
-
|
| 2355 |
-
💳 **شماره کارت جهت واریز:**
|
| 2356 |
-
➖➖➖➖➖➖➖➖
|
| 2357 |
-
`6219861411958035`
|
| 2358 |
-
➖➖➖➖➖➖➖➖
|
| 2359 |
-
👤 **به نام:** کوهی
|
| 2360 |
-
|
| 2361 |
-
✅ **نحوه فعالسازی:**
|
| 2362 |
-
پس از واریز مبلغ، لطفاً رسید پرداختی را به همراه **شناسه یکتای خود** (که در پایین آمده) به آیدی پشتیبانی زیر ارسال کنید تا اشتراک شما فعال گردد:
|
| 2363 |
-
|
| 2364 |
-
🔑 **شناسه یکتای شما:**
|
| 2365 |
-
`{chat_id}`
|
| 2366 |
-
|
| 2367 |
-
👨💻 **ارتباط با پشتیبانی:**
|
| 2368 |
-
🆔 @aialpha_admin"""
|
| 2369 |
-
await send_with_keyboard(client, chat_id, buy_text, True)
|
| 2370 |
-
return
|
| 2371 |
-
|
| 2372 |
-
if user_text_str in["/transfer", "انتقال اکانت از برنامه به ربات"]:
|
| 2373 |
-
transfer_text = f"""🔄 **انتقال اکانت از برنامه به ربات**
|
| 2374 |
-
|
| 2375 |
-
کاربر گرامی، در صورتی که داخل برنامه «هوش مصنوعی آلفا» پیشتر اشتراک تهیه کردهاید، نیازی به خرید مجدد اشتراک داخل ربات نیست! 🎉
|
| 2376 |
-
|
| 2377 |
-
کافیست **شناسه یکتای** ربات روبیکای خود را کپی کرده و برای پشتیبانی ما در برنامه هوش مصنوعی آلفا ارسال کنید تا اکانت اشتراکی شما به سرعت از برنامه به ربات روبیکا انتقال داده شود.
|
| 2378 |
-
|
| 2379 |
-
🔑 **شناسه یکتای ربات شما:**
|
| 2380 |
-
`{chat_id}`
|
| 2381 |
-
|
| 2382 |
-
👨💻 **دقت کنید شناسه ربات رو به پشتیبانی داخل خود برنامه هوش مصنوعی آلفا ارسال کنید.**"""
|
| 2383 |
-
await send_with_keyboard(client, chat_id, transfer_text, True)
|
| 2384 |
-
return
|
| 2385 |
-
|
| 2386 |
-
if user_text_str in["/chat", "💬 چت", "چت با هوش مصنوعی 🤖"]:
|
| 2387 |
-
user_states[str_chat_id]["mode"] = "chat"
|
| 2388 |
-
user_states[str_chat_id]["history"] =[]
|
| 2389 |
-
await send_with_keyboard(client, chat_id, "💬 شما وارد بخش **چت با هوش مصنوعی** شدید.\n\nهر سوالی دارید بفرستید تا جواب بدم:\n(برای خروج دکمه «برگشت♻️» را بزنید)", True)
|
| 2390 |
-
return
|
| 2391 |
-
|
| 2392 |
-
if user_text_str in["/image", "🎨 عکس", "ساخت تصاویر🎨"]:
|
| 2393 |
-
user_states[str_chat_id]["mode"] = "image_waiting_for_text"
|
| 2394 |
-
await send_with_keyboard(client, chat_id, "🎨 شما وارد بخش **ساخت عکس پیشرفته** شدید.\n\nمتن (ایده) خود را به صورت کامل ارسال کنید:\n(برای خروج دکمه «برگشت♻️» را بزنید)", True)
|
| 2395 |
-
return
|
| 2396 |
-
|
| 2397 |
-
if user_text_str in["/edit_image", "ویرایش تصاویر 🪄"]:
|
| 2398 |
-
# متوقف کردن کاربران رایگان در همین مرحله و نشان دادن پیام (بدون درخواست عکس)
|
| 2399 |
-
if not creds.get("is_premium", False):
|
| 2400 |
-
msg = """کاربر گرامی،
|
| 2401 |
-
|
| 2402 |
-
ضمن تشکر از توجه شما، به اطلاع میرساند که قابلیت ویرایش تصاویر در حال حاضر به صورت رایگان در دسترس نمیباشد. این سرویس به دلیل نیاز به منابع پردازشی بالا، جزو خدمات ویژه و نیازمند تهیه اشتراک است.
|
| 2403 |
-
|
| 2404 |
-
با این حال، شما میتوانید از تست رایگان و امکانات سایر بخشهای پلتفرم ��ا بهرهمند شوید.
|
| 2405 |
-
|
| 2406 |
-
ما همواره در تلاش برای افزایش منابع و اضافه کردن خدمات رایگان بیشتر به کاربران عزیز هستیم.
|
| 2407 |
-
|
| 2408 |
-
در حال حاضر، میتوانید از سایر بخشهای رایگان موجود استفاده کنید و یا برای دسترسی کامل و نامحدود به تمامی قابلیتها (از جمله ویرایش تصاویر)، اشتراک تهیه نمایید.
|
| 2409 |
-
|
| 2410 |
-
از صبوری و همراهی شما سپاسگزاریم."""
|
| 2411 |
-
await send_with_keyboard(client, chat_id, msg, False)
|
| 2412 |
-
return
|
| 2413 |
-
|
| 2414 |
-
user_states[str_chat_id]["mode"] = "image_edit_waiting_for_image"
|
| 2415 |
-
user_states[str_chat_id]["file_bytes"] = None
|
| 2416 |
-
await send_with_keyboard(client, chat_id, "🪄 به بخش **ویرایش عکس (Flux.2)** خوش آمدید.\n\nلطفاً ابتدا عکسی که میخواهید ویرایش کنید را بفرستید:\n(برای خروج دکمه «برگشت♻️» را بزنید)", True)
|
| 2417 |
-
return
|
| 2418 |
-
|
| 2419 |
-
if user_text_str in["/tts", "🎙️ صدا", "تبدیل متن به صدا🗣️"]:
|
| 2420 |
-
user_states[str_chat_id]["mode"] = "tts_waiting_for_text"
|
| 2421 |
-
await send_with_keyboard(client, chat_id, "🎙️ شما وارد بخش **تبدیل متن به صدا** شدید.\n\nلطفاً متنی که میخواهید به صدا تبدیل شود را ارسال کنید:\n(برای خروج دکمه «برگشت♻️» را بزنید)", True)
|
| 2422 |
-
return
|
| 2423 |
-
|
| 2424 |
-
if user_text_str in["/podcast", "📻 پادکست", "ساخت پادکست 🎙️"]:
|
| 2425 |
-
user_states[str_chat_id]["mode"] = "podcast_waiting_for_topic"
|
| 2426 |
-
await send_with_keyboard(client, chat_id, "📻 شما وارد بخش **ساخت پادکست** شدید.\n\nلطفاً موضوع پادکست خود را بفرستید.\nمثال: درباره تاریخچه پیدایش قهوه با ۳ گوینده یک پادکست جذاب بساز . همچنین این قسمت متصل به مدل زبانی است و درخواست هارو قبل از ساخت درک میکنه. میتوانید مقاله کامل یک سایت بفرستید با تبلیغات یا هرچی، هوش مصنوعی متن مقاله رو استخراج و پادکست براتون میسازه . در توضیحات امکان مشخص کردن تعداد گوینده به همراه اسم شون نیز از سمت شما امکان پذیر است.\n\n(برای خروج دکمه «برگشت♻️» را بزنید)", True)
|
| 2427 |
-
return
|
| 2428 |
-
|
| 2429 |
-
if user_text_str in["/vc", "تغییر صدا 🎙️"]:
|
| 2430 |
-
user_states[str_chat_id]["mode"] = "vc_waiting_for_voice"
|
| 2431 |
-
user_states[str_chat_id]["file_bytes"] = None
|
| 2432 |
-
await send_with_keyboard(client, chat_id, "🎙️ شما وارد بخش **تغییر صدا** شدید.\n\nلطفاً صدای خود (ویس) را بفرستید تا آن را به صدای شخصیتهای معروف تبدیل کنم:\n(برای خروج دکمه «برگشت♻️» را بزنید)", True)
|
| 2433 |
-
return
|
| 2434 |
-
|
| 2435 |
-
if user_text_str in["/clone", "کلون کردن صدا 👤"]:
|
| 2436 |
-
user_states[str_chat_id]["mode"] = "clone_waiting_for_src"
|
| 2437 |
-
user_states[str_chat_id]["file_bytes"] = None
|
| 2438 |
-
user_states[str_chat_id]["ref_bytes"] = None
|
| 2439 |
-
clone_text = """👤 **شما وارد بخش کلون کردن صدای اختصاصی شدید.**
|
| 2440 |
-
|
| 2441 |
-
✨ **این بخش چه کاری انجام میدهد؟**
|
| 2442 |
-
با این ویژگی بینظیر، شما میتوانید صدای خود (یا هر فرد دیگری) را دقیقاً شبیهسازی کنید! کافیست یک نمونه از صدای خودتان صحبت کنید و یک نمونه از صدای شخص مورد نظر (الگو) را به هوش مصنوعی بدهید. ربات لحن و کلمات شما را گرفته و دقیقاً با جنس صدای شخص الگو بازسازی میکند.
|
| 2443 |
-
|
| 2444 |
-
📌 **راهنمای استفاده:**
|
| 2445 |
-
شما در این مرحله به **2 فایل صوتی** نیاز دارید:
|
| 2446 |
-
1️⃣ **صدای ورودی (شما):** صدایی که میخواهید متن و لحن آن خوانده شود.
|
| 2447 |
-
2️⃣ **صدای الگو (هدف):** صدایی که میخواهید خروجی نهایی شبیه به آن شود (بدون نویز و موزیک پسزمینه، بین ۳ تا ۱۰ ثانیه بهترین نتیجه را میدهد).
|
| 2448 |
-
|
| 2449 |
-
👇 **مرحله اول:**
|
| 2450 |
-
لطفاً ابتدا **صدای خودتان (ورودی)** را به صورت ویس یا فایل صوتی ارسال کنید:
|
| 2451 |
-
|
| 2452 |
-
*(برای خروج دکمه «برگشت♻️» را بزنید)*"""
|
| 2453 |
-
await send_with_keyboard(client, chat_id, clone_text, True)
|
| 2454 |
-
return
|
| 2455 |
-
|
| 2456 |
-
if user_text_str in["/file", "تحلیل فایل 📁"]:
|
| 2457 |
-
user_states[str_chat_id]["mode"] = "file_waiting_for_file"
|
| 2458 |
-
user_states[str_chat_id]["file_bytes"] = None
|
| 2459 |
-
await send_with_keyboard(client, chat_id, "📁 شما وارد بخش **تحلیل فایل اختصاصی** شدید.\n\nلطفاً فایل خود را ارسال کنید:\n(برای خروج دکمه «برگشت♻️» را بزنید)", True)
|
| 2460 |
-
return
|
| 2461 |
-
|
| 2462 |
-
if user_text_str in["/stt", "فایل صوتی به متن 📝"]:
|
| 2463 |
-
user_states[str_chat_id]["mode"] = "stt_waiting_for_audio"
|
| 2464 |
-
await send_with_keyboard(client, chat_id, "📝 شما وارد بخش **تبدیل صدا به متن** شدید.\n\nلطفاً فایل خود (ویس، آهنگ، ویدیو و...) را ارسال کنید:\n(برای خروج دکمه «برگشت♻️» را بزنید)", True)
|
| 2465 |
-
return
|
| 2466 |
-
|
| 2467 |
-
if user_text_str in["/create_file", "ساخت فایل 📄"]:
|
| 2468 |
-
user_states[str_chat_id]["mode"] = "create_file_waiting_for_topic"
|
| 2469 |
-
await send_with_keyboard(client, chat_id, "📄 شما وارد بخش **ساخت فایل** شدید.\n\nلطفاً موضوع مقالهای که میخواهید را کامل بفرستید.\nمثال: نحوه مدیریت زمان\n\nهوش مصنوعی یک مقاله کامل و طولانی نوشته و در نهایت فایل PDF و Word آن را به شما تحویل میدهد.\n\n(برای خروج دکمه «برگشت♻️» را بزنید)", True)
|
| 2470 |
-
return
|
| 2471 |
-
|
| 2472 |
-
current_mode = user_states[str_chat_id].get("mode")
|
| 2473 |
-
|
| 2474 |
-
if current_mode is None:
|
| 2475 |
-
if is_file: pass
|
| 2476 |
-
elif user_text_str: await send_with_keyboard(client, chat_id, "⚠️ لطفاً ابتدا از کیبورد پایین، بخش مورد نظرتان را انتخاب کنید:", True)
|
| 2477 |
-
return
|
| 2478 |
-
|
| 2479 |
-
elif current_mode == "waiting_for_referral_code":
|
| 2480 |
-
if user_text_str:
|
| 2481 |
-
normalized_code = to_english_digits(user_text_str).strip()
|
| 2482 |
-
|
| 2483 |
-
if not normalized_code.isdigit() or len(normalized_code) != 8:
|
| 2484 |
-
await send_with_keyboard(client, chat_id, "❌ کد وارد شده نامعتبر است. لطفاً یک کد 8 رقمی صحیح بفرستید.", False)
|
| 2485 |
-
return
|
| 2486 |
-
|
| 2487 |
-
inviter_id = find_user_by_referral_code(normalized_code)
|
| 2488 |
-
|
| 2489 |
-
if not inviter_id:
|
| 2490 |
-
await send_with_keyboard(client, chat_id, "❌ کد هدیه یافت نشد. لطفاً کد را با دقت بررسی کنید.", False)
|
| 2491 |
-
return
|
| 2492 |
-
|
| 2493 |
-
if str(inviter_id) == str(str_chat_id):
|
| 2494 |
-
await send_with_keyboard(client, chat_id, "❌ شما نمیتوانید کد خودتان را ثبت کنید!", False)
|
| 2495 |
-
return
|
| 2496 |
-
|
| 2497 |
-
user_states[str_chat_id]["mode"] = None
|
| 2498 |
-
|
| 2499 |
-
user_credits_db[str_chat_id]["used_referral"] = True
|
| 2500 |
-
user_credits_db[str_chat_id]["tts"] = user_credits_db[str_chat_id].get("tts", 0) + 10
|
| 2501 |
-
|
| 2502 |
-
user_credits_db[inviter_id]["invited_count"] = user_credits_db[inviter_id].get("invited_count", 0) + 1
|
| 2503 |
-
current_invites = user_credits_db[inviter_id]["invited_count"]
|
| 2504 |
-
|
| 2505 |
-
if current_invites > 0 and current_invites % 10 == 0:
|
| 2506 |
-
inviter_data = user_credits_db[inviter_id]
|
| 2507 |
-
inviter_data["is_premium"] = True
|
| 2508 |
-
now = datetime.datetime.now()
|
| 2509 |
-
if inviter_data.get("expire_date"):
|
| 2510 |
-
try:
|
| 2511 |
-
current_exp = datetime.datetime.fromisoformat(inviter_data["expire_date"])
|
| 2512 |
-
if current_exp > now:
|
| 2513 |
-
new_exp = current_exp + datetime.timedelta(days=3)
|
| 2514 |
-
else:
|
| 2515 |
-
new_exp = now + datetime.timedelta(days=3)
|
| 2516 |
-
except:
|
| 2517 |
-
new_exp = now + datetime.timedelta(days=3)
|
| 2518 |
-
else:
|
| 2519 |
-
new_exp = now + datetime.timedelta(days=3)
|
| 2520 |
-
|
| 2521 |
-
inviter_data["expire_date"] = new_exp.isoformat()
|
| 2522 |
-
inviter_data["chat"] = 999999
|
| 2523 |
-
inviter_data["image"] = 10
|
| 2524 |
-
inviter_data["edit_image"] = 5
|
| 2525 |
-
inviter_data["podcast"] = 999999
|
| 2526 |
-
inviter_data["tts"] = 999999
|
| 2527 |
-
inviter_data["file"] = 999999
|
| 2528 |
-
inviter_data["stt"] = 999999
|
| 2529 |
-
|
| 2530 |
-
save_db(user_credits_db)
|
| 2531 |
-
try:
|
| 2532 |
-
msg_text = f"🎉 **تبریک ویژه!**\nیک دوست کد هدیه شما را ثبت کرد.\nتعداد کل دعوتهای شما: {current_invites} نفر\n\n🎁 **هدیه شما:** ۳ روز اشتراک پرو نامحدود به حساب شما افزوده شد!"
|
| 2533 |
-
asyncio.create_task(send_with_keyboard(client, inviter_id, msg_text, True))
|
| 2534 |
-
except: pass
|
| 2535 |
-
else:
|
| 2536 |
-
save_db(user_credits_db)
|
| 2537 |
-
remains = 10 - (current_invites % 10)
|
| 2538 |
-
try:
|
| 2539 |
-
msg_text = f"🎉 **تبریک!**\nیک دوست کد هدیه شما را ثبت کرد.\nتعداد کل دعوتهای شما: {current_invites} نفر\n\n⏳ با دعوت {remains} نفر دیگر، ۳ روز اشتراک رایگان دریافت میکنید!"
|
| 2540 |
-
asyncio.create_task(send_with_keyboard(client, inviter_id, msg_text, True))
|
| 2541 |
-
except: pass
|
| 2542 |
-
|
| 2543 |
-
await send_with_keyboard(client, chat_id, "✅ کد هدیه با موفقیت ثبت شد!\n🎁 **10 سهمیه تبدیل رایگان متن به صدا** به حساب شما اضافه گردید.", True)
|
| 2544 |
-
return
|
| 2545 |
-
|
| 2546 |
-
elif current_mode == "chat":
|
| 2547 |
-
if is_file:
|
| 2548 |
-
await send_with_keyboard(client, chat_id, "📥 در حال دانلود فایل...", False)
|
| 2549 |
-
try:
|
| 2550 |
-
file_bytes = await helper_download_file(client, msg_obj)
|
| 2551 |
-
user_states[str_chat_id]["file_bytes"] = file_bytes
|
| 2552 |
-
user_states[str_chat_id]["file_name"] = file_name
|
| 2553 |
-
user_states[str_chat_id]["mode"] = "chat_waiting_for_prompt"
|
| 2554 |
-
await send_with_keyboard(client, chat_id, "✅ فایل با موفقیت دریافت شد.\n\nحالا لطفاً متنی بفرستید و بگویید **چه کاری با این فایل انجام دهم؟**\n(مثلاً: این تصویر را توصیف کن، یا متن این سند را خلاصه کن)", False)
|
| 2555 |
-
except Exception as dl_err:
|
| 2556 |
-
await send_with_keyboard(client, chat_id, f"❌ خطا در دریافت فایل!\n{str(dl_err)}", False)
|
| 2557 |
-
elif user_text_str:
|
| 2558 |
-
asyncio.create_task(process_gemini(client, chat_id, user_text_str))
|
| 2559 |
-
return
|
| 2560 |
-
|
| 2561 |
-
elif current_mode == "chat_waiting_for_prompt":
|
| 2562 |
-
if user_text_str:
|
| 2563 |
-
saved_bytes = user_states[str_chat_id].get("file_bytes")
|
| 2564 |
-
saved_name = user_states[str_chat_id].get("file_name", "file.jpeg")
|
| 2565 |
-
user_states[str_chat_id]["mode"] = "chat"
|
| 2566 |
-
user_states[str_chat_id]["file_bytes"] = None
|
| 2567 |
-
asyncio.create_task(process_gemini(client, chat_id, user_text_str, file_bytes=saved_bytes, file_name=saved_name))
|
| 2568 |
-
else:
|
| 2569 |
-
await send_with_keyboard(client, chat_id, "⚠️ لطفاً درخواست خود را متنی بنویسید.", False)
|
| 2570 |
-
return
|
| 2571 |
-
|
| 2572 |
-
elif current_mode == "image_waiting_for_text":
|
| 2573 |
-
if user_text_str:
|
| 2574 |
-
user_states[str_chat_id]["text"] = user_text_str
|
| 2575 |
-
user_states[str_chat_id]["mode"] = "image_waiting_for_size"
|
| 2576 |
-
|
| 2577 |
-
size_menu = """🖼 **لطفاً ابعاد تصویر خود را انتخاب کنید:**
|
| 2578 |
-
|
| 2579 |
-
1️⃣ `1:1` (مربع) - مناسب پروفایل ⬛
|
| 2580 |
-
2️⃣ `9:16` (عمودی) - مناسب استوری و پسزمینه گوشی 📱
|
| 2581 |
-
3️⃣ `16:9` (افقی) - مناسب دسکتاپ و ویدیو 🖥️
|
| 2582 |
-
4️⃣ `4:3` (استاندارد) - مناسب چاپ و پست 📸
|
| 2583 |
-
|
| 2584 |
-
(لطفاً فقط عدد 1 تا 4 را بفرستید)"""
|
| 2585 |
-
await send_with_keyboard(client, chat_id, size_menu, False)
|
| 2586 |
-
else:
|
| 2587 |
-
await send_with_keyboard(client, chat_id, "⚠️ لطفاً ایده عکس خود را به صورت متنی بفرستید.", False)
|
| 2588 |
-
return
|
| 2589 |
-
|
| 2590 |
-
elif current_mode == "image_waiting_for_size":
|
| 2591 |
-
normalized_choice = to_english_digits(user_text_str).strip()
|
| 2592 |
-
if normalized_choice in["1", "2", "3", "4"]:
|
| 2593 |
-
saved_text = user_states[str_chat_id].get("text", "")
|
| 2594 |
-
user_states[str_chat_id]["mode"] = None
|
| 2595 |
-
asyncio.create_task(process_image(client, chat_id, saved_text, normalized_choice))
|
| 2596 |
-
else:
|
| 2597 |
-
await send_with_keyboard(client, chat_id, "❌ عدد وارد شده نامعتبر است! لطفاً فقط یکی از اعداد 1 تا 4 را بفرستید.", False)
|
| 2598 |
-
return
|
| 2599 |
-
|
| 2600 |
-
elif current_mode == "image_edit_waiting_for_image":
|
| 2601 |
-
if not is_file: return await send_with_keyboard(client, chat_id, "⚠️ لطفاً ابتدا یک عکس ارسال کنید.", False)
|
| 2602 |
-
await send_with_keyboard(client, chat_id, "📥 در حال دانلود عکس...", False)
|
| 2603 |
-
try:
|
| 2604 |
-
file_bytes = await helper_download_file(client, msg_obj)
|
| 2605 |
-
user_states[str_chat_id]["file_bytes"] = file_bytes
|
| 2606 |
-
user_states[str_chat_id]["mode"] = "image_edit_waiting_for_prompt"
|
| 2607 |
-
await send_with_keyboard(client, chat_id, "✅ عکس با موفقیت دریافت شد.\n\nحالا دستور خود را به صورت متنی تایپ کنید.\nمثال: یک کلاه قرمز روی سر این گربه بگذار.", False)
|
| 2608 |
-
except Exception as dl_err: await send_with_keyboard(client, chat_id, f"❌ خطا در دریافت عکس!\n{str(dl_err)}", False)
|
| 2609 |
-
return
|
| 2610 |
-
|
| 2611 |
-
elif current_mode == "image_edit_waiting_for_prompt":
|
| 2612 |
-
if user_text_str:
|
| 2613 |
-
saved_bytes = user_states[str_chat_id].get("file_bytes")
|
| 2614 |
-
user_states[str_chat_id]["mode"] = None
|
| 2615 |
-
user_states[str_chat_id]["file_bytes"] = None
|
| 2616 |
-
asyncio.create_task(process_image_edit(client, chat_id, saved_bytes, user_text_str))
|
| 2617 |
-
else: await send_with_keyboard(client, chat_id, "⚠️ لطفاً درخواست خود را متنی بنویسید.", False)
|
| 2618 |
-
return
|
| 2619 |
-
|
| 2620 |
-
elif current_mode == "tts_waiting_for_text":
|
| 2621 |
-
if user_text_str:
|
| 2622 |
-
if len(user_text_str) > 2500: return await send_with_keyboard(client, chat_id, "⚠️ لطفاً متنی کوتاهتر از 2500 کاراکتر بفرستید.", False)
|
| 2623 |
-
user_states[str_chat_id]["text"] = user_text_str
|
| 2624 |
-
user_states[str_chat_id]["mode"] = "tts_waiting_for_speaker"
|
| 2625 |
-
|
| 2626 |
-
speakers_menu = """✅ متن شما ذخیره شد.
|
| 2627 |
-
لطفاً **شماره** گوینده مورد نظر خود را بفرستید:
|
| 2628 |
-
1. شهاب | 2. آوا | 3. نوید
|
| 2629 |
-
4. آرمان | 5. مهسا | 6. دانا
|
| 2630 |
-
7. سامان | 8. آرش | 9. شبنم
|
| 2631 |
-
10. سحر | 11. مریم | 12. بهرام
|
| 2632 |
-
13. نیکان| 14. فرناز | 15. سارا
|
| 2633 |
-
16. مانی | 17. آرتین | 18. دلنواز
|
| 2634 |
-
19. روژان | 20. امید | 21. بردیا
|
| 2635 |
-
22. ترانه | 23. نیکو | 24. هستی
|
| 2636 |
-
25. کامیار| 26. کیانوش| 27. پویا
|
| 2637 |
-
28. مهتاب | 29. سام | 30. لیدا"""
|
| 2638 |
-
await send_with_keyboard(client, chat_id, speakers_menu, False)
|
| 2639 |
-
return
|
| 2640 |
-
|
| 2641 |
-
elif current_mode == "tts_waiting_for_speaker":
|
| 2642 |
-
normalized_text = to_english_digits(user_text_str)
|
| 2643 |
-
|
| 2644 |
-
if normalized_text.isdigit() and normalized_text in SPEAKERS:
|
| 2645 |
-
spk_name, spk_id = SPEAKERS[normalized_text]
|
| 2646 |
-
txt = user_states[str_chat_id]["text"]
|
| 2647 |
-
user_states[str_chat_id]["mode"] = "tts_waiting_for_text"
|
| 2648 |
-
asyncio.create_task(process_tts(client, chat_id, txt, spk_id, spk_name))
|
| 2649 |
-
else:
|
| 2650 |
-
await send_with_keyboard(client, chat_id, "❌ شماره نامعتبر است! لطفاً فقط یک عدد بین 1 تا 30 بفرستید.", False)
|
| 2651 |
-
return
|
| 2652 |
-
|
| 2653 |
-
elif current_mode == "podcast_waiting_for_topic":
|
| 2654 |
-
if user_text_str: asyncio.create_task(process_podcast(client, chat_id, user_text_str))
|
| 2655 |
-
else: await send_with_keyboard(client, chat_id, "⚠️ لطفاً موضوع پادکست خود را به صورت متنی بفرستید.", False)
|
| 2656 |
-
return
|
| 2657 |
-
|
| 2658 |
-
elif current_mode == "stt_waiting_for_audio":
|
| 2659 |
-
if not is_file: return await send_with_keyboard(client, chat_id, "⚠️ لطفاً یک فایل ارسال کنید.", False)
|
| 2660 |
-
await send_with_keyboard(client, chat_id, "📥 در حال دانلود فایل...", False)
|
| 2661 |
-
try:
|
| 2662 |
-
audio_bytes = await helper_download_file(client, msg_obj)
|
| 2663 |
-
asyncio.create_task(process_stt(client, chat_id, audio_bytes, file_name))
|
| 2664 |
-
except Exception as dl_err: await send_with_keyboard(client, chat_id, f"❌ خطا در دانلود فایل!\n{str(dl_err)}", False)
|
| 2665 |
-
return
|
| 2666 |
-
|
| 2667 |
-
elif current_mode == "file_waiting_for_file":
|
| 2668 |
-
if not is_file: return await send_with_keyboard(client, chat_id, "⚠️ لطفاً ابتدا یک فایل ارسال کنید.", False)
|
| 2669 |
-
await send_with_keyboard(client, chat_id, "📥 در حال دریافت فایل...", False)
|
| 2670 |
-
try:
|
| 2671 |
-
file_bytes = await helper_download_file(client, msg_obj)
|
| 2672 |
-
user_states[str_chat_id]["file_bytes"] = file_bytes
|
| 2673 |
-
user_states[str_chat_id]["file_name"] = file_name
|
| 2674 |
-
user_states[str_chat_id]["mode"] = "file_waiting_for_prompt"
|
| 2675 |
-
await send_with_keyboard(client, chat_id, "✅ فایل با موفقیت دریافت شد.\n\nحالا لطفاً متنی بگویید **چگونه تحلیل شود؟**\n(میتوانید سوال خاصی بپرسید یا فقط بخواهید فایل را توضیح دهد)", False)
|
| 2676 |
-
except Exception as dl_err: await send_with_keyboard(client, chat_id, f"❌ خطا در دریافت فایل!\n{str(dl_err)}", False)
|
| 2677 |
-
return
|
| 2678 |
-
|
| 2679 |
-
elif current_mode == "file_waiting_for_prompt":
|
| 2680 |
-
if user_text_str:
|
| 2681 |
-
saved_bytes = user_states[str_chat_id].get("file_bytes")
|
| 2682 |
-
saved_name = user_states[str_chat_id].get("file_name", "file.jpeg")
|
| 2683 |
-
user_states[str_chat_id]["mode"] = "file_waiting_for_file"
|
| 2684 |
-
asyncio.create_task(process_file_analysis(client, chat_id, saved_bytes, saved_name, user_text_str))
|
| 2685 |
-
else: await send_with_keyboard(client, chat_id, "⚠️ لطفاً درخواست خود را متنی بنویسید.", False)
|
| 2686 |
-
return
|
| 2687 |
-
|
| 2688 |
-
elif current_mode == "create_file_waiting_for_topic":
|
| 2689 |
-
if user_text_str:
|
| 2690 |
-
asyncio.create_task(process_create_file(client, chat_id, user_text_str))
|
| 2691 |
-
else:
|
| 2692 |
-
await send_with_keyboard(client, chat_id, "⚠️ لطفاً موضوع مقاله خود را به صورت متنی بفرستید.", False)
|
| 2693 |
-
return
|
| 2694 |
-
|
| 2695 |
-
elif current_mode == "vc_waiting_for_voice":
|
| 2696 |
-
if not is_file: return await send_with_keyboard(client, chat_id, "⚠️ لطفاً یک فایل صوتی یا ویس ارسال کنید.", False)
|
| 2697 |
-
await send_with_keyboard(client, chat_id, "📥 در حال دانلود فایل صوتی شما...", False)
|
| 2698 |
-
try:
|
| 2699 |
-
file_bytes = await helper_download_file(client, msg_obj)
|
| 2700 |
-
user_states[str_chat_id]["file_bytes"] = file_bytes
|
| 2701 |
-
user_states[str_chat_id]["mode"] = "vc_waiting_for_model"
|
| 2702 |
-
|
| 2703 |
-
model_menu = "✅ صدای شما دریافت شد.\n\nلطفا **شماره** مدلی که میخواهید صدایتان به آن تبدیل شود را ارسال کنید:\n\n"
|
| 2704 |
-
for k, v in LEGACY_MODELS.items():
|
| 2705 |
-
if k == "8":
|
| 2706 |
-
model_menu += f"{k}. {v['name']} (نامحدود رایگان)\n"
|
| 2707 |
-
else:
|
| 2708 |
-
model_menu += f"{k}. {v['name']}\n"
|
| 2709 |
-
model_menu += "➖➖➖➖➖➖➖➖\n"
|
| 2710 |
-
for k, v in STANDARD_MODELS.items(): model_menu += f"{k}. {v['name']}\n"
|
| 2711 |
-
|
| 2712 |
-
await send_with_keyboard(client, chat_id, model_menu, False)
|
| 2713 |
-
except Exception as dl_err:
|
| 2714 |
-
await send_with_keyboard(client, chat_id, f"❌ خطا در دریافت فایل!\n{str(dl_err)}", False)
|
| 2715 |
-
return
|
| 2716 |
-
|
| 2717 |
-
elif current_mode == "vc_waiting_for_model":
|
| 2718 |
-
choice = to_english_digits(user_text_str).strip()
|
| 2719 |
-
|
| 2720 |
-
if choice in STANDARD_MODELS:
|
| 2721 |
-
if creds["voice_conv"] <= 0: return await send_with_keyboard(client, chat_id, "❌ سهمیه تغییر صدای شما تمام شده است. لطفاً از منوی اصلی وارد بخش «خرید اشتراک 💎» شوید.", False)
|
| 2722 |
-
user_states[str_chat_id]["mode"] = None
|
| 2723 |
-
model = STANDARD_MODELS[choice]
|
| 2724 |
-
src_bytes = user_states[str_chat_id]["file_bytes"]
|
| 2725 |
-
await send_with_keyboard(client, chat_id, "📥 در حال آمادهسازی فایلها...", False)
|
| 2726 |
-
ref_bytes = await helper_download_url_to_bytes(model["ref"])
|
| 2727 |
-
if not ref_bytes: return await send_with_keyboard(client, chat_id, "❌ خطا در دسترسی به فایل صدای مدل.", False)
|
| 2728 |
-
|
| 2729 |
-
asyncio.create_task(process_standard_vc_job(client, chat_id, src_bytes, ref_bytes, model["name"], "voice_conv"))
|
| 2730 |
-
|
| 2731 |
-
elif choice in LEGACY_MODELS:
|
| 2732 |
-
if choice != "8" and creds["voice_conv"] <= 0:
|
| 2733 |
-
return await send_with_keyboard(client, chat_id, "❌ سهمیه تغییر صدای شما تمام شده است. لطفاً از منوی اصلی وارد بخش «خرید اشتراک 💎» شوید.", False)
|
| 2734 |
-
|
| 2735 |
-
user_states[str_chat_id]["selected_model"] = choice
|
| 2736 |
-
user_states[str_chat_id]["mode"] = "vc_waiting_for_gender"
|
| 2737 |
-
|
| 2738 |
-
gender_msg = f"✅ مدل {LEGACY_MODELS[choice]['name']} انتخاب شد.\n\nبرای تنظیم دقیق فرکانسها به ما بگویید صدایی که خودتان فرستادید صدای یک **مرد** است یا **زن**؟\n\n1. مرد 👨\n2. زن 👩"
|
| 2739 |
-
await send_with_keyboard(client, chat_id, gender_msg, False)
|
| 2740 |
-
else:
|
| 2741 |
-
await send_with_keyboard(client, chat_id, "❌ شماره وارد شده صحیح نیست. لطفاً فقط عدد مدل را بفرستید.", False)
|
| 2742 |
-
return
|
| 2743 |
-
|
| 2744 |
-
elif current_mode == "vc_waiting_for_gender":
|
| 2745 |
-
choice = to_english_digits(user_text_str).strip()
|
| 2746 |
-
if choice not in["1", "2"]:
|
| 2747 |
-
return await send_with_keyboard(client, chat_id, "❌ لطفاً عدد 1 (مرد) یا 2 (زن) را ارسال کنید.", False)
|
| 2748 |
-
|
| 2749 |
-
user_gender = "male" if choice == "1" else "female"
|
| 2750 |
-
model_key = user_states[str_chat_id]["selected_model"]
|
| 2751 |
-
model = LEGACY_MODELS[model_key]
|
| 2752 |
-
target_gender = model["gender"]
|
| 2753 |
-
|
| 2754 |
-
pitch = 0
|
| 2755 |
-
if target_gender == "female" and user_gender == "male": pitch = 12
|
| 2756 |
-
elif target_gender == "male" and user_gender == "female": pitch = -12
|
| 2757 |
-
|
| 2758 |
-
user_states[str_chat_id]["mode"] = None
|
| 2759 |
-
src_bytes = user_states[str_chat_id]["file_bytes"]
|
| 2760 |
-
asyncio.create_task(process_legacy_vc_job(client, chat_id, src_bytes, model["url"], pitch, model["name"]))
|
| 2761 |
-
return
|
| 2762 |
-
|
| 2763 |
-
elif current_mode == "clone_waiting_for_src":
|
| 2764 |
-
if not is_file: return await send_with_keyboard(client, chat_id, "⚠️ لطفاً فایل صوتی صدای خودتان را بفرستید.", False)
|
| 2765 |
-
await send_with_keyboard(client, chat_id, "📥 در حال دانلود صدای شما...", False)
|
| 2766 |
-
try:
|
| 2767 |
-
file_bytes = await helper_download_file(client, msg_obj)
|
| 2768 |
-
user_states[str_chat_id]["file_bytes"] = file_bytes
|
| 2769 |
-
user_states[str_chat_id]["mode"] = "clone_waiting_for_ref"
|
| 2770 |
-
await send_with_keyboard(client, chat_id, "✅ صدای شما دریافت شد.\n\nحالا **فایل الگو (صدای شخصی که میخواهید شبیهسازی کنید)** را ارسال کنید.\n(پیشنهاد: فایل بدون نویز و موسیقی، بین ۳ تا ۱۰ ثانیه)", False)
|
| 2771 |
-
except Exception as dl_err:
|
| 2772 |
-
await send_with_keyboard(client, chat_id, f"❌ خطا در دریافت فایل!\n{str(dl_err)}", False)
|
| 2773 |
-
return
|
| 2774 |
-
|
| 2775 |
-
elif current_mode == "clone_waiting_for_ref":
|
| 2776 |
-
if not is_file: return await send_with_keyboard(client, chat_id, "⚠️ لطفاً فایل صوتی الگوی هدف را بفرستید.", False)
|
| 2777 |
-
await send_with_keyboard(client, chat_id, "📥 در حال دانلود صدای الگو...", False)
|
| 2778 |
-
try:
|
| 2779 |
-
ref_bytes = await helper_download_file(client, msg_obj)
|
| 2780 |
-
|
| 2781 |
-
if creds["voice_clone"] <= 0:
|
| 2782 |
-
return await send_with_keyboard(client, chat_id, "❌ سهمیه کلون کردن صدای شما تمام شده است. نیازمند تهیه اشتراک هستید.", False)
|
| 2783 |
-
|
| 2784 |
-
user_states[str_chat_id]["mode"] = None
|
| 2785 |
-
src_bytes = user_states[str_chat_id]["file_bytes"]
|
| 2786 |
-
|
| 2787 |
-
asyncio.create_task(process_standard_vc_job(client, chat_id, src_bytes, ref_bytes, "صدای اختصاصی (کلون شده)", "voice_clone"))
|
| 2788 |
-
except Exception as dl_err:
|
| 2789 |
-
await send_with_keyboard(client, chat_id, f"❌ خطا در دریافت فایل!\n{str(dl_err)}", False)
|
| 2790 |
-
return
|
| 2791 |
|
| 2792 |
except Exception: traceback.print_exc()
|
| 2793 |
|
|
@@ -2801,5 +2054,5 @@ if __name__ == "__main__":
|
|
| 2801 |
|
| 2802 |
loop.create_task(ram_garbage_collector())
|
| 2803 |
|
| 2804 |
-
print("🚀 ربات
|
| 2805 |
bot.run()
|
|
|
|
| 1958 |
|
| 1959 |
# ==============================================================================
|
| 1960 |
# 🟢 پارت 20: بدنه اصلی ربات (Handler)، دستورات مدیریتی، حلقه اصلی و استارت
|
| 1961 |
+
# ⚠️ (نسخه موقت جاروبرقی: فقط پیامها را میخواند و تیک میزند تا صف خالی شود) ⚠️
|
| 1962 |
# ==============================================================================
|
| 1963 |
# ==================================================================
|
| 1964 |
# حلقه و مدیریت اصلی ربات
|
|
|
|
| 2027 |
if not msg_id and msg_obj:
|
| 2028 |
msg_id = msg_obj.get("message_id") if isinstance(msg_obj, dict) else getattr(msg_obj, "message_id", None)
|
| 2029 |
|
|
|
|
|
|
|
|
|
|
| 2030 |
# ===================================================================
|
| 2031 |
# 🛑 سیستم صد در صد قطعی ضد تکرار پیام با استفاده از دیتابیس ابری
|
| 2032 |
# ===================================================================
|
|
|
|
| 2034 |
str_msg_id = str(msg_id).strip()
|
| 2035 |
if is_message_processed(str_msg_id):
|
| 2036 |
return
|
| 2037 |
+
# شناسه پیام در دیتابیس ثبت میشود تا دیگر هرگز خوانده نشود
|
| 2038 |
mark_message_processed(str_msg_id)
|
| 2039 |
+
print(f"✅ پیام قدیمی با شناسه {str_msg_id} تیک خورد و دور انداخته شد.")
|
| 2040 |
# ===================================================================
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2041 |
|
| 2042 |
+
# ⛔️ توقف در همین نقطه! هیچ پردازشی انجام نمیشود و هیچ پیامی ارسال نمیگردد.
|
| 2043 |
+
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2044 |
|
| 2045 |
except Exception: traceback.print_exc()
|
| 2046 |
|
|
|
|
| 2054 |
|
| 2055 |
loop.create_task(ram_garbage_collector())
|
| 2056 |
|
| 2057 |
+
print("🚀 ربات در حالت موقت (جاروبرقی پیامهای قدیمی) روشن شد. منتظر بمانید تا صف پیامها خالی شود...")
|
| 2058 |
bot.run()
|