async def handle_message(bot: NoneBot, event: CQEvent) -> None: _log_message(event) assert isinstance(event.message, Message) if not event.message: event.message.append(MessageSegment.text('')) coros = [] for preprocessor in _message_preprocessors: coros.append(preprocessor(bot, event)) if coros: await asyncio.wait(coros) raw_to_me = event.get('to_me', False) _check_at_me(bot, event) _check_calling_me_nickname(bot, event) event['to_me'] = raw_to_me or event['to_me'] while True: try: handled = await handle_command(bot, event) break except SwitchException as e: # we are sure that there is no session existing now event['message'] = e.new_message event['to_me'] = True if handled: logger.info(f'Message {event.message_id} is handled as a command') return handled = await handle_natural_language(bot, event) if handled: logger.info(f'Message {event.message_id} is handled ' f'as natural language') return
async def handle_message(bot: NoneBot, event: CQEvent) -> None: """INTERNAL API""" _log_message(event) assert isinstance(event.message, Message) if not event.message: event.message.append(MessageSegment.text('')) # type: ignore raw_to_me = event.get('to_me', False) _check_at_me(bot, event) _check_calling_me_nickname(bot, event) event['to_me'] = raw_to_me or event['to_me'] coros = [] plugin_manager = PluginManager() for preprocessor in MessagePreprocessorManager.preprocessors: coros.append(preprocessor.func(bot, event, plugin_manager)) if coros: try: await asyncio.gather(*coros) except CanceledException as e: logger.info( f'Message {event["message_id"]} is ignored: {e.reason}') return while True: try: handled = await handle_command(bot, event, plugin_manager.cmd_manager) break except SwitchException as e: # we are sure that there is no session existing now event['message'] = e.new_message event['to_me'] = True if handled: logger.info(f'Message {event.message_id} is handled as a command') return handled = await handle_natural_language(bot, event, plugin_manager.nlp_manager) if handled: logger.info(f'Message {event.message_id} is handled ' f'as natural language') return logger.debug(f'Message {event.message_id} was not handled')
async def handle_message(bot: NoneBot, event: CQEvent) -> None: _log_message(event) assert isinstance(event.message, Message) if not event.message: event.message.append(MessageSegment.text('')) # type: ignore # 检查是否是对我说话 # 但不在这里终止,因为还可能是会话未结束。 raw_to_me = event.get('to_me', False) _check_at_me(bot, event) _check_calling_me_nickname(bot, event) event['to_me'] = raw_to_me or event['to_me'] plugin_manager = PluginManager() while True: try: handled = await handle_regexp(bot, event, plugin_manager.regexp_manager) break except SwitchException as e: event['message'] = e.new_message event['to_me'] = True if handled: logger.info( f'Message {event.message_id} is handled as a regular expression command.' ) return # 过一遍预处理器(好像没用到过) coros = [] for preprocessor in _message_preprocessors: coros.append(preprocessor(bot, event, plugin_manager)) if coros: try: await asyncio.gather(*coros) except CanceledException: logger.info(f'Message {event["message_id"]} is ignored') return # 处理命令,如果中途被 Switch 则继续处理。 # 此处命令还未被识别 while True: try: handled = await handle_command(bot, event, plugin_manager.cmd_manager) break except SwitchException as e: # we are sure that there is no session existing now event['message'] = e.new_message event['to_me'] = True if handled: logger.info(f'Message {event.message_id} is handled as a command') return handled = await handle_natural_language(bot, event, plugin_manager.nlp_manager) if handled: logger.info(f'Message {event.message_id} is handled ' f'as natural language') return