-
Notifications
You must be signed in to change notification settings - Fork 1
/
start.py
81 lines (70 loc) · 2.98 KB
/
start.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# BreakBot的入口脚本
# 用于检测并启动拉格兰和NoneBot并自动进行连接配置
import atexit
import os.path
import subprocess
import sys
from nonebot import logger
from app import nonebot_init
from util.Config import config
if __name__ == "__main__":
# 初始化部分数据
logger.info("正在初始化DXKuma进程...")
# 检测Lagrange是否启用并已经部署到了对应的位置
if config.is_lagrange:
logger.info("检测到配置文件中启用了Lagrange支持,正在尝试启动Lagrange并连接。")
if not os.path.exists("./lagrange"):
logger.critical("未找到Lagrange程序目录,自动生成了目录。")
os.mkdir("./lagrange")
if not os.path.exists("./lagrange/Lagrange.OneBot.exe") and not os.path.exists(
"./lagrange/Lagrange.OneBot"
):
logger.info("未找到Lagrange可执行程序!")
logger.info(
"请将对应平台的Lagrange.Onebot可执行文件放入lagrange目录中,请不要更改可执行文件的名称!"
)
sys.exit()
logger.success("成功检测到了Lagrange可执行程序,正在准备进行启动程序。")
if not os.path.exists("./lagrange/appsettings.json"):
logger.info(
"检测到目录中不存在appsetting.json配置文件,Lagrange为初次启动。"
)
logger.info(
"请手动进入目录根据Lagrange文档对其进行配置和登录: https://lagrangedev.github.io/Lagrange.Doc/Lagrange.OneBot/Config/"
)
sys.exit()
# 设置二进制文件的名称
if os.path.exists("./lagrange/Lagrange.OneBot.exe"):
lagrange_executable = "Lagrange.OneBot.exe"
else:
lagrange_executable = "Lagrange.OneBot"
# 运行Lagrange进程并输出stdout
with open("lagrange.log", "w+") as outputer:
process = subprocess.Popen(
[f"./lagrange/{lagrange_executable}"],
cwd="./lagrange",
stdout=outputer,
stderr=outputer,
)
# 完成Lagrange的启动之后,启动Nonebot并进行连接
logger.success("启动Lagrange成功!")
# 首先更新Nonebot的环境配置文件
with open(".env", "w", encoding="utf-8") as v:
file = (
f"DRIVER=~quart+~websockets\n"
f"HOST={config.listen_host}\n"
f"PORT={config.listen_port}\n"
f"ONEBOT_ACCESS_TOKEN={config.token}\n"
f"LOG_LEVEL={config.log_level}\n"
)
v.write(file)
logger.info("生成了NoneBot的环境配置文件.env")
v.close()
# 启动NoneBot
logger.info("正在启动nonebot...")
nonebot_init()
def terminate_process():
if config.is_lagrange:
logger.info("检测到进程即将退出,自动结束Lagrange")
process.terminate()
atexit.register(terminate_process)