def on_command(cmd: Union[str, Tuple[str]], rule: Optional[Union[Rule, RuleChecker]] = None, permission: Permission = Permission(), **kwargs) -> Type[Matcher]: if isinstance(cmd, str): cmd = (cmd,) return on_message(command(cmd) & rule, permission, **kwargs) if rule else on_message( command(cmd), permission, **kwargs)
def on_command(cmd: Union[str, Tuple[str, ...]], rule: Optional[Union[Rule, RuleChecker]] = None, aliases: Optional[Set[Union[str, Tuple[str, ...]]]] = None, **kwargs) -> Type[Matcher]: """ :说明: 注册一个消息事件响应器,并且当消息以指定命令开头时响应。 命令匹配规则参考: `命令形式匹配 <rule.html#command-command>`_ :参数: * ``cmd: Union[str, Tuple[str, ...]]``: 指定命令内容 * ``rule: Optional[Union[Rule, RuleChecker]]``: 事件响应规则 * ``aliases: Optional[Set[Union[str, Tuple[str, ...]]]]``: 命令别名 * ``permission: Optional[Permission]``: 事件响应权限 * ``handlers: Optional[List[Handler]]``: 事件处理函数列表 * ``temp: bool``: 是否为临时事件响应器(仅执行一次) * ``priority: int``: 事件响应器优先级 * ``block: bool``: 是否阻止事件向更低优先级传递 * ``state: Optional[dict]``: 默认的 state :返回: - ``Type[Matcher]`` """ async def _strip_cmd(bot, event, state: dict): message = event.message event.message = message.__class__( str(message)[len(state["_prefix"]["raw_command"]):].strip()) handlers = kwargs.pop("handlers", []) handlers.insert(0, _strip_cmd) commands = set([cmd]) | (aliases or set()) return on_message(command(*commands) & rule, handlers=handlers, **kwargs)
def on_command( cmd: Union[str, Tuple[str, ...]], rule: Optional[Union[Rule, T_RuleChecker]] = None, aliases: Optional[Set[Union[str, Tuple[str, ...]]]] = None, _depth: int = 0, **kwargs, ) -> Type[Matcher]: """ 注册一个消息事件响应器,并且当消息以指定命令开头时响应。 命令匹配规则参考: `命令形式匹配 <rule.md#command-command>`_ 参数: cmd: 指定命令内容 rule: 事件响应规则 aliases: 命令别名 permission: 事件响应权限 handlers: 事件处理函数列表 temp: 是否为临时事件响应器(仅执行一次) priority: 事件响应器优先级 block: 是否阻止事件向更低优先级传递 state: 默认 state """ commands = set([cmd]) | (aliases or set()) block = kwargs.pop("block", False) return on_message(command(*commands) & rule, block=block, **kwargs, _depth=_depth + 1)
def on_command(cmd: Union[str, Tuple[str, ...]], rule: Optional[Union[Rule, RuleChecker]] = None, permission: Permission = Permission(), **kwargs) -> Type[Matcher]: if isinstance(cmd, str): cmd = (cmd,) async def _strip_cmd(bot, event, state: dict): message = event.message event.message = message.__class__( str(message)[len(state["_prefix"]["raw_command"]):].strip()) handlers = kwargs.pop("handlers", []) handlers.insert(0, _strip_cmd) return on_message( command(cmd) & rule, permission, handlers=handlers, **kwargs) if rule else on_message( command(cmd), permission, handlers=handlers, **kwargs)
async def test_command(app: App, cmds: Tuple[Tuple[str, ...]]): from nonebot.rule import CommandRule, command from nonebot.consts import CMD_KEY, PREFIX_KEY test_command = command(*cmds) dependent = list(test_command.checkers)[0] checker = dependent.call assert isinstance(checker, CommandRule) assert checker.cmds == list(cmds) for cmd in cmds: state = {PREFIX_KEY: {CMD_KEY: cmd}} assert await dependent(state=state)
def on_command(cmd: Union[str, Tuple[str, ...]], rule: Optional[Union[Rule, T_RuleChecker]] = None, aliases: Optional[Set[Union[str, Tuple[str, ...]]]] = None, **kwargs) -> Type[Matcher]: """ :说明: 注册一个消息事件响应器,并且当消息以指定命令开头时响应。 命令匹配规则参考: `命令形式匹配 <rule.html#command-command>`_ :参数: * ``cmd: Union[str, Tuple[str, ...]]``: 指定命令内容 * ``rule: Optional[Union[Rule, T_RuleChecker]]``: 事件响应规则 * ``aliases: Optional[Set[Union[str, Tuple[str, ...]]]]``: 命令别名 * ``permission: Optional[Permission]``: 事件响应权限 * ``handlers: Optional[List[Union[T_Handler, Handler]]]``: 事件处理函数列表 * ``temp: bool``: 是否为临时事件响应器(仅执行一次) * ``priority: int``: 事件响应器优先级 * ``block: bool``: 是否阻止事件向更低优先级传递 * ``state: Optional[T_State]``: 默认 state * ``state_factory: Optional[T_StateFactory]``: 默认 state 的工厂函数 :返回: - ``Type[Matcher]`` """ async def _strip_cmd(bot: "Bot", event: "Event", state: T_State): message = event.get_message() if len(message) < 1: return segment = message.pop(0) segment_text = str(segment).lstrip() if not segment_text.startswith(state["_prefix"]["raw_command"]): return new_message = message.__class__( segment_text[len(state["_prefix"]["raw_command"]):].lstrip()) for new_segment in reversed(new_message): message.insert(0, new_segment) handlers = kwargs.pop("handlers", []) handlers.insert(0, _strip_cmd) commands = set([cmd]) | (aliases or set()) return on_message(command(*commands) & rule, handlers=handlers, **kwargs)
def on_command( cls, cmd: Union[str, Tuple[str, ...]], docs: Optional[str] = None, rule: Optional[Union[Rule, T_RuleChecker]] = None, aliases: Optional[Set[Union[str, Tuple[str, ...]]]] = None, **kwargs, ) -> Type[Matcher]: async def _strip_cmd(bot: "Bot", event: "Event", state: T_State): message = event.get_message() segment = message.pop(0) new_message = message.__class__( str(segment).lstrip()[len(state["_prefix"]["raw_command"]) :].lstrip() ) # type: ignore for new_segment in reversed(new_message): message.insert(0, new_segment) handlers = kwargs.pop("handlers", []) handlers.insert(0, _strip_cmd) commands = set([cmd]) | (aliases or set()) _load_service_config(str(cmd), docs) return cls.on_message(command(*commands) & rule, handlers=handlers, **kwargs)
def on_command( cmd: Union[str, Tuple[str, ...]], rule: Optional[Union[Rule, T_RuleChecker]] = None, aliases: Optional[Set[Union[str, Tuple[str, ...]]]] = None, _depth: int = 0, **kwargs, ) -> Type[Matcher]: """ :说明: 注册一个消息事件响应器,并且当消息以指定命令开头时响应。 命令匹配规则参考: `命令形式匹配 <rule.md#command-command>`_ :参数: * ``cmd: Union[str, Tuple[str, ...]]``: 指定命令内容 * ``rule: Optional[Union[Rule, T_RuleChecker]]``: 事件响应规则 * ``aliases: Optional[Set[Union[str, Tuple[str, ...]]]]``: 命令别名 * ``permission: Optional[Union[Permission, T_PermissionChecker]] =]]``: 事件响应权限 * ``handlers: Optional[List[Union[T_Handler, Dependent]]]``: 事件处理函数列表 * ``temp: bool``: 是否为临时事件响应器(仅执行一次) * ``priority: int``: 事件响应器优先级 * ``block: bool``: 是否阻止事件向更低优先级传递 * ``state: Optional[T_State]``: 默认 state :返回: - ``Type[Matcher]`` """ commands = set([cmd]) | (aliases or set()) block = kwargs.pop("block", False) return on_message(command(*commands) & rule, block=block, **kwargs, _depth=_depth + 1)
def on_command( self, cmd: Union[str, Tuple[str, ...]], docs: str, rule: Optional[Union[Rule, T_RuleChecker]] = None, aliases: Optional[Set[Union[str, Tuple[str, ...]]]] = None, **kwargs, ) -> Type[Matcher]: _type = "command" cmd_list = self._load_cmds() if not rule: rule = self.rule if not aliases: aliases = set() cmd_list[cmd] = CommandInfo(type=_type, docs=docs, aliases=list(aliases)).dict() self._save_cmds(cmd_list) async def _strip_cmd(bot: "Bot", event: "Event", state: T_State): message = event.get_message() segment = message.pop(0) new_message = message.__class__( str(segment).lstrip()[len(state["_prefix"]["raw_command"]):]. lstrip()) # type: ignore for new_segment in reversed(new_message): message.insert(0, new_segment) handlers = kwargs.pop("handlers", []) handlers.insert(0, _strip_cmd) commands = set([cmd]) | (aliases or set()) return self.on_message(rule=command(*commands) & rule, handlers=handlers, **kwargs)
if state['arg'].split(' ')[0] == 'removeuser': code = state['arg'].split(' ')[1] or None if code != None and str(code) in str(showuser()): _ = deluser(int(code)) await bot.send(message=f'Delete {code} Success', event=event) else: await bot.send(message='Code invalid',event=event) await arcbot.finish() await arcbot.finish() get_users = on_command('get_user_list', command('get_user_list')) @get_users.handle() async def _get_users(bot: Bot, event: Event, state: T_State): await bot.send(message=str(showuser()), event=event) await get_users.finish() setu = on_command('setu', command('setu')) setu_t = on_keyword(['哭', '枯', '难受', 'wsl']) proxy_url = 'api.ineko.cc/pixiv' async def fetch(target, client): return await client.get(target)