示例#1
0
def on_regex(pattern: str,
             flags: Union[int, re.RegexFlag] = 0,
             rule: Optional[Rule] = None,
             permission: Permission = Permission(),
             **kwargs) -> Type[Matcher]:
    return on_message(regex(pattern, flags) &
                      rule, permission, **kwargs) if rule else on_message(
                          regex(pattern, flags), permission, **kwargs)
示例#2
0
文件: on.py 项目: synodriver/nonebot2
def on_regex(
    pattern: str,
    flags: Union[int, re.RegexFlag] = 0,
    rule: Optional[Union[Rule, T_RuleChecker]] = None,
    _depth: int = 0,
    **kwargs,
) -> Type[Matcher]:
    """
    :说明:

      注册一个消息事件响应器,并且当消息匹配正则表达式时响应。

      命令匹配规则参考: `正则匹配 <rule.md#regex-regex-flags-0>`_

    :参数:

      * ``pattern: str``: 正则表达式
      * ``flags: Union[int, re.RegexFlag]``: 正则匹配标志
      * ``rule: Optional[Union[Rule, T_RuleChecker]]``: 事件响应规则
      * ``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]``
    """
    return on_message(regex(pattern, flags) & rule,
                      **kwargs,
                      _depth=_depth + 1)
示例#3
0
def on_regex(
    pattern: str,
    flags: Union[int, re.RegexFlag] = 0,
    rule: Optional[Union[Rule, T_RuleChecker]] = None,
    _depth: int = 0,
    **kwargs,
) -> Type[Matcher]:
    """
    注册一个消息事件响应器,并且当消息匹配正则表达式时响应。

    命令匹配规则参考: `正则匹配 <rule.md#regex-regex-flags-0>`_

    参数:
        pattern: 正则表达式
        flags: 正则匹配标志
        rule: 事件响应规则
        permission: 事件响应权限
        handlers: 事件处理函数列表
        temp: 是否为临时事件响应器(仅执行一次)
        priority: 事件响应器优先级
        block: 是否阻止事件向更低优先级传递
        state: 默认 state
    """
    return on_message(regex(pattern, flags) & rule,
                      **kwargs,
                      _depth=_depth + 1)
示例#4
0
    def on_regex(self,
                 pattern: str,
                 flags: Union[int, re.RegexFlag] = 0,
                 rule: Optional[Rule] = None,
                 **kwargs) -> Type[Matcher]:
        """
        :说明:

          注册一个消息事件响应器,并且当消息匹配正则表达式时响应。

          命令匹配规则参考: `正则匹配 <rule.html#regex-regex-flags-0>`_

        :参数:

          * ``pattern: str``: 正则表达式
          * ``flags: Union[int, re.RegexFlag]``: 正则匹配标志
          * ``rule: Optional[Union[Rule, T_RuleChecker]]``: 事件响应规则
          * ``permission: Optional[Permission]``: 事件响应权限
          * ``handlers: Optional[List[T_Handler]]``: 事件处理函数列表
          * ``temp: bool``: 是否为临时事件响应器(仅执行一次)
          * ``priority: int``: 事件响应器优先级
          * ``block: bool``: 是否阻止事件向更低优先级传递
          * ``state: Optional[T_State]``: 默认 state
          * ``state_factory: Optional[T_StateFactory]``: 默认 state 的工厂函数

        :返回:

          - ``Type[Matcher]``
        """
        return self.on_message(rule=regex(pattern, flags) & rule, **kwargs)
示例#5
0
    def on_regex(
        self,
        pattern: str,
        docs: str,
        flags: Union[int, re.RegexFlag] = 0,
        rule: Optional[Union[Rule, T_RuleChecker]] = None,
        **kwargs,
    ) -> Type[Matcher]:
        _type = "regex"
        if not rule:
            rule = self.rule

        cmd_list = self._load_cmds()
        cmd_list[pattern] = CommandInfo(type=_type, docs=docs,
                                        aliases=list()).dict()
        self._save_cmds(cmd_list)

        return self.on_message(rule=regex(pattern, flags) & rule, **kwargs)
示例#6
0
from nonebot.rule import regex

from epicteller.bot.controller import base
from epicteller.core.controller import message as message_ctl
from epicteller.core.controller import episode as episode_ctl
from epicteller.core.controller import room as room_ctl
from epicteller.core.model.character import Character
from epicteller.core.model.episode import Episode
from epicteller.core.model.message import TextMessageContent, ImageMessageContent, MessageContent
from epicteller.core.util import imghosting
from epicteller.core.util.enum import MessageType, ExternalType

VALID_MESSAGE_REGEX_PATTERN = r'^[^()()]'
VALID_MESSAGE_REGEX = re.compile(VALID_MESSAGE_REGEX_PATTERN)

