11
This commit is contained in:
@@ -0,0 +1,62 @@
|
|||||||
|
import asyncio
|
||||||
|
from typing import Callable, Awaitable, Optional
|
||||||
|
|
||||||
|
from astrbot.api.event import filter, AstrMessageEvent, MessageEventResult, MessageChain
|
||||||
|
from astrbot.api.star import Context, Star, register, StarTools
|
||||||
|
from astrbot.api import logger
|
||||||
|
from astrbot.api import AstrBotConfig
|
||||||
|
|
||||||
|
from .jx3_service import JX3Service
|
||||||
|
|
||||||
|
class AsyncTask:
|
||||||
|
"""
|
||||||
|
异步后台任务类(asyncio版)
|
||||||
|
- 支持后台异步循环执行
|
||||||
|
- 支持 start/stop
|
||||||
|
- 支持设定间隔
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, context: Context, config: AstrBotConfig, jx3fun: JX3Service):
|
||||||
|
"""
|
||||||
|
Args:
|
||||||
|
coro: 异步任务函数
|
||||||
|
interval: 每次执行间隔(秒)
|
||||||
|
auto_start: 是否自动启动
|
||||||
|
"""
|
||||||
|
self.context = context
|
||||||
|
self.conf = config
|
||||||
|
self.jx3fun = jx3fun
|
||||||
|
|
||||||
|
|
||||||
|
async def cycle_kaifjiankong(self):
|
||||||
|
"""开服监控后台程序"""
|
||||||
|
# 获取配置信息
|
||||||
|
|
||||||
|
time_int = self.conf.get("jx3_kfjk_time", 10)
|
||||||
|
self.kfjk_en = self.conf.get("jx3_kfjk_en", True)
|
||||||
|
self.kfjk_umos = self.conf.get("jx3_kfjk_list", [])
|
||||||
|
kfjk_test = self.conf.get("jx3_kfjk_test", False)
|
||||||
|
|
||||||
|
self.kfjk_server_state = True # 上一次查询的状态
|
||||||
|
self.kfjk_server_state_new = False # 最新查询的状态
|
||||||
|
|
||||||
|
if self.kfjk_en:
|
||||||
|
logger.info(f"开服监控功能开启")
|
||||||
|
while self.kfjk_en:
|
||||||
|
data = await self.jx3fun.kaifu("梦江南")
|
||||||
|
if kfjk_test:
|
||||||
|
self.kfjk_server_state_new = False
|
||||||
|
else:
|
||||||
|
self.kfjk_server_state_new = data["status"]
|
||||||
|
# logger.info(f"开服监控功能循环中,上次询问服务器状态{self.kfjk_server_state},本次询问的服务器状态{self.kfjk_server_state_new}")
|
||||||
|
if self.kfjk_server_state != self.kfjk_server_state_new:
|
||||||
|
logger.info(f"开服监控功能循环中,上次询问服务器状态{self.kfjk_server_state},本次询问的服务器状态{self.kfjk_server_state_new}")
|
||||||
|
if self.kfjk_server_state and not self.kfjk_server_state_new:
|
||||||
|
message_chain = MessageChain().message("剑网三服务器已关闭\n休息一会把,开服了喊你!")
|
||||||
|
if self.kfjk_server_state_new and not self.kfjk_server_state:
|
||||||
|
message_chain = MessageChain().message("剑网三服务器已开启\n快冲!快冲!")
|
||||||
|
if self.kfjk_umos:
|
||||||
|
for umo in self.kfjk_umos:
|
||||||
|
await self.context.send_message(umo, message_chain)
|
||||||
|
self.kfjk_server_state = self.kfjk_server_state_new
|
||||||
|
await asyncio.sleep(time_int)
|
||||||
@@ -13,7 +13,7 @@ from astrbot.api import AstrBotConfig
|
|||||||
|
|
||||||
from .core.aiosqlite import AsyncSQLite
|
from .core.aiosqlite import AsyncSQLite
|
||||||
from .core.jx3_service import JX3Service
|
from .core.jx3_service import JX3Service
|
||||||
|
from .core.async_task import AsyncTask
|
||||||
|
|
||||||
|
|
||||||
@register("astrbot_plugin_jx3",
|
@register("astrbot_plugin_jx3",
|
||||||
@@ -42,13 +42,12 @@ class Jx3ApiPlugin(Star):
|
|||||||
# 处理默认文件丢失的严重错误
|
# 处理默认文件丢失的严重错误
|
||||||
logger.critical(f"插件初始化失败:{e}")
|
logger.critical(f"插件初始化失败:{e}")
|
||||||
raise # 中断初始化
|
raise # 中断初始化
|
||||||
# 读取配置文件
|
# 读取API配置文件
|
||||||
self.api_file_path = Path(__file__).parent / "data" / "api_config.json"
|
self.api_file_path = Path(__file__).parent / "data" / "api_config.json"
|
||||||
with open(self.api_file_path, 'r', encoding='utf-8') as f:
|
with open(self.api_file_path, 'r', encoding='utf-8') as f:
|
||||||
self.api_config = json.load(f)
|
self.api_config = json.load(f)
|
||||||
# 初始化数据
|
# 初始化数据
|
||||||
self.inidata()
|
#self.kf_task = asyncio.create_task(self.cycle_kaifjiankong())
|
||||||
self.kf_task = asyncio.create_task(self.cycle_kaifjiankong())
|
|
||||||
logger.info("jx3api插件初始化完成")
|
logger.info("jx3api插件初始化完成")
|
||||||
|
|
||||||
|
|
||||||
@@ -57,9 +56,10 @@ class Jx3ApiPlugin(Star):
|
|||||||
#创建类实例
|
#创建类实例
|
||||||
self.db = AsyncSQLite(str(self.file_local_data))
|
self.db = AsyncSQLite(str(self.file_local_data))
|
||||||
self.jx3fun = JX3Service(self.api_config,self.db)
|
self.jx3fun = JX3Service(self.api_config,self.db)
|
||||||
|
self.at = AsyncTask(self.context, self.conf, self.jx3fun)
|
||||||
# 周期函数调用
|
# 周期函数调用
|
||||||
|
self.kf_task = asyncio.create_task(self.at.cycle_kaifjiankong())
|
||||||
logger.info("jx3api插件创建实例完成")
|
logger.info("jx3api异步插件初始化完成")
|
||||||
|
|
||||||
|
|
||||||
def check_and_copy_db(self, local_data_dir: Union[str, Path], db_filename: str, default_db_dir: Union[str, Path]) -> pathlib.Path:
|
def check_and_copy_db(self, local_data_dir: Union[str, Path], db_filename: str, default_db_dir: Union[str, Path]) -> pathlib.Path:
|
||||||
@@ -96,50 +96,6 @@ class Jx3ApiPlugin(Star):
|
|||||||
return target_file_path
|
return target_file_path
|
||||||
|
|
||||||
|
|
||||||
def inidata(self):
|
|
||||||
"""数据初始化"""
|
|
||||||
self.test_server = False
|
|
||||||
logger.info("数据初始化完成")
|
|
||||||
|
|
||||||
|
|
||||||
async def cycle_kaifjiankong(self):
|
|
||||||
"""开服监控后台程序"""
|
|
||||||
# 获取配置信息
|
|
||||||
time_int = self.conf.get("jx3_kfjk_time", 10)
|
|
||||||
self.kfjk_en = self.conf.get("jx3_kfjk_en", True)
|
|
||||||
self.kfjk_umos = self.conf.get("jx3_kfjk_list", [])
|
|
||||||
self.kfjk_servername = self.conf.get("jx3_kfjk_server", "梦江南")
|
|
||||||
kfjk_test = self.conf.get("jx3_kfjk_test", False)
|
|
||||||
|
|
||||||
self.kfjk_server_state = True # 上一次查询的状态
|
|
||||||
self.kfjk_server_state_new = False # 最新查询的状态
|
|
||||||
|
|
||||||
if self.kfjk_en:
|
|
||||||
logger.info(f"开服监控功能开启")
|
|
||||||
while self.kfjk_en:
|
|
||||||
data = await self.jx3fun.kaifu(self.kfjk_servername)
|
|
||||||
if kfjk_test:
|
|
||||||
self.kfjk_server_state_new = self.test_server
|
|
||||||
else:
|
|
||||||
self.kfjk_server_state_new = data["status"]
|
|
||||||
# logger.info(f"开服监控功能循环中,上次询问服务器状态{self.kfjk_server_state},本次询问的服务器状态{self.kfjk_server_state_new}")
|
|
||||||
if self.kfjk_server_state != self.kfjk_server_state_new:
|
|
||||||
logger.info(f"开服监控功能循环中,上次询问服务器状态{self.kfjk_server_state},本次询问的服务器状态{self.kfjk_server_state_new}")
|
|
||||||
if self.kfjk_server_state and not self.kfjk_server_state_new:
|
|
||||||
message_chain = MessageChain().message(f"{self.kfjk_servername}服务器已关闭\n休息一会把,开服了喊你!")
|
|
||||||
if self.kfjk_server_state_new and not self.kfjk_server_state:
|
|
||||||
message_chain = MessageChain().message(f"{self.kfjk_servername}服务器已开启\n快冲!快冲!")
|
|
||||||
if self.kfjk_umos:
|
|
||||||
for umo in self.kfjk_umos:
|
|
||||||
await self.context.send_message(umo, message_chain)
|
|
||||||
self.kfjk_server_state = self.kfjk_server_state_new
|
|
||||||
await asyncio.sleep(time_int)
|
|
||||||
if not self.kfjk_en:
|
|
||||||
# 销毁进程
|
|
||||||
self.kf_task.cancel()
|
|
||||||
logger.info(f"开服监控功能关闭")
|
|
||||||
|
|
||||||
|
|
||||||
@filter.command_group("剑三")
|
@filter.command_group("剑三")
|
||||||
def jx3(self):
|
def jx3(self):
|
||||||
pass
|
pass
|
||||||
@@ -300,7 +256,8 @@ class Jx3ApiPlugin(Star):
|
|||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
yield event.plain_result(f"开服监控已关闭")
|
yield event.plain_result(f"开服监控已关闭")
|
||||||
elif en == "状态":
|
elif en == "状态":
|
||||||
yield event.plain_result(f"开服监控后台状态:{self.kfjk_en}\n监控服务器:{self.kfjk_servername}\n上次询问服务器状态{self.kfjk_server_state}\n本次询问的服务器状态{self.kfjk_server_state_new}\n推送会话列表:\n{self.kfjk_umos}")
|
#yield event.plain_result(f"开服监控后台状态:{self.kfjk_en}\n监控服务器:{self.kfjk_servername}\n上次询问服务器状态{self.kfjk_server_state}\n本次询问的服务器状态{self.kfjk_server_state_new}\n推送会话列表:\n{self.kfjk_umos}")
|
||||||
|
yield event.plain_result(f"开服监控后台状态:")
|
||||||
else:
|
else:
|
||||||
yield event.plain_result("开服监控指令错误,请输入 开启/关闭")
|
yield event.plain_result("开服监控指令错误,请输入 开启/关闭")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user