async def process_msg(bot: Bot, event: Event, enable: bool): try: args = event.get_plaintext().strip() if not args: msg = _GROUP_USAGE if isinstance( event, GroupMessageEvent) else _PRIVATE_USAGE raise ValueError('未找到参数。' + msg) args = args.split(' ') # 从群组内调用 if isinstance(event, GroupMessageEvent): succeed = set() failed = set() group_id = event.group_id services = args for sv_name in services: sv = Service.get_loaded_services().get(sv_name) if sv: await set_sv(sv, group_id, enable) succeed.add(sv_name) else: failed.add(sv_name) msg = '' if succeed: msg += '服务' + '、'.join([str(i) for i in succeed]) + \ '已启用' if enable else '已禁用' + '\n' if failed: msg += '不存在这些服务:' + '、'.join([str(i) for i in failed]) await bot.send(event, msg) # 私聊调用,需要superuser权限 elif isinstance(event, PrivateMessageEvent): if not is_superuser(event.get_user_id()): return parser = ArgParserPrivate(enable, args) await parser.run() msg = '' if parser.succeed: msg += '执行完毕。\n' if parser.failed: msg += '以下群组发生错误:\n' msg += '\n'.join( [f' {name}: {msg}\n' for name, msg in parser.failed]) + '\n' msg += _PRIVATE_USAGE await bot.send(event, msg) except ValueError as e: await bot.send(event, str(e))
async def run(self): for name, groups in self.parse_result.items(): sv = Service.get_loaded_services().get(name) if not sv: self.failed.append((name, '不存在该服务')) continue if not groups: self.failed.append((name, '缺少待操作的群组')) continue for group in groups: try: await set_sv(sv, group, self.enable) self.succeed.append((name, '')) except Exception as e: self.failed.append((name, f'发送错误:{str(e)}'))
async def ls_sv(bot: Bot, event: Event): if isinstance(event, GroupMessageEvent): all_sv = Service.get_loaded_services() enabled_sv = [ sv_name for sv_name, sv in all_sv.items() if sv.visible and sv.check_enabled_in_group(event.group_id) ] disabled_sv = [ sv_name for sv_name, sv in all_sv.items() if sv.visible and not sv.check_enabled_in_group(event.group_id) ] msg = '' if enabled_sv: msg += '已启用服务:\n · ' + '\n · '.join(enabled_sv) + '\n' if disabled_sv: msg += '已禁用服务:\n · ' + '\n · '.join(disabled_sv) await bot.send(event, msg) else: return