diff options
Diffstat (limited to 'ATRI/plugins/console/data_source.py')
-rw-r--r-- | ATRI/plugins/console/data_source.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/ATRI/plugins/console/data_source.py b/ATRI/plugins/console/data_source.py new file mode 100644 index 0000000..86a3813 --- /dev/null +++ b/ATRI/plugins/console/data_source.py @@ -0,0 +1,58 @@ +import json +import socket +import string +from random import sample +from pathlib import Path + +from nonebot.permission import SUPERUSER + +from ATRI.service import Service +from ATRI.utils import request +from ATRI.exceptions import WriteFileError + + +CONSOLE_DIR = Path(".") / "data" / "database" / "console" +CONSOLE_DIR.mkdir(exist_ok=True) + + +class Console(Service): + def __init__(self): + Service.__init__( + self, "控制台", "前端管理页面", True, main_cmd="/con", permission=SUPERUSER + ) + + @staticmethod + async def get_host_ip(is_pub: bool): + if is_pub: + data = await request.get("https://ifconfig.me/ip") + return data.text + + s = None + try: + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect(('8.8.8.8', 80)) + ip = s.getsockname()[0] + return ip + finally: + if s: + s.close() + + @staticmethod + def get_random_str(k: int) -> str: + return "".join(sample(string.ascii_letters + string.digits, k)) + + @staticmethod + def get_auth_info() -> dict: + df = CONSOLE_DIR / "data.json" + if not df.is_file(): + try: + with open(df, "w", encoding="utf-8") as w: + w.write(json.dumps({})) + except WriteFileError: + raise WriteFileError("Writing file: " + str(df) + " failed!") + + base_data: dict = json.loads(df.read_bytes()) + data = base_data.get("data", None) + if not data: + return {"data": None} + return data |