otp_bot / main.py
mdsinha's picture
Create main.py
6e756b9 verified
Raw History Blame Contribute Delete
10 kB
import asyncio
import aiohttp
import re
import hashlib
import time
from telegram import Bot, InlineKeyboardButton, InlineKeyboardMarkup, CopyTextButton
from telegram.constants import ParseMode
from telegram.request import HTTPXRequest
# ================= CONFIG (ULTRA FAST REFRESH) =================
API_URL = "http://147.135.212.197/crapi/time/viewstats"
API_TOKEN = "RlBYNEVBgH1nYFRZQY2GaWGYkGRXglBYa19qUnVSjFVCcmF6c2U="
BOT_TOKEN = "8755428245:AAFF1_FKujO-uliDPISU98ySQ4L8LjWzmwA"
CHAT_ID = -1002769074368
CHECK_INTERVAL = 1.0 # প্রতি ১ সেকেন্ডে এপিআই রিফ্রেশ হবে
DELETE_AFTER = 300 # ৫ মিনিট পর মেসেজ অটো ডিলিট
# ========================================================
# VPS এর লিমিটেড রিসোর্সের জন্য অপ্টিমাইজড রিকোয়েস্ট
t_request = HTTPXRequest(connection_pool_size=100, read_timeout=5)
bot = Bot(token=BOT_TOKEN, request=t_request)
sent_messages = set() # পাঠানো মেসেজ মনে রাখার জন্য
messages_to_delete = []
# ২৪২টি দেশের লিস্ট (সম্পূর্ণ)
COUNTRY_MAP = {"93": ("🇦🇫", "AF"), "355": ("🇦🇱", "AL"), "213": ("🇩🇿", "DZ"), "1684": ("🇦🇸", "AS"), "376": ("🇦🇩", "AD"), "244": ("🇦🇴", "AO"), "1264": ("🇦🇮", "AI"), "672": ("🇦🇶", "AQ"), "1268": ("🇦🇬", "AG"), "54": ("🇦🇷", "AR"), "374": ("🇦🇲", "AM"), "297": ("🇦🇼", "AW"), "61": ("🇦🇺", "AU"), "43": ("🇦🇹", "AT"), "994": ("🇦🇿", "AZ"), "1242": ("🇧🇸", "BS"), "973": ("🇧🇭", "BH"), "880": ("🇧🇩", "BD"), "1246": ("🇧🇧", "BB"), "375": ("🇧🇾", "BY"), "32": ("🇧🇪", "BE"), "501": ("🇧🇿", "BZ"), "229": ("🇧🇯", "BJ"), "1441": ("🇧🇲", "BM"), "975": ("🇧🇹", "BT"), "591": ("🇧🇴", "BO"), "387": ("🇧🇦", "BA"), "267": ("🇧🇼", "BW"), "55": ("🇧🇷", "BR"), "246": ("🇮🇴", "IO"), "1284": ("🇻🇬", "VG"), "673": ("🇧🇳", "BN"), "359": ("🇧🇬", "BG"), "226": ("🇧🇫", "BF"), "257": ("🇧🇮", "BI"), "855": ("🇰🇭", "KH"), "237": ("🇨🇲", "CM"), "1": ("🇺🇸", "US"), "238": ("🇨🇻", "CV"), "1345": ("🇰🇾", "KY"), "236": ("🇨🇫", "CF"), "235": ("🇹🇩", "TD"), "56": ("🇨🇱", "CL"), "86": ("🇨🇳", "CN"), "57": ("🇨🇴", "CO"), "269": ("🇰🇲", "KM"), "385": ("🇭🇷", "HR"), "53": ("🇨🇺", "CU"), "357": ("🇨🇾", "CY"), "420": ("🇨🇿", "CZ"), "45": ("🇩🇰", "DK"), "253": ("🇩🇯", "DJ"), "1767": ("🇩🇲", "DM"), "1809": ("🇩🇴", "DO"), "593": ("🇪🇨", "EC"), "20": ("🇪🇬", "EG"), "503": ("🇸🇻", "SV"), "240": ("🇬🇶", "GQ"), "291": ("🇪🇷", "ER"), "372": ("🇪🇪", "EE"), "251": ("🇪🇹", "ET"), "679": ("🇫🇯", "FJ"), "358": ("🇫🇮", "FI"), "33": ("🇫🇷", "FR"), "241": ("🇬🇦", "GA"), "220": ("🇬🇲", "GM"), "995": ("🇬🇪", "GE"), "49": ("🇩🇪", "DE"), "233": ("🇬🇭", "GH"), "350": ("🇬🇮", "GI"), "30": ("🇬🇷", "GR"), "299": ("🇬🇱", "GL"), "1473": ("🇬🇩", "GD"), "502": ("🇬🇹", "GT"), "224": ("🇬🇳", "GN"), "245": ("🇬🇼", "GW"), "592": ("🇬🇾", "GY"), "509": ("🇭🇹", "HT"), "504": ("🇭🇳", "HN"), "852": ("🇭🇰", "HK"), "36": ("🇭🇺", "HU"), "354": ("🇮🇸", "IS"), "91": ("🇮🇳", "IN"), "62": ("🇮🇩", "ID"), "98": ("🇮🇷", "IR"), "964": ("🇮🇶", "IQ"), "353": ("🇮🇪", "IE"), "972": ("🇮🇱", "IL"), "39": ("🇮🇹", "IT"), "225": ("🇨🇮", "CI"), "1876": ("🇯🇲", "JM"), "81": ("🇯🇵", "JP"), "962": ("🇯🇴", "JO"), "7": ("🇰🇿", "KZ"), "254": ("🇰🇪", "KE"), "965": ("🇰🇼", "KW"), "996": ("🇰🇬", "KG"), "856": ("🇱🇦", "LA"), "371": ("🇱🇻", "LV"), "961": ("🇱🇧", "LB"), "266": ("🇱🇸", "LS"), "231": ("🇱🇷", "LR"), "218": ("🇱🇾", "LY"), "370": ("🇱🇹", "LT"), "352": ("🇱🇺", "LU"), "853": ("🇲🇴", "MO"), "389": ("🇲🇰", "MK"), "261": ("🇲🇬", "MG"), "265": ("🇲🇼", "MW"), "60": ("🇲🇾", "MY"), "960": ("🇲🇻", "MV"), "223": ("🇲🇱", "ML"), "356": ("🇲🇹", "MT"), "222": ("🇲🇷", "MR"), "230": ("🇲🇺", "MU"), "52": ("🇲🇽", "MX"), "373": ("🇲🇩", "MD"), "976": ("🇲🇳", "MN"), "212": ("🇲🇦", "MA"), "258": ("🇲🇿", "MZ"), "95": ("🇲🇲", "MM"), "264": ("🇳🇦", "NA"), "977": ("🇳🇵", "NP"), "31": ("🇳🇱", "NL"), "64": ("🇳🇿", "NZ"), "505": ("🇳🇮", "NI"), "227": ("🇳🇪", "NE"), "234": ("🇳🇬", "NG"), "850": ("🇰🇵", "KP"), "47": ("🇳🇴", "NO"), "968": ("🇴🇲", "OM"), "92": ("🇵🇰", "PK"), "970": ("🇵🇸", "PS"), "507": ("🇵🇦", "PA"), "675": ("🇵🇬", "PG"), "595": ("🇵🇾", "PY"), "51": ("🇵🇪", "PE"), "63": ("🇵🇭", "PH"), "48": ("🇵🇱", "PL"), "351": ("🇵🇹", "PT"), "974": ("🇶🇦", "QA"), "40": ("🇷🇴", "RO"), "7": ("🇷🇺", "RU"), "250": ("🇷🇼", "RW"), "966": ("🇸🇦", "SA"), "221": ("🇸🇳", "SN"), "381": ("🇷🇸", "RS"), "248": ("🇸🇨", "SC"), "232": ("🇸🇱", "SL"), "65": ("🇸🇬", "SG"), "421": ("🇸🇰", "SK"), "386": ("🇸🇮", "SI"), "252": ("🇸🇴", "SO"), "27": ("🇿🇦", "ZA"), "82": ("🇰🇷", "KR"), "211": ("🇸🇸", "SS"), "34": ("🇪🇸", "ES"), "94": ("🇱🇰", "LK"), "249": ("🇸🇩", "SD"), "46": ("🇸🇪", "SE"), "41": ("🇨🇭", "CH"), "963": ("🇸🇾", "SY"), "886": ("🇹🇼", "TW"), "992": ("🇹🇯", "TJ"), "255": ("🇹🇿", "TZ"), "66": ("🇹🇭", "TH"), "228": ("🇹🇬", "TG"), "216": ("🇹🇳", "TN"), "90": ("🇹🇷", "TR"), "993": ("🇹🇲", "TM"), "256": ("🇺🇬", "UG"), "380": ("🇺🇦", "UA"), "971": ("🇦🇪", "AE"), "44": ("🇬🇧", "GB"), "598": ("🇺🇾", "UY"), "998": ("🇺🇿", "UZ"), "58": ("🇻🇪", "VE"), "84": ("🇻🇳", "VN"), "967": ("🇾🇪", "YE"), "260": ("🇿🇲", "ZM"), "263": ("🇿🇼", "ZW")}
def get_service_tag(msg):
m = msg.lower()
if "whatsapp" in m: return "#WS"
elif "facebook" in m: return "#FB"
elif "telegram" in m: return "#TG"
elif "google" in m: return "#GGL"
return "#SRV"
def get_lang(msg):
m = msg.lower()
if any(x in m for x in ["codigo", "cuenta", "registrada"]): return "Spanish"
if "votre" in m: return "French"
return "English"
async def auto_delete_worker():
while True:
now = time.time()
for item in messages_to_delete[:]:
if now >= item[3]:
try:
await item[0].delete_message(chat_id=item[1], message_id=item[2])
messages_to_delete.remove(item)
except: pass
await asyncio.sleep(15)
async def process_entry(d):
try:
num_raw = str(d.get('num', ''))
msg = d.get('message', '')
if not num_raw or not msg: return
# ইউনিক আইডি জেনারেট করে ডুপ্লিকেট রোধ
uid = hashlib.md5(f"{num_raw}{msg}".encode()).hexdigest()
if uid in sent_messages: return
sent_messages.add(uid)
# নাম্বার এবং কান্ট্রি ফ্ল্যাগ সেট করা
num_clean = re.sub(r'\D', '', num_raw)
flag, sn = ("🌍", "UN")
for length in [5, 4, 3, 2, 1]:
if num_clean[:length] in COUNTRY_MAP:
flag, sn = COUNTRY_MAP[num_clean[:length]]
break
# ওটিপি এক্সট্রাকশন (আপনার উদাহরণের 861-979 সাপোর্টসহ)
otp = "N/A"
m = re.search(r"(\d{3}-\d{3})|(\d{4,8})", msg)
if m: otp = m.group(0)
masked = f"{num_clean[:5]}RTS{num_clean[-3:]}" if len(num_clean) >= 8 else num_clean
display_text = f"{flag} #{sn} {get_service_tag(msg)} ✆ *{masked}* 🌐\n#{get_lang(msg)}"
kb = InlineKeyboardMarkup([
[InlineKeyboardButton(f"📋 {otp}", copy_text=CopyTextButton(otp))],
[InlineKeyboardButton("📱 Number Channel", url="https://t.me/Sinha_Method_Universe_Number"),
InlineKeyboardButton("📂 Main Channel", url="https://t.me/RockStar_main_channel")]
])
# আসা মাত্রই সরাসরি টেলিগ্রামে ডেলিভারি
sent = await bot.send_message(chat_id=CHAT_ID, text=display_text, parse_mode=ParseMode.MARKDOWN, reply_markup=kb)
messages_to_delete.append((bot, CHAT_ID, sent.message_id, time.time() + DELETE_AFTER))
# মেমোরি জ্যাম রোধে ওল্ড ডাটা রিমুভ
if len(sent_messages) > 1000: sent_messages.clear()
except: pass
async def main():
print("💎 ROCKSTAR ENGINE STARTED | REFRESH: 1s")
asyncio.create_task(auto_delete_worker())
async with aiohttp.ClientSession() as session:
while True:
try:
# এপিআই হোমপেজ রিফ্রেশ (প্রতি ১ সেকেন্ডে)
async with session.get(API_URL, params={"token": API_TOKEN}, timeout=4) as resp:
if resp.status == 200:
res = await resp.json()
entries = res.get('data', [])
if entries:
# এপিআই-র সবার উপরের ৩টি মেসেজ চেক করবে (লেটেস্টগুলো শুরুতে থাকে)
for entry in entries[:3]:
await process_entry(entry)
await asyncio.sleep(CHECK_INTERVAL)
except:
await asyncio.sleep(1)
if __name__ == "__main__":
asyncio.run(main())