2020-06-04 19:16:51 +02:00
|
|
|
import logging
|
2020-10-22 00:00:48 +02:00
|
|
|
from typing import List, Dict, Any
|
2020-09-02 00:08:06 +02:00
|
|
|
from structured_config import (
|
2020-10-19 00:20:58 +02:00
|
|
|
Structure,
|
|
|
|
IntField,
|
|
|
|
StrField,
|
|
|
|
BoolField,
|
2020-09-02 00:08:06 +02:00
|
|
|
ConfigFile,
|
|
|
|
)
|
2020-06-03 01:07:43 +02:00
|
|
|
|
|
|
|
|
2020-10-19 22:17:19 +02:00
|
|
|
__all__ = [
|
|
|
|
"Config",
|
|
|
|
"ConfigFile",
|
|
|
|
"AppConfig",
|
|
|
|
"search_for",
|
|
|
|
"set_for_key",
|
|
|
|
"set_for",
|
|
|
|
]
|
2020-06-06 02:00:16 +02:00
|
|
|
|
|
|
|
log = logging.getLogger("tuxbot.core.config")
|
2020-06-03 01:07:43 +02:00
|
|
|
|
|
|
|
|
2020-10-19 15:04:10 +02:00
|
|
|
class Config(Structure):
|
|
|
|
class Server(Structure):
|
|
|
|
prefixes: List[str] = []
|
|
|
|
disabled_command: List[str] = []
|
|
|
|
locale: str = StrField("")
|
|
|
|
blacklisted: bool = BoolField(False)
|
2020-06-06 02:00:16 +02:00
|
|
|
|
2020-10-19 15:04:10 +02:00
|
|
|
class Channel(Structure):
|
|
|
|
disabled_command: List[str] = []
|
|
|
|
locale: str = StrField("")
|
|
|
|
blacklisted: bool = BoolField(False)
|
2020-09-02 00:08:06 +02:00
|
|
|
|
2020-10-19 15:04:10 +02:00
|
|
|
class User(Structure):
|
|
|
|
aliases: List[dict] = []
|
|
|
|
locale: str = StrField("")
|
|
|
|
blacklisted: bool = BoolField(False)
|
2020-10-19 00:20:58 +02:00
|
|
|
|
2020-10-19 15:04:10 +02:00
|
|
|
class Cog(Structure):
|
|
|
|
pass
|
2020-09-02 00:08:06 +02:00
|
|
|
|
2020-10-19 15:04:10 +02:00
|
|
|
Servers: Dict[int, Server] = {}
|
|
|
|
Channels: Dict[int, Channel] = {}
|
|
|
|
Users: Dict[int, User] = {}
|
|
|
|
Cogs: Dict[str, Cog] = {}
|
2020-09-02 00:08:06 +02:00
|
|
|
|
|
|
|
class Core(Structure):
|
|
|
|
owners_id: List[int] = []
|
|
|
|
prefixes: List[str] = []
|
|
|
|
token: str = StrField("")
|
|
|
|
mentionable: bool = BoolField("")
|
|
|
|
locale: str = StrField("")
|
2020-10-19 00:20:58 +02:00
|
|
|
disabled_command: List[str] = []
|
2020-09-02 00:08:06 +02:00
|
|
|
|
|
|
|
|
|
|
|
# =============================================================================
|
|
|
|
# Configuration of Tuxbot Application (not the bot)
|
|
|
|
# =============================================================================
|
|
|
|
|
|
|
|
|
|
|
|
class AppConfig(Structure):
|
2020-10-19 00:20:58 +02:00
|
|
|
class Instance(Structure):
|
|
|
|
path: str = StrField("")
|
|
|
|
active: bool = BoolField(False)
|
|
|
|
last_run: int = IntField(0)
|
|
|
|
|
2020-10-19 22:17:19 +02:00
|
|
|
Instances: Dict[str, Instance] = {}
|
2020-10-19 00:53:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
# =============================================================================
|
2020-10-19 01:37:12 +02:00
|
|
|
# Useful functions to interact with configs
|
2020-10-19 00:53:26 +02:00
|
|
|
# =============================================================================
|
|
|
|
|
|
|
|
|
2020-10-19 15:04:10 +02:00
|
|
|
def search_for(config, key, value, default=False) -> Any:
|
|
|
|
if key in config:
|
|
|
|
return getattr(config[key], value)
|
2020-10-19 00:53:26 +02:00
|
|
|
return default
|
2020-10-19 15:04:10 +02:00
|
|
|
|
|
|
|
|
2020-10-22 00:00:48 +02:00
|
|
|
def set_for_key(config, key, ctype, **values) -> None:
|
2020-10-19 21:44:29 +02:00
|
|
|
# pylint: disable=anomalous-backslash-in-string
|
|
|
|
"""
|
|
|
|
La fonction suivante \`*-.
|
|
|
|
a été écrite le lundi ) _`-.
|
|
|
|
19 octobre 2020 a 13h40 . : `. .
|
|
|
|
soit 1h apres la découverte : _ ' \
|
|
|
|
du corps de mon chat ; *` _. `*-._
|
|
|
|
`-.-' `-.
|
|
|
|
; ` `.
|
|
|
|
:. . \
|
|
|
|
. \ . : .-' .
|
|
|
|
' `+.; ; ' :
|
|
|
|
: ' | ; ;-.
|
|
|
|
; ' : :`-: _.`* ;
|
|
|
|
rip roxy .*' / .*' ; .*`- +' `*'
|
|
|
|
201?-2020 :,( `*-* `*-* `*-*'
|
|
|
|
"""
|
2020-10-19 15:04:10 +02:00
|
|
|
if key not in config:
|
|
|
|
config[key] = ctype()
|
|
|
|
|
|
|
|
for k, v in values.items():
|
|
|
|
setattr(config[key], k, v)
|
2020-10-19 21:44:29 +02:00
|
|
|
|
|
|
|
|
2020-10-22 00:00:48 +02:00
|
|
|
def set_for(config, **values) -> None:
|
2020-10-19 21:44:29 +02:00
|
|
|
for k, v in values.items():
|
|
|
|
setattr(config, k, v)
|