Exemple #1
0
async def pool_handle(bot: Bot, event: Event, state: dict):
    msg = helper.normalize_str(event.message.extract_plain_text())
    if not msg:
        await sv_pool.finish(POOL_NAME_TIP)
    if not priv.check_priv(event, priv.ADMIN):
        await sv_pool.finish('切换卡池请联系管理员')
    state['pool'] = msg
Exemple #2
0
def server_code(x: str) -> int:
    x = helper.normalize_str(x)
    if x in ('jp', '日', '日服'):
        return BattleMaster.SERVER_JP
    elif x in ('tw', '台', '台服'):
        return BattleMaster.SERVER_TW
    elif x in ('cn', '国', '国服', 'b', 'b服'):
        return BattleMaster.SERVER_CN
    raise ParseError('未知服务器地区 请用jp/tw/cn')
Exemple #3
0
def cb_cmd(name, parser: ArgParser) -> Callable:
    if isinstance(name, str):
        name = (name, )
    if not isinstance(name, Iterable):
        raise ValueError('`name` of cb_cmd must be `str` or `Iterable[str]`')
    names = map(lambda x: helper.normalize_str(x), name)

    def deco(func) -> Callable:
        for n in names:
            if n in _registry:
                logger.warning(
                    f'出现重名命令:{func.__name__} 与 {_registry[n].__name__}命令名冲突')
            else:
                _registry[n] = (func, parser)
        return func

    return deco
Exemple #4
0
async def _clanbattle_bus(bot: Bot, event: Event, state: dict):
    # check prefix
    start = ''
    for m in event.message:
        if m.type == 'text':
            start = m.data.get('text', '').lstrip()
            break
    # if not start or start[0] not in '!!':
    #     return

    # find cmd
    plain_text = event.message.extract_plain_text()
    cmd, *args = plain_text[0:].split()
    cmd = helper.normalize_str(cmd)
    if cmd in _registry:
        func, parser = _registry[cmd]
        try:
            logger.info(
                f'Message {event.message_id} is a clanbattle command, start to process by {func.__name__}.'
            )
            args = parser.parse(args, event.message)
            await func(bot, event, args)
            logger.info(
                f'Message {event.message_id} is a clanbattle command, handled by {func.__name__}.'
            )
        except DatabaseError as e:
            await bot.send(event,
                           f'DatabaseError: {e.message}\n{SORRY}\n※请及时联系维护组',
                           at_sender=True)
        except ClanBattleError as e:
            await bot.send(event, e.message, at_sender=True)
        except Exception as e:
            logger.exception(e)
            logger.error(
                f'{type(e)} occured when {func.__name__} handling message {event.message_id}.'
            )
            await bot.send(event,
                           f'Error: 机器人出现未预料的错误\n{SORRY}\n※请及时联系维护组',
                           at_sender=True)
Exemple #5
0
def round_code(x: str) -> int:
    x = helper.normalize_str(x)
    if _rex_rcode.match(x):
        return int(x)
    raise ParseError('周目数不合法 应为不大于999的非负整数')
Exemple #6
0
def boss_code(x: str) -> int:
    x = helper.normalize_str(x)
    if m := _rex1_bcode.match(x):
        return int(m.group(1))
Exemple #7
0
def damage_int(x: str) -> int:
    x = helper.normalize_str(x)
    if m := _rex_dint.match(x):
        x = int(m.group(1)) * _unit_rate[m.group(2).lower()]
        if x < 100000000:
            return x