summaryrefslogtreecommitdiff
path: root/ATRI/plugins/console/data_source.py
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI/plugins/console/data_source.py')
-rw-r--r--ATRI/plugins/console/data_source.py58
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