[~] Update versions in req.txt

[~] Rename register_event > register
This commit is contained in:
2024-07-15 11:39:31 +03:00
parent c838d42dd8
commit 8fbd2cc330
23 changed files with 93 additions and 99 deletions

View File

@@ -23,7 +23,7 @@ _常量_\
_与open()参数相同_\
在kt.dir中打开文件
### kt.register_event(event_name: str, event_func: function)
### kt.register(event_name: str, event_func: function)
_`event_name: str` -> 作为`event_func`调用的事件名称._\
_`event_func: function` -> 要调用的函数._

View File

@@ -21,7 +21,7 @@ async def load():
json.dump(config, f)
cgf = config
log.info(cgf)
ev.register_event("my_event", my_event_handler)
ev.register("my_event", my_event_handler)
log.info("Плагин загружен успешно.")

View File

@@ -21,7 +21,7 @@ def load():
json.dump(config, f)
cgf = config
log.info(cgf)
ev.register_event("my_event", my_event_handler)
ev.register("my_event", my_event_handler)
log.info("Плагин загружен успешно.")

View File

@@ -28,7 +28,7 @@ def my_event_handler(event_data):
def load():
# 初始化插件
ev.register_event("my_event", my_event_handler)
ev.register("my_event", my_event_handler)
log.info("插件已成功加载。")
@@ -47,7 +47,7 @@ def unload():
您还可以在[example.py](examples/example.py)中找到更广泛的示例。
* 建议在`load()`后使用`open()`,否则应使用`kt.load()`-在`plugin/<plugin_name>/<filename>`文件夹中创建一个文件
* 创建自己的事件:`kt.register_event("my_event", my_event_function)`-
* 创建自己的事件:`kt.register("my_event", my_event_function)`-
* 调用事件:`kt.call_event("my_event")`
* 使用数据调用事件:`kt.call_event("my_event", data, data2=data2)`
* 基本事件_稍后会写_
@@ -72,7 +72,7 @@ async def my_event_handler(event_data):
async def load():
# 初始化插件
ev.register_event("my_event", my_event_handler)
ev.register("my_event", my_event_handler)
log.info("插件已成功加载。")
@@ -91,7 +91,7 @@ async def unload():
您还可以在[async_example.py](examples/async_example.py)中找到更广泛的示例。
* 创建自己的事件:`kt.register_event("my_event", my_event_function)`在register_event中检查函数)
* 创建自己的事件:`kt.register("my_event", my_event_function)`在register中检查函数
* 调用async事件`kt.call_async_event("my_event")`
* 使用数据调用async事件`kt.call_async_event("my_event", data, data2=data2)`
* 基本的async事件_稍后会写_

View File

@@ -23,7 +23,7 @@ Returns the directory of the plugin
_Parameters are the same as for open()_\
Opens a file in kt.dir
### kt.register_event(event_name: str, event_func: function)
### kt.register(event_name: str, event_func: function)
_`event_name: str` -> The name of the event that `event_func` will be called on._\
_`event_func: function` -> The function that will be called._

View File

@@ -21,7 +21,7 @@ async def load():
json.dump(config, f)
cgf = config
log.info(cgf)
ev.register_event("my_event", my_event_handler)
ev.register("my_event", my_event_handler)
log.info("Плагин загружен успешно.")

View File

@@ -21,7 +21,7 @@ def load():
json.dump(config, f)
cgf = config
log.info(cgf)
ev.register_event("my_event", my_event_handler)
ev.register("my_event", my_event_handler)
log.info("Плагин загружен успешно.")

View File

@@ -31,7 +31,7 @@ def my_event_handler(event_data):
def load():
# Plugin initialization
kt.register_event("my_event", my_event_handler)
kt.register("my_event", my_event_handler)
log.info("Plugin loaded successfully.")
@@ -50,7 +50,7 @@ def unload():
A more comprehensive example can also be found in [example.py](examples/example.py)
* It is recommended to use `open()` after `load()`, otherwise use `kt.load()` - It creates a file in the `plugin/<plugin_name>/<filename>` folder.
* Creating your own event: `kt.register_event("my_event", my_event_function)` -
* Creating your own event: `kt.register("my_event", my_event_function)` -
* Calling an event: `kt.call_event("my_event")`
* Calling an event with data: `kt.call_event("my_event", data, data2=data2)`
* Base events: _To be added later_
@@ -75,7 +75,7 @@ async def my_event_handler(event_data):
async def load():
# Plugin initialization
kt.register_event("my_event", my_event_handler)
kt.register("my_event", my_event_handler)
log.info("Plugin loaded successfully.")
@@ -94,7 +94,7 @@ async def unload():
A more comprehensive example can also be found in [async_example.py](examples/async_example.py)
* Creating your own event: `kt.register_event("my_event", my_event_function)` (register_event has a function check)
* Creating your own event: `kt.register("my_event", my_event_function)` (register has a function check)
* Calling an async event: `kt.call_async_event("my_event")`
* Calling an async event with data: `kt.call_async_event("my_event", data, data2=data2)`
* Base async events: _To be added later_

