mirror of
https://github.com/kuitoi/kuitoi-Server.git
synced 2026-06-19 15:11:25 +00:00
[+] on_none
[+] WIP PermsSystem
This commit is contained in:
@@ -32,9 +32,10 @@ class BadCompleter(Exception): ...
|
|||||||
|
|
||||||
|
|
||||||
class MyNestedCompleter(Completer):
|
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.options = self._from_nested_dict(options)
|
||||||
self.ignore_case = ignore_case
|
self.ignore_case = ignore_case
|
||||||
|
self.on_none = on_none
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"MyNestedCompleter({self.options!r}, ignore_case={self.ignore_case!r})"
|
return f"MyNestedCompleter({self.options!r}, ignore_case={self.ignore_case!r})"
|
||||||
@@ -76,6 +77,8 @@ class MyNestedCompleter(Completer):
|
|||||||
if " " in text:
|
if " " in text:
|
||||||
first_term = text.split()[0]
|
first_term = text.split()[0]
|
||||||
completer = self.options.get(first_term)
|
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 we have a sub completer, use this for the completions.
|
||||||
if completer is not None:
|
if completer is not None:
|
||||||
@@ -104,6 +107,8 @@ class MyNestedCompleter(Completer):
|
|||||||
|
|
||||||
|
|
||||||
players_completer = MyNestedCompleter({})
|
players_completer = MyNestedCompleter({})
|
||||||
|
builtins.Completer = MyNestedCompleter
|
||||||
|
builtins.players_completer = players_completer
|
||||||
|
|
||||||
|
|
||||||
class Console:
|
class Console:
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -6,8 +6,9 @@
|
|||||||
# Licence: FPA
|
# Licence: FPA
|
||||||
# (c) kuitoi.su 2023
|
# (c) kuitoi.su 2023
|
||||||
from .ConfigProvider import ConfigProvider, Config
|
from .ConfigProvider import ConfigProvider, Config
|
||||||
from .ConsoleSystem import Console
|
|
||||||
from .EventsSystem import EventsSystem
|
from .EventsSystem import EventsSystem
|
||||||
|
from .ConsoleSystem import Console
|
||||||
from .PluginsLoader import PluginsLoader
|
from .PluginsLoader import PluginsLoader
|
||||||
from .RateLimiter import RateLimiter
|
|
||||||
from .i18n import MultiLanguage
|
from .i18n import MultiLanguage
|
||||||
|
from .RateLimiter import RateLimiter
|
||||||
|
from .PermsSystem import PermsSystem
|
||||||
|
|||||||
Reference in New Issue
Block a user