import os import telebot from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton from pymongo import MongoClient # ===================================================================== # ⚙️ Configurations (ඔබගේ විස්තර මෙතැනට ඇතුළත් කරන්න) # ===================================================================== BOT_TOKEN = "8355828613:AAEA1d4TxAQu9bhzOwQuVhvJnsl1V35TYgI" VIDEO_FILE_ID = "BAACAgUAAxkBAAMPanq94M3zh7wx4NxvguC-nd6ii68AAqQmAAJ6pdlXaSBhm38xWj89BA" ADMIN_ID = 6858847099 # ඔබගේ නිවැරදි Telegram ID එක (ඉලක්කම් පමණි) # --- චැනල් එක Public ද Private ද යන්න මෙතැනින් තෝරන්න --- IS_PRIVATE_CHANNEL = False # Private චැනල් එකක් නම් True කරන්න. Public නම් False කරන්න. CHANNEL_TARGET = "valaththahouse" # චැනල් එකේ Username එක (Public නම්) හෝ ID එක (Private නම්) # 🌐 MongoDB Cloud Connection ලින්ක් එක මෙතැනට දමන්න MONGO_URI = "mongodb+srv://niriellagedilrukshi_db_user:ZD3easLLhGGB0HuN@cluster0.n2d8wxh.mongodb.net/?appName=Cluster0" # ===================================================================== bot = telebot.TeleBot(BOT_TOKEN) # 🏛️ MongoDB Database එක සම්බන්ධ කිරීම try: mongo_client = MongoClient(MONGO_URI) db = mongo_client["telegram_bot_db"] # Database එකේ නම db_users = db["users"] # Table (Collection) එකේ නම print("✅ MongoDB Cloud Database එක සාර්ථකව සම්බන්ධ වුණා!") except Exception as e: print(f"❌ Database Connection Error: {e}") # 1. Force Subscribe පරීක්ෂා කිරීමේ සහ Join Button එක සාදන ශ්‍රිතය def check_user_status(message): user_id = message.from_user.id try: if IS_PRIVATE_CHANNEL: chat_check_target = int(f"-100{CHANNEL_TARGET}") else: chat_check_target = f"@{CHANNEL_TARGET}" member = bot.get_chat_member(chat_check_target, user_id) if member.status in ['member', 'administrator', 'creator']: return True except Exception as e: print(f"Error checking status: {e}") pass if IS_PRIVATE_CHANNEL: channel_link = f"https://t.me/{CHANNEL_TARGET}" else: channel_link = f"https://t.me/{CHANNEL_TARGET}" join_button = InlineKeyboardMarkup() join_button.add(InlineKeyboardButton("📢 Channel එකට Join වෙන්න", url=channel_link)) join_button.add(InlineKeyboardButton("🔄 මම Join වුණා (Check)", callback_data="check_sub")) bot.send_message( message.chat.id, "⚠️ ඉදිරියට යෑමට නම් ඔබ අපගේ නිල Channel එකට අනිවාර්යයෙන්ම Join විය යුතුය!", reply_markup=join_button ) return False # 2. User ගේ වත්මන් තත්ත්වය පෙන්වන Dashboard එක def show_dashboard(chat_id, user_id): user = db_users.find_one({"user_id": user_id}) invites = user.get("invite_count", 0) if user else 0 bot_username = bot.get_me().username ref_link = f"https://t.me/{bot_username}?start={user_id}" if invites >= 3: bot.send_message(chat_id, "🎉 සුභ පැතුම්! ඔබ සාර්ථකව මිතුරන් 3 දෙනෙකු Invite කර ඇත. මෙන්න ඔබ ඉල්ලූ වීඩියෝව:") bot.send_video(chat_id, VIDEO_FILE_ID) else: msg_text = ( f"👋 සාදරයෙන් පිළිගනිමු!\n\n" f"🎬 මෙම වීඩියෝව ලබා ගැනීමට නම් ඔබ තව මිතුරන් **{3 - invites} දෙනෙකු** Invite කළ යුතුය.\n\n" f"📊 ඔබගේ වත්මන් Invites ගණන: {invites}/3\n\n" f"🔗 ඔබගේ විශේෂ Invite Link එක පහතින් ලබාගෙන මිතුරන් අතර Share කරන්න:" ) share_button = InlineKeyboardMarkup() share_url = f"https://t.me/share/url?url={ref_link}&text=මේ%20Bot%20එකෙන්%20නියම%20වීඩියෝ%20එකක්%20දෙනවා!%20දැන්ම%20බලන්න." share_button.add(InlineKeyboardButton("🔗 ලින්ක් එක Share කරන්න", url=share_url)) bot.send_message(chat_id, msg_text, reply_markup=share_button) # 3. Start Command එක හැසිරවීම @bot.message_handler(commands=['start']) def start_command(message): user_id = message.from_user.id user_name = message.from_user.first_name text = message.text # MongoDB එකේ දැනටමත් මේ User ඉන්නවාදැයි පරීක්ෂා කිරීම is_user_exists = db_users.find_one({"user_id": user_id}) if not is_user_exists: referred_by = None # ලින්ක් එකකින් ආපු කෙනෙක්ද (Referral) කියා බැලීම if len(text.split()) > 1: possible_referrer = text.split()[1] if possible_referrer.isdigit(): referrer_id = int(possible_referrer) if referrer_id != user_id: # Invite කළ කෙනා ඇත්තටම අපේ Database එකේ ඉන්නවාදැයි බැලීම if db_users.find_one({"user_id": referrer_id}): referred_by = referrer_id # 🆕 අලුත් User ව MongoDB එකට සේව් කිරීම db_users.insert_one({ "user_id": user_id, "name": user_name, "referred_by": referred_by, "invite_count": 0 }) print(f"🆕 අලුත් User කෙනෙක් Cloud Database එකට සේව් වුණා: {user_name} ({user_id})") # Invite කළ කෙනාට Point එකක් එකතු කර Notification එකක් යැවීම if referred_by: db_users.update_one({"user_id": referred_by}, {"$inc": {"invite_count": 1}}) referrer_data = db_users.find_one({"user_id": referred_by}) current_invites = referrer_data.get("invite_count", 0) if referrer_data else 0 try: bot.send_message( referred_by, f"🎉 ඔබගේ ලින්ක් එකෙන් අලුත් සාමාජිකයෙක් ({user_name}) එකතු වුණා!\n" f"ඔබගේ වත්මන් Invites ගණන: {current_invites}/3" ) except Exception: pass if not check_user_status(message): return show_dashboard(message.chat.id, user_id) # 4. Callback Query හැසිරවීම @bot.callback_query_handler(func=lambda call: call.data == "check_sub") def check_callback(call): user_id = call.from_user.id try: if IS_PRIVATE_CHANNEL: chat_check_target = int(f"-100{CHANNEL_TARGET}") else: chat_check_target = f"@{CHANNEL_TARGET}" member = bot.get_chat_member(chat_check_target, user_id) if member.status in ['member', 'administrator', 'creator']: bot.answer_callback_query(call.id, "✅ ස්තූතියි! ඔබ සාර්ථකව Channel එකට Join වී ඇත.") bot.delete_message(call.message.chat.id, call.message.message_id) show_dashboard(call.message.chat.id, user_id) return except Exception: pass bot.answer_callback_query(call.id, "❌ ඔබ තවමත් Channel එකට Join වී නැත! කරුණාකර Join වී නැවත උත්සාහ කරන්න.", show_alert=True) # 5. Stats Command (Admin Only) @bot.message_handler(commands=['stats']) def get_stats(message): if message.from_user.id == ADMIN_ID: total_users = db_users.count_documents({}) bot.reply_to(message, f"📊 **Bot Statistics:**\n\n👥 Total Users: {total_users}") # 6. Broadcast Command (Admin Only) @bot.message_handler(commands=['broadcast']) def broadcast_msg(message): if message.from_user.id == ADMIN_ID: if not message.reply_to_message: bot.reply_to(message, "❌ කරුණාකර ඔබ හැමෝටම යැවිය යුතු පණිවිඩයට Reply කරමින් /broadcast ලෙස Type කරන්න.") return bot.reply_to(message, "⏳ Broadcast එක ආරම්භ වුණා. මඳක් රැඳී සිටින්න...") all_users = db_users.find({}, {"user_id": 1}) success = 0 failed = 0 for user in all_users: try: bot.copy_message(chat_id=user["user_id"], from_chat_id=message.chat.id, message_id=message.reply_to_message.message_id) success += 1 except Exception: failed += 1 bot.send_message(message.chat.id, f"📢 **Broadcast එක අවසන්!**\n\n✅ සාර්ථකව ලැබුණා: {success}\n❌ අසාර්ථක වුණා: {failed}") print("Bot එක සාර්ථකව වැඩ කරමින් පවතී (Telebot + MongoDB)...") bot.infinity_polling()