mirror of
https://github.com/SantaSpeen/Rcon-VK-Bot.git
synced 2026-10-27 14:30:26 +00:00
[-] hosts.*.meta.history
[+] debug log [+] [PERMS] some checks [+] parents support [+] is_allowed to prepare for new...
This commit is contained in:
1 parent
a56a6506d6
commit
186053f8ec
2 files changed
+52
-21
No files matched your search
@@ -71,8 +71,9 @@ hosts:
|
|||||||
# Разрешение: bot.rcon.<name>; bot.online.<name>; bot.history.<name>
|
# Разрешение: bot.rcon.<name>; bot.online.<name>; bot.history.<name>
|
||||||
# При запуске бота будет проверка доступности всего
|
# При запуске бота будет проверка доступности всего
|
||||||
rcon: 2 # RCON будет доступен по команде .rcon lobby <cmd> (разрешение: bot.rcon.lobby)
|
rcon: 2 # RCON будет доступен по команде .rcon lobby <cmd> (разрешение: bot.rcon.lobby)
|
||||||
online: 2 # !online будет доступен по команде !online lobby (разрешение: bot.online.lobby)
|
# !online будет доступен по команде !online lobby (разрешение: bot.online.lobby)
|
||||||
history: 2 # !history будет доступен по команде !history lobby (разрешение: bot.history.lobby)
|
# !history будет доступен по команде !history lobby (разрешение: bot.history.lobby)
|
||||||
|
online: 2
|
||||||
rcon: # RCON подключение
|
rcon: # RCON подключение
|
||||||
host: 192.168.0.31
|
host: 192.168.0.31
|
||||||
port: 15101
|
port: 15101
|
||||||
@@ -88,7 +89,6 @@ hosts:
|
|||||||
java: true
|
java: true
|
||||||
rcon: 1
|
rcon: 1
|
||||||
online: 2
|
online: 2
|
||||||
history: 2
|
|
||||||
rcon:
|
rcon:
|
||||||
host: 192.168.0.31
|
host: 192.168.0.31
|
||||||
port: 15100
|
port: 15100
|
||||||
@@ -104,7 +104,6 @@ hosts:
|
|||||||
java: true
|
java: true
|
||||||
rcon: 2
|
rcon: 2
|
||||||
online: 2
|
online: 2
|
||||||
history: 0
|
|
||||||
rcon:
|
rcon:
|
||||||
host: 192.168.0.31
|
host: 192.168.0.31
|
||||||
port: 15108
|
port: 15108
|
||||||
@@ -120,7 +119,6 @@ hosts:
|
|||||||
important: true
|
important: true
|
||||||
rcon: 0
|
rcon: 0
|
||||||
online: 1
|
online: 1
|
||||||
history: 1
|
|
||||||
rcon: null
|
rcon: null
|
||||||
mine:
|
mine:
|
||||||
host: 192.168.0.31
|
host: 192.168.0.31
|
||||||
@@ -141,6 +139,7 @@ if not os.path.exists(config_dir):
|
|||||||
|
|
||||||
|
|
||||||
def init_logger():
|
def init_logger():
|
||||||
|
log_debug = "./logs/debug.log"
|
||||||
log_file = "./logs/latest.log"
|
log_file = "./logs/latest.log"
|
||||||
log_dir = os.path.dirname(log_file) + "/"
|
log_dir = os.path.dirname(log_file) + "/"
|
||||||
if not os.path.exists(log_dir):
|
if not os.path.exists(log_dir):
|
||||||
@@ -160,9 +159,10 @@ def init_logger():
|
|||||||
zipf.write(file, os.path.basename(file))
|
zipf.write(file, os.path.basename(file))
|
||||||
os.remove(file)
|
os.remove(file)
|
||||||
logger.remove(0)
|
logger.remove(0)
|
||||||
logger.add(log_file)
|
logger.add(log_debug, level=0)
|
||||||
|
logger.add(log_file, format="{time:YYYY-MM-DD HH:mm:ss.SSS} | {level: <8} | {message}", level="INFO")
|
||||||
logger.add(sys.stdout, format="\r<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
|
logger.add(sys.stdout, format="\r<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
|
||||||
"<level>{level: <8}</level> | {message}")
|
"<level>{level: <8}</level> | {message}", level="INFO")
|
||||||
|
|
||||||
|
|
||||||
init_logger()
|
init_logger()
|
||||||
|
|||||||
+45
-14
@@ -3,27 +3,54 @@ from pathlib import Path
|
|||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from modules import yaml, raw_config_perms
|
from modules import yaml, raw_config_perms, enter_to_exit
|
||||||
|
|
||||||
|
|
||||||
class Permissions:
|
class Permissions:
|
||||||
perm_file = Path("permissions.yml")
|
perm_file = Path("permissions.yml")
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
|
logger.debug(f"[PERMS] Initializing Permissions")
|
||||||
|
logger.debug(f"[PERMS] {kwargs=}")
|
||||||
self._no_role = kwargs.get("noRole")
|
self._no_role = kwargs.get("noRole")
|
||||||
self._no_nick = kwargs.get("noNick")
|
self._no_nick = kwargs.get("noNick")
|
||||||
self.no_rights = kwargs.get("noRights")
|
self.no_rights = kwargs.get("noRights")
|
||||||
self._perms = kwargs['perms']
|
self._perms = kwargs.get('perms')
|
||||||
self._nicks = kwargs['nicks']
|
if not self._perms or not isinstance(self._perms, dict):
|
||||||
|
logger.error(f"[PERMS] Блок: {"perms"!r}, в {self.perm_file!r} - Не валидный")
|
||||||
|
logger.debug(f"perms: {type(self._perms)}")
|
||||||
|
logger.debug(self._perms)
|
||||||
|
enter_to_exit()
|
||||||
|
self._nicks = kwargs.get('nicks', {})
|
||||||
self._members = {}
|
self._members = {}
|
||||||
self.__handle_members()
|
self.__handle_members()
|
||||||
logger.info(f"[PERMS] Права загружены")
|
logger.info(f"[PERMS] Права загружены")
|
||||||
|
|
||||||
|
def __handle_parents(self, p=None):
|
||||||
|
if p is None:
|
||||||
|
p = {}
|
||||||
|
for parent, v in self._perms.items():
|
||||||
|
for child in v.get("parent", []):
|
||||||
|
p[child] = parent
|
||||||
|
if p.get(child) == parent and p.get(parent) == child:
|
||||||
|
logger.warning(f"[PERMS] Рекурсивное присваивание запрещено: "
|
||||||
|
f"perms.{child}.parent.{parent} - perms.{parent}.parent.{child} ({self.perm_file!r})")
|
||||||
|
del p[parent]
|
||||||
|
|
||||||
|
for child, parent in p.items():
|
||||||
|
_parent = self._perms.get(child)
|
||||||
|
if _parent:
|
||||||
|
logger.debug(f"[PERMS] Add {child}.allow to {parent}.allow")
|
||||||
|
self._perms[parent]['allow'] += self._perms[child]['allow']
|
||||||
|
logger.debug(self._perms[parent]['allow'])
|
||||||
|
else:
|
||||||
|
logger.warning(f"[PERMS] Группа {child!r} - не найдена (perms.{parent}.parent.{child})")
|
||||||
|
|
||||||
def __handle_members(self):
|
def __handle_members(self):
|
||||||
|
self.__handle_parents()
|
||||||
for role, role_data in self._perms.items():
|
for role, role_data in self._perms.items():
|
||||||
members = role_data.get("ids", [])
|
members = role_data.get("ids", [])
|
||||||
allow = role_data.get("allow", [])
|
allow = set(role_data.get("allow", []))
|
||||||
allow = set(allow)
|
|
||||||
if len(allow) > 0:
|
if len(allow) > 0:
|
||||||
for member in members:
|
for member in members:
|
||||||
if member in self._members:
|
if member in self._members:
|
||||||
@@ -35,16 +62,20 @@ class Permissions:
|
|||||||
"nick": self._nicks.get(member) or self._no_nick,
|
"nick": self._nicks.get(member) or self._no_nick,
|
||||||
"allow": allow
|
"allow": allow
|
||||||
}
|
}
|
||||||
|
logger.debug(f"{self._members=}")
|
||||||
|
|
||||||
def is_allowed(self, member, cmd):
|
def is_allowed(self, member: int, _perms: str | list) -> tuple[bool, str]:
|
||||||
u = self._members.get(member)
|
if isinstance(_perms, str):
|
||||||
if u:
|
_perms = [_perms]
|
||||||
friendly = u['friendly']
|
for perm in _perms:
|
||||||
allow = u['allow']
|
user = self._members.get(member)
|
||||||
if ("*" in allow) or (cmd in allow):
|
if user:
|
||||||
return True, friendly
|
friendly = user['friendly']
|
||||||
return False, friendly
|
allow = user['allow']
|
||||||
return False, self._no_role
|
if (("*" in allow) or (perm in allow)) and (f"-{perm}" not in allow):
|
||||||
|
return True, friendly
|
||||||
|
return False, friendly
|
||||||
|
return False, self._no_role
|
||||||
|
|
||||||
def get_role(self, member):
|
def get_role(self, member):
|
||||||
u = self._members.get(member)
|
u = self._members.get(member)
|
||||||
|
|||||||
Reference in new issue
Block a user