View File

@@ -23,7 +23,7 @@ _Константа_\
араметры как у open()_\
Открывает файл в kt.dir
### kt.register_event(event_name: str, event_func: function)
### kt.register(event_name: str, event_func: function)
_`event_name: str` -> Имя ивента, по которому будет вызвана `event_func`._\
_`event_func: function` -> Функция, которая будет вызвана._

View File

@@ -21,7 +21,7 @@ async def load():
json.dump(config, f)
cgf = config
log.info(cgf)
ev.register_event("my_event", my_event_handler)
ev.register("my_event", my_event_handler)
log.info("Плагин загружен успешно.")

View File

@@ -21,7 +21,7 @@ def load():
json.dump(config, f)
cgf = config
log.info(cgf)
ev.register_event("my_event", my_event_handler)
ev.register("my_event", my_event_handler)
log.info("Плагин загружен успешно.")

View File

@@ -28,7 +28,7 @@ def my_event_handler(event_data):
def load():
# Инициализация плагина
ev.register_event("my_event", my_event_handler)
ev.register("my_event", my_event_handler)
log.info("Плагин загружен успешно.")
@@ -46,7 +46,7 @@ def unload():
Так же более обширный пример можно найти в [example.py](examples/example.py)
* Рекомендуется использовать `open()` после `load()`, иначе стоит использовать `kt.load()` - Создаёт файл в папке `plugin/<plugin_name>/<filename>`
* Создание своего ивента : `kt.register_event("my_event", my_event_function)` -
* Создание своего ивента : `kt.register("my_event", my_event_function)` -
* Вызов ивента: `kt.call_event("my_event")`
* Вызов ивента с данными: `kt.call_event("my_event", data, data2=data2)`
* Базовые ивенты: озже напишу_
@@ -71,7 +71,7 @@ async def my_event_handler(event_data):
async def load():
# Инициализация плагина
ev.register_event("my_event", my_event_handler)
ev.register("my_event", my_event_handler)
log.info("Плагин загружен успешно.")
@@ -90,7 +90,7 @@ async def unload():
Так же более обширный пример можно найти в [async_example.py](examples/async_example.py)
* Создание своего ивента: `kt.register_event("my_event", my_event_function)` (в register_event стоит проверка на функцию)
* Создание своего ивента: `kt.register("my_event", my_event_function)` (в register стоит проверка на функцию)
* Вызов async ивента: `kt.call_async_event("my_event")`
* Вызов async ивента: `kt.call_async_event("my_event", data, data2=data2)`
* Базовые async ивенты: озже напишу_

View File

@@ -1,12 +1,12 @@
PyYAML~=6.0
prompt-toolkit~=3.0.38
aiohttp~=3.8.4
aiohttp~=3.9.5
uvicorn~=0.22.0
fastapi~=0.100.0
starlette~=0.27.0
fastapi~=0.109.1
starlette~=0.36.2
pydantic~=2.0.2
click~=8.1.4
lupa~=2.0
toml~=0.10.2
colorama~=0.4.6
cryptography~=41.0.2
cryptography~=42.0.4

View File

@@ -4,8 +4,7 @@
# Version 1.5
# Core version: 0.4.5
# Licence: FPA
# (c) kuitoi.su 2023
# Special thanks to: AI Sage(https://poe.com/Sage), AI falcon-40b-v7(https://OpenBuddy.ai)
# (c) kuitoi.su 2024
__title__ = 'KuiToi-Server'
__description__ = 'BeamingDrive Multiplayer server compatible with BeamMP clients.'

View File

