[+] on_none

[+] WIP PermsSystem
This commit is contained in:
2024-08-02 09:01:44 +03:00
parent 633e235342
commit 1e685e69ed
3 changed files with 107 additions and 3 deletions

View File

@@ -32,9 +32,10 @@ class BadCompleter(Exception): ...
class MyNestedCompleter(Completer):
def __init__(self, options, ignore_case=True):
def __init__(self, options, ignore_case=True, on_none=None):
self.options = self._from_nested_dict(options)
self.ignore_case = ignore_case
self.on_none = on_none
def __repr__(self) -> str:
return f"MyNestedCompleter({self.options!r}, ignore_case={self.ignore_case!r})"
@@ -76,6 +77,8 @@ class MyNestedCompleter(Completer):
if " " in text:
first_term = text.split()[0]
completer = self.options.get(first_term)
if completer is None:
completer = self.on_none
# If we have a sub completer, use this for the completions.
if completer is not None:
@@ -104,6 +107,8 @@ class MyNestedCompleter(Completer):
players_completer = MyNestedCompleter({})
builtins.Completer = MyNestedCompleter
builtins.players_completer = players_completer
class Console:

View File

@@ -0,0 +1,98 @@
# -*- coding: utf-8 -*-
# Developed by KuiToi Dev
# File modules.PermsSystem
# Written by: SantaSpeen
# Version 1.0
# Licence: FPA
# (c) kuitoi.su 2024
from core import get_logger
import sqlite3
class PermsSystem:
_db_name = "users.db3"
def __init__(self):
self.log = get_logger("PermsSystem")
self._create_base()
self._completer_permissions = Completer({})
# set <permission | group> | unset <permission | group>
self._completer_group = Completer({}) # <group_name> info | permission
_completer_after_user = Completer({
"info": None,
"permission": {"set": self._completer_permissions, "unset": self._completer_permissions}
})
self._completer_user = Completer({}, on_none=_completer_after_user) # <nick> info | permission
ev.register("add_perm_to_alias", lambda ev: self._completer_permissions.options.update({ev['args'][0]: None}))
ev.call_event("add_perm_to_alias", "cmd.perms")
console.add_command("perms", self._parse_console,
None,
"Permission module",
{"perms": {
"groups": {
"create": None,
"delete": None,
"list": None
},
"user": self._completer_user,
"group": self._completer_group,
"reload": None,
}})
ev.register("onChatReceive", self._parse_chat)
ev.register("onPlayerJoin", self._process_new_player)
def _create_base(self):
con = sqlite3.connect(self._db_name)
cursor = con.cursor()
# Create table for users
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
mp_id INTEGER UNIQUE,
nick TEXT NOT NULL,
playtime INTEGER
)
''')
# Create table for perms
cursor.execute('''
CREATE TABLE IF NOT EXISTS perms (
id INTEGER PRIMARY KEY AUTOINCREMENT,
mp_id INTEGER,
rule TEXT,
`group` TEXT,
FOREIGN KEY(mp_id) REFERENCES users(mp_id)
)
''')
# Create table for groups
cursor.execute('''
CREATE TABLE IF NOT EXISTS groups (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL,
rules TEXT NOT NULL
)
''')
con.commit()
con.close()
def _parse_console(self, x):
pass
def _parse_chat(self, ev):
pass
def add_player(self, player):
self._completer_user.options.update({player.nick: None})
self.log.debug(f'Added user: {player.nick}')
def have_permission(self, ev):
player = ev['kwargs']['player']
def _process_new_player(self, ev):
player = ev['kwargs']['player']
self.add_player(player)

View File

@@ -6,8 +6,9 @@
# Licence: FPA
# (c) kuitoi.su 2023
from .ConfigProvider import ConfigProvider, Config
from .ConsoleSystem import Console
from .EventsSystem import EventsSystem
from .ConsoleSystem import Console
from .PluginsLoader import PluginsLoader
from .RateLimiter import RateLimiter
from .i18n import MultiLanguage
from .RateLimiter import RateLimiter
from .PermsSystem import PermsSystem