mirror of
https://github.com/iio612/DEFENDER.git
synced 2026-02-13 11:14:23 +00:00
- New capability in base.py to patch the database
- Some minor updates on installation.py.
- Translation feature:
- New library requirement (pyyaml)
- New translation systeme implemented.
- New class translation.py added.
- Module folder updated by adding new folder language.
- Core module updated as well with new language folder.
106 lines
3.2 KiB
Python
106 lines
3.2 KiB
Python
from typing import TYPE_CHECKING, Optional
|
|
from core.definition import MCommand
|
|
|
|
if TYPE_CHECKING:
|
|
from core.loader import Loader
|
|
|
|
class Command:
|
|
|
|
DB_COMMANDS: list['MCommand'] = []
|
|
|
|
def __init__(self, loader: 'Loader'):
|
|
self.Loader = loader
|
|
self.Base = loader.Base
|
|
self.Logs = loader.Logs
|
|
|
|
def build(self, new_command_obj: MCommand) -> bool:
|
|
|
|
command = self.get_command(new_command_obj.command_name, new_command_obj.module_name)
|
|
if command is None:
|
|
self.DB_COMMANDS.append(new_command_obj)
|
|
return True
|
|
|
|
# Update command if it exist
|
|
# Removing the object
|
|
if self.drop_command(command.command_name, command.module_name):
|
|
# Add the new object
|
|
self.DB_COMMANDS.append(new_command_obj)
|
|
return True
|
|
|
|
return False
|
|
|
|
def get_command(self, command_name: str, module_name: str) -> Optional[MCommand]:
|
|
|
|
for command in self.DB_COMMANDS:
|
|
if command.command_name.lower() == command_name and command.module_name == module_name:
|
|
return command
|
|
|
|
return None
|
|
|
|
def drop_command(self, command_name: str, module_name: str) -> bool:
|
|
|
|
cmd = self.get_command(command_name, module_name)
|
|
if cmd is not None:
|
|
self.DB_COMMANDS.remove(cmd)
|
|
return True
|
|
|
|
return False
|
|
|
|
def drop_command_by_module(self, module_name: str) -> bool:
|
|
"""Drop all command by module
|
|
|
|
Args:
|
|
module_name (str): The module name
|
|
|
|
Returns:
|
|
bool: True
|
|
"""
|
|
tmp_model: list[MCommand] = []
|
|
|
|
for command in self.DB_COMMANDS:
|
|
if command.module_name.lower() == module_name.lower():
|
|
tmp_model.append(command)
|
|
|
|
for c in tmp_model:
|
|
self.DB_COMMANDS.remove(c)
|
|
|
|
self.Logs.debug(f"[COMMAND] Drop command for module {module_name}")
|
|
return True
|
|
|
|
def get_ordered_commands(self) -> list[MCommand]:
|
|
return sorted(self.DB_COMMANDS, key=lambda c: (c.command_level, c.module_name))
|
|
|
|
def get_commands_by_level(self, level: int = 0) -> Optional[list[MCommand]]:
|
|
|
|
cmd_list = self.get_ordered_commands()
|
|
new_list: list[MCommand] = []
|
|
|
|
for cmd in cmd_list:
|
|
if cmd.command_level <= level:
|
|
new_list.append(cmd)
|
|
|
|
return new_list
|
|
|
|
def is_client_allowed_to_run_command(self, nickname: str, command_name: str) -> bool:
|
|
admin = self.Loader.Admin.get_admin(nickname)
|
|
admin_level = admin.level if admin else 0
|
|
commands = self.get_commands_by_level(admin_level)
|
|
|
|
if command_name in [command.command_name for command in commands]:
|
|
return True
|
|
|
|
return False
|
|
|
|
def is_command_exist(self, command_name: str) -> bool:
|
|
"""Check if the command name exist
|
|
|
|
Args:
|
|
command_name (str): The command name you want to check
|
|
|
|
Returns:
|
|
bool: True if the command exist
|
|
"""
|
|
if command_name.lower() in [command.command_name.lower() for command in self.get_ordered_commands()]:
|
|
return True
|
|
return False
|