@@ -49,8 +49,8 @@ class Core:
self.client_major_version = "2.0"
self.BeamMP_version = "3.1.1" # 20.07.2023
ev.register_event("_get_BeamMP_version", lambda x: tuple([int(i) for i in self.BeamMP_version.split(".")]))
ev.register_event("_get_player", lambda x: self.get_client(**x['kwargs']))
ev.register("_get_BeamMP_version", lambda x: tuple([int(i) for i in self.BeamMP_version.split(".")]))
ev.register("_get_player", lambda x: self.get_client(**x['kwargs']))
def get_client(self, cid=None, nick=None):
if cid is None and nick is None:

View File

@@ -3,7 +3,7 @@
# Written by: SantaSpeen
# Core version: 0.4.5
# Licence: FPA
# (c) kuitoi.su 2023
# (c) kuitoi.su 2024
import asyncio
import json
@@ -109,4 +109,5 @@ class UDPServer(asyncio.DatagramTransport):
def _stop(self):
self.log.debug("Stopping UDP server")
self.transport.close()
if self.transport:
self.transport.close()

View File

@@ -6,4 +6,50 @@
# Version 1.0
# Licence: FPA
# (c) kuitoi.su 2023
from .config_provider import ConfigProvider, Config
import os
import secrets
import yaml
class Config:
def __init__(self, auth=None, game=None, server=None, rcon=None, options=None, web=None):
self.Auth = auth or {"key": None, "private": True}
self.Game = game or {"map": "gridmap_v2", "players": 8, "max_cars": 1}
self.Server = server or {"name": "KuiToi-Server", "description": "Welcome to KuiToi Server!",
"server_ip": "0.0.0.0", "server_port": 30814}
self.RCON = rcon or {"enabled": False, "server_ip": "127.0.0.1", "server_port": 10383,
"password": secrets.token_hex(16)}
self.Options = options or {"language": "en", "encoding": "utf-8", "speed_limit": 0, "use_queue": False,
"debug": False, "use_lua": False, "log_chat": True}
self.WebAPI = web or {"enabled": False, "server_ip": "127.0.0.1", "server_port": 8433,
"access_token": secrets.token_hex(16)}
def __repr__(self):
return f"{self.__class__.__name__}(Auth={self.Auth!r}, Game={self.Game!r}, Server={self.Server!r}, " \
f"RCON={self.RCON!r}, Options={self.Options!r}, WebAPI={self.WebAPI!r})"
class ConfigProvider:
def __init__(self, config_path):
self.config_path = config_path
self.config = Config()
def open_config(self):
if not os.path.exists(self.config_path):
with open(self.config_path, "w", encoding="utf-8") as f:
yaml.dump(self.config, f)
try:
with open(self.config_path, "r", encoding="utf-8") as f:
self.config = yaml.load(f.read(), yaml.Loader)
except yaml.YAMLError:
print("You have errors in the YAML syntax.")
print("Stopping server.")
exit(1)
return self.config
def save_config(self):
with open(self.config_path, "w", encoding="utf-8") as f:
yaml.dump(self.config, f)

View File

@@ -1,54 +0,0 @@
# -*- coding: utf-8 -*-
# Developed by KuiToi Dev
# File modules.config_provider.config_provider.py
# Written by: SantaSpeen
# Version 1.1
# Licence: FPA
# (c) kuitoi.su 2023
import os
import secrets
import yaml
class Config:
def __init__(self, auth=None, game=None, server=None, rcon=None, options=None, web=None):
self.Auth = auth or {"key": None, "private": True}
self.Game = game or {"map": "gridmap_v2", "players": 8, "max_cars": 1}
self.Server = server or {"name": "KuiToi-Server", "description": "Welcome to KuiToi Server!",
"server_ip": "0.0.0.0", "server_port": 30814}
self.RCON = rcon or {"enabled": False, "server_ip": "127.0.0.1", "server_port": 10383,
"password": secrets.token_hex(16)}
self.Options = options or {"language": "en", "encoding": "utf-8", "speed_limit": 0, "use_queue": False,
"debug": False, "use_lua": False, "log_chat": True}
self.WebAPI = web or {"enabled": False, "server_ip": "127.0.0.1", "server_port": 8433,
"access_token": secrets.token_hex(16)}
def __repr__(self):
return f"{self.__class__.__name__}(Auth={self.Auth!r}, Game={self.Game!r}, Server={self.Server!r}, " \
f"RCON={self.RCON!r}, Options={self.Options!r}, WebAPI={self.WebAPI!r})"
class ConfigProvider:
def __init__(self, config_path):
self.config_path = config_path
self.config = Config()
def open_config(self):
if not os.path.exists(self.config_path):
with open(self.config_path, "w", encoding="utf-8") as f:
yaml.dump(self.config, f)
try:
with open(self.config_path, "r", encoding="utf-8") as f:
self.config = yaml.load(f.read(), yaml.Loader)
except yaml.YAMLError:
print("You have errors in the YAML syntax.")
print("Stopping server.")
exit(1)
return self.config
def save_config(self):
with open(self.config_path, "w", encoding="utf-8") as f:
yaml.dump(self.config, f)

