ayaka.ayaka_master
ayaka综合管理模块
1'''ayaka综合管理模块''' 2from pydantic import Field 3from .ayaka import app_list, AyakaApp, get_app 4# from .config import ayaka_root_config, save 5from .config import save 6from .state import root_state 7from .driver import get_driver 8from .depend import commit, AyakaInput 9 10driver = get_driver() 11 12app = AyakaApp("ayaka_master") 13app.help = '''ayaka综合管理模块''' 14 15 16class UidInput(AyakaInput): 17 uid: int = Field(description="QQ号", gt=0) 18 19 20class AppnameInput(AyakaInput): 21 name: str = Field("", description="应用名") 22 23 24@app.on_idle() 25@app.on_deep_all() 26@app.on_cmd("插件", "plugin", "plugins") 27async def show_plugins(): 28 '''展示所有应用''' 29 items = [] 30 for _app in app_list: 31 info = f"[{_app.name}]" 32 items.append(info) 33 await app.send("\n".join(items)) 34 35 36@app.on_idle() 37@app.on_deep_all() 38@app.on_cmd("状态", "state") 39async def show_state(): 40 state = app.group.state 41 if state <= root_state: 42 await app.send("当前设备处于闲置状态") 43 return 44 await app.send(f"当前状态:{state}") 45 46 47@app.on_idle() 48@app.on_deep_all() 49@app.on_cmd("帮助", "help") 50async def show_help(data: AppnameInput): 51 # 展示当前应用当前状态的帮助 52 if app.state > root_state: 53 app_name = app.state.keys[1] 54 _app = get_app(app_name) 55 await app.send(_app.help) 56 return 57 58 # 没有应用正在运行 59 # 查询指定应用的详细帮助 60 name = data.name 61 if name: 62 _app = get_app(name) 63 if not _app: 64 await app.send(f"应用不存在 [{name}]") 65 return 66 67 # 详细帮助 68 info = f"[{_app.name}]\n{_app.all_help}" 69 await app.send(info) 70 return 71 72 # 展示所有应用介绍 73 items = ["所有应用介绍一览"] 74 for _app in app_list: 75 info = f"[{_app.name}]\n{_app.intro}" 76 items.append(info) 77 78 await app.send_many(items) 79 await app.send("使用 帮助 <插件名> 可以进一步展示指定插件的详细帮助信息") 80 81 82@app.on_idle() 83@app.on_deep_all() 84@app.on_cmd("强制退出", "force_exit") 85async def force_exit(): 86 await app.group.goto(root_state) 87 await app.send("已强制退出应用") 88 89 90# @app.on_idle() 91# @app.on_deep_all() 92# @app.on_cmd("add_admin") 93# async def add_admin(data: UidInput): 94# '''增加ayaka管理者''' 95# if app.user_id not in ayaka_root_config.owners: 96# await app.send("仅有ayaka所有者有权执行此命令") 97# return 98 99# uid = data.uid 100 101# if uid not in ayaka_root_config.admins: 102# ayaka_root_config.admins.append(uid) 103# ayaka_root_config.force_update() 104 105# await app.send("设置成功") 106 107 108# @app.on_idle() 109# @app.on_deep_all() 110# @app.on_cmd("remove_admin") 111# async def remove_admin(data: UidInput): 112# '''移除ayaka管理者''' 113# if app.user_id not in ayaka_root_config.owners: 114# await app.send("仅有ayaka所有者有权执行此命令") 115# return 116 117# uid = data.uid 118 119# if uid in ayaka_root_config.admins: 120# ayaka_root_config.admins.remove(uid) 121# ayaka_root_config.force_update() 122 123# await app.send("设置成功") 124 125 126# 定时提交db、保存setting 127@app.on_interval(60, show=False) 128async def update_data(): 129 commit() 130 save() 131 132 133# 退出提交 134@driver.on_shutdown 135async def update_data(): 136 commit() 137 save()
解析命令行参数为对应成员属性
注意:每个成员属性都必须标注类型,否则可能解析顺序出错
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
解析命令行参数为对应成员属性
注意:每个成员属性都必须标注类型,否则可能解析顺序出错
Inherited Members
- pydantic.main.BaseModel
- BaseModel
- dict
- json
- parse_obj
- parse_raw
- parse_file
- from_orm
- construct
- copy
- schema
- schema_json
- validate
- update_forward_refs
@app.on_idle()
@app.on_deep_all()
@app.on_cmd('插件', 'plugin', 'plugins')
async def
show_plugins():
25@app.on_idle() 26@app.on_deep_all() 27@app.on_cmd("插件", "plugin", "plugins") 28async def show_plugins(): 29 '''展示所有应用''' 30 items = [] 31 for _app in app_list: 32 info = f"[{_app.name}]" 33 items.append(info) 34 await app.send("\n".join(items))
展示所有应用
@app.on_idle()
@app.on_deep_all()
@app.on_cmd('状态', 'state')
async def
show_state():
@app.on_idle()
@app.on_deep_all()
@app.on_cmd('帮助', 'help')
async def
show_help(data: ayaka.ayaka_master.AppnameInput):
48@app.on_idle() 49@app.on_deep_all() 50@app.on_cmd("帮助", "help") 51async def show_help(data: AppnameInput): 52 # 展示当前应用当前状态的帮助 53 if app.state > root_state: 54 app_name = app.state.keys[1] 55 _app = get_app(app_name) 56 await app.send(_app.help) 57 return 58 59 # 没有应用正在运行 60 # 查询指定应用的详细帮助 61 name = data.name 62 if name: 63 _app = get_app(name) 64 if not _app: 65 await app.send(f"应用不存在 [{name}]") 66 return 67 68 # 详细帮助 69 info = f"[{_app.name}]\n{_app.all_help}" 70 await app.send(info) 71 return 72 73 # 展示所有应用介绍 74 items = ["所有应用介绍一览"] 75 for _app in app_list: 76 info = f"[{_app.name}]\n{_app.intro}" 77 items.append(info) 78 79 await app.send_many(items) 80 await app.send("使用 帮助 <插件名> 可以进一步展示指定插件的详细帮助信息")
@app.on_idle()
@app.on_deep_all()
@app.on_cmd('强制退出', 'force_exit')
async def
force_exit():
@driver.on_shutdown
async def
update_data():