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
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')
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
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)
def round_code(x: str) -> int: x = helper.normalize_str(x) if _rex_rcode.match(x): return int(x) raise ParseError('周目数不合法 应为不大于999的非负整数')
def boss_code(x: str) -> int: x = helper.normalize_str(x) if m := _rex1_bcode.match(x): return int(m.group(1))
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