View File

@@ -1,6 +1,6 @@
from typing import Dict
### Builtins
```python
class Config:
Auth: Dict[str, object]
Game: Dict[str, object]
@@ -12,3 +12,4 @@ class Config:
def __repr__(self):
return "%s(Auth=%r, Game=%r, Server=%r)" % (self.__class__.__name__, self.Auth, self.Game, self.Server)
class config (Config): ...
```

View File

@@ -68,6 +68,7 @@ class EventsSystem:
"onFileChanged": [], # TODO lua onFileChanged
"onConsoleInput": [], # kt.add_command
}
self.register_event = self.register
def builtins_hook(self):
self.log.debug("used builtins_hook")
@@ -78,8 +79,8 @@ class EventsSystem:
event_name in self.__events.keys() or
event_name in self.__lua_events.keys())
def register_event(self, event_name, event_func, async_event=False, lua=None):
self.log.debug(f"register_event(event_name='{event_name}', event_func='{event_func}', "
def register(self, event_name, event_func, async_event=False, lua=None):
self.log.debug(f"register(event_name='{event_name}', event_func='{event_func}', "
f"async_event={async_event}, lua_event={lua}):")
if lua:
if event_name not in self.__lua_events:

View File

@@ -3,7 +3,7 @@ from typing import Any
class EventsSystem:
@staticmethod
def register_event(event_name, event_func, async_event: bool = False, lua: bool | object = None): ...
def register(event_name, event_func, async_event: bool = False, lua: bool | object = None): ...
@staticmethod
async def call_async_event(event_name, *args, **kwargs) -> list[Any]: ...
@staticmethod

View File

@@ -88,7 +88,7 @@ class MP:
def RegisterEvent(self, event_name: str, function_name: str) -> None:
self.log.debug("request MP.RegisterEvent()")
ev.register_event(event_name, function_name, lua=self._lua)
ev.register(event_name, function_name, lua=self._lua)
if event_name not in self._local_events:
self._local_events.update({str(event_name): [function_name]})
else:
@@ -577,8 +577,8 @@ class LuaPluginsLoader:
self.lua_dirs = set()
self.log = get_logger("LuaPluginsLoader")
self.loaded_str = "Lua plugins: "
ev.register_event("_lua_plugins_get", lambda x: self.lua_plugins)
ev.register_event("_lua_plugins_unload", self.unload)
ev.register("_lua_plugins_get", lambda x: self.lua_plugins)
ev.register("_lua_plugins_unload", self.unload)
console.add_command("lua_plugins", lambda x: self.loaded_str[:-2])
console.add_command("lua_pl", lambda x: self.loaded_str[:-2])

View File

@@ -57,9 +57,9 @@ class KuiToi:
if f is not None:
f.close()
def register_event(self, event_name, event_func):
def register(self, event_name, event_func):
self.log.debug(f"Registering event {event_name}")
ev.register_event(event_name, event_func)
ev.register(event_name, event_func)
def call_event(self, event_name, *args, **kwargs):
self.log.debug(f"Called event {event_name}")
@@ -105,9 +105,9 @@ class PluginsLoader:
self.plugins_dir = plugins_dir
self.log = get_logger("PluginsLoader")
self.loaded_str = "Plugins: "
ev.register_event("_plugins_start", self.start)
ev.register_event("_plugins_unload", self.unload)
ev.register_event("_plugins_get", lambda x: list(self.plugins.keys()))
ev.register("_plugins_start", self.start)
ev.register("_plugins_unload", self.unload)
ev.register("_plugins_get", lambda x: list(self.plugins.keys()))
console.add_command("plugins", lambda x: self.loaded_str[:-2])
console.add_command("pl", lambda x: self.loaded_str[:-2])