say = on_message(rule=regex(VALID_MESSAGE_REGEX_PATTERN),
                 permission=permission.GROUP,
                 priority=99999)


@say.handle()
async def _(bot: Bot, event: MessageEvent, state: dict):
    await prepare(bot, event, state)
    episode: Episode = state.get('episode')
    character: Character = state.get('character')
    message_type: MessageType = state.get('message_type')
    content: MessageContent = state.get('content')
    is_gm: bool = state.get('is_gm')

    message = await message_ctl.create_message(episode, character,
                                               message_type, content, is_gm)
示例#7
0
from loguru import logger
from nonebot import on_command
from nonebot.adapters.cqhttp import Bot, Event, unescape
from .utils import searchPic, pixivicurl, auth, sauce, ascii2d
import Pbot.cq as cq
from nonebot.rule import regex
import re

st = on_command("st", rule=regex("^st"))


@st.handle()
async def _(bot: Bot, event: Event, state: dict):
    msg = str(event.message).strip()
    if msg:
        state["keyword"] = msg


@st.got("keyword", prompt="发送你想搜的图吧!")
async def _(bot: Bot, event: Event, state: dict):
    msg = event.current_arg_images
    if len(msg) > 0:
        state["pic"] = msg[0]
        return
    msg = str(event.message).strip()
    if msg:
        state["keyword"] = msg
    else:
        await st.reject("输入为空哦!!")

示例#8
0
        return
    except error.combat.CombatOrderEmptyError:
        await combat_cmd.finish('❌ 先攻列表为空,无法进入下一行动轮。')
        return


async def combat_end(bot: Bot, event: MessageEvent, state: dict):
    combat: Combat = state['combat']
    try:
        await combat_ctl.end_combat(combat)
    except error.combat.CombatEndedError:
        await combat_cmd.finish('❌ 当前战斗已结束。')
        return


next_token = on_message(rule=regex(r'^\s*(回合结束|行动结束)\s*$'),
                        permission=permission.GROUP,
                        priority=99998,
                        block=True)


@next_token.handle()
async def _(bot: Bot, event: MessageEvent, state: dict):
    await prepare_combat_context(next_token, bot, event, state)
    combat: Combat = state['combat']
    if not combat or combat.state != CombatState.RUNNING:
        return
    is_gm: bool = state['is_gm']
    character: Optional[Character] = state['character']
    if not is_gm:
        if not character:
示例#9
0
from nonebot.rule import regex

from epicteller.bot.controller import base
from epicteller.core import error
from epicteller.core.config import Config
from epicteller.core.controller import combat as combat_ctl
from epicteller.core.controller import dice as dice_ctl
from epicteller.core.controller import message as message_ctl
from epicteller.core.model.character import Character
from epicteller.core.model.combat import CombatToken
from epicteller.core.model.episode import Episode
from epicteller.core.model.message import DiceMessageContent
from epicteller.core.model.room import Room
from epicteller.core.util.enum import DiceType, MessageType, CombatState

dice = on_message(rule=regex(r'^[##::]|^(\.r)'))


@dice.handle()
async def _(bot: Bot, event: MessageEvent, state: dict):
    await prepare(bot, event, state)
    is_prepared = await base.prepare_context(dice, bot, event, state)
    result, reason = await must_get_dice_result(bot, event, state)
    value = result.value
    reason_clause = f"以「{reason}」的名义" if reason else ''
    msg = f"🎲 {get_operator_name(event)}{reason_clause}掷出了"
    if isinstance(value, Iterable):
        dice_type = DiceType.ARRAY
        msg += f"一串骰子,分别是 {', '.join(map(str, value))} 点。\n"
    elif isinstance(value, bool):
        dice_type = DiceType.CHECK
示例#10
0
from loguru import logger
from nonebot import on_command
from nonebot.adapters.cqhttp import Bot, Event, unescape
from Pbot.utils import cksafe
from .utils import searchPic, pixivicurl, auth, sauce, ascii2d, getSetuHigh
import Pbot.cq as cq
from nonebot.rule import regex
import re

st = on_command("st", rule=regex("^st(?: |$)"))


@st.handle()
async def _(bot: Bot, event: Event, state: dict):
    msg = str(event.message).strip()
    if msg:
        state["keyword"] = msg


@st.got("keyword", prompt="发送你想搜的图吧!")
async def _(bot: Bot, event: Event, state: dict):
    msg = event.current_arg_images
    if len(msg) > 0:
        state["pic"] = msg[0]
        return
    msg = str(event.message).strip()
    if msg:
        state["keyword"] = msg
    else:
        await st.reject("输入为空哦!!")