async def parse(bot: Bot, event: MessageEvent, state: T_State): args = str(event.get_plaintext()).strip().split() if not args: await admin_mail_add.reject('你似乎没有发送有效的参数呢QAQ, 请重新发送:') state[state["_current_key"]] = args[0] if state[state["_current_key"]] == '取消': await admin_mail_add.finish('操作已取消')
async def arena_miner(bot, event: MessageEvent): try: rank = int(event.get_plaintext()) except: return rank = np.clip(rank, 1, 15001) s_all = all_season[1:rank].sum() s_this = this_season[1:rank].sum() msg = f"{MessageSegment.at(event.user_id)}\n最高排名奖励还剩{s_this}钻\n历届最高排名还剩{s_all}钻" await bot.send(event, msg)
async def prepare(bot: Bot, event: MessageEvent, state: dict): if event.get_event_name() == 'message.group.anonymous': assert isinstance(event, GroupMessageEvent) await dice.finish((f"化身为「{event.anonymous.name}」的无名鼠辈啊……" f"若要掷出决定命运之骰的话,不如先光明正大地亮出自己的身份如何?")) arg = event.raw_message[len(state['_matched']):].strip().strip() if not arg: await dice.finish('🤔 奇怪,好像没有见到算式呢?') args = arg.split('|', maxsplit=1) state['expr'] = args[0] if len(args) > 1: state['reason'] = args[1]
async def _(bot: Bot, event: MessageEvent, state: dict): await prepare_combat_context(combat_cmd, bot, event, state) arg = str(event.get_message()).strip() if arg == '': await combat_status(bot, event, state) elif arg == 'start': await combat_start(bot, event, state) elif arg == 'run': await combat_run(bot, event, state) elif arg == 'next': await combat_next(bot, event, state) elif arg == 'end': await combat_end(bot, event, state)
async def prepare(bot: Bot, event: MessageEvent, state: dict): msg_text = event.get_plaintext().strip().replace('\r\n', '\n') if msg_text and VALID_MESSAGE_REGEX.search(msg_text): message_type = MessageType.TEXT content = TextMessageContent(text=msg_text) else: await say.finish() return is_prepared = await base.prepare_context(say, bot, event, state) if not is_prepared: await say.finish() return state['message_type'] = message_type state['content'] = content
async def prepare_context(matcher: Type[Matcher], bot: Bot, event: MessageEvent, state: dict) -> bool: if event.get_event_name() != 'message.group.normal': return False assert isinstance(event, GroupMessageEvent) room_external_id = str(event.group_id) member_external_id = str(event.user_id) name = event.sender.card or event.sender.nickname room = await room_ctl.get_room_by_external(ExternalType.QQ, room_external_id) if not room: return False state['room'] = room episode = await episode_ctl.get_room_running_episode(room) if not episode: return False state['episode'] = episode campaign = await campaign_ctl.get_campaign(episode.campaign_id) character = await character_ctl.get_character_by_campaign_name( campaign, name) state['character'] = character member = await member_ctl.get_member_by_external(ExternalType.QQ, member_external_id) if member and member.id == campaign.owner_id: state['is_gm'] = True return True if not character: async with table.db.begin(): character = await character_ctl.create_character(name, member) await character_ctl.bind_character_external( character, ExternalType.QQ, member_external_id) await character_ctl.bind_character_campaign(character, campaign) state['character'] = character elif not member: if not await character_ctl.check_character_external( character, ExternalType.QQ, member_external_id): await matcher.finish(f'冒充其他用户的角色') else: if not character.member_id: await character_ctl.bind_character_member(character, member) elif character.member_id != member.id: await matcher.finish(f'冒充其他用户的角色') state['is_gm'] = False return True
async def must_prepare_context(matcher: Type[Matcher], bot: Bot, event: MessageEvent, state: dict): if event.message_type != 'group': await matcher.finish('🚫 这个指令只能在群聊中使用。') assert isinstance(event, GroupMessageEvent) if event.get_event_name() == 'message.group.anonymous': await matcher.finish('🚫 这个指令不能在匿名状态下使用。') room_external_id = str(event.group_id) member_external_id = str(event.user_id) room = await room_ctl.get_room_by_external(ExternalType.QQ, room_external_id) if not room: await matcher.finish('⛔ 看起来这个群聊还没有绑定房间。\n' '请在网站上创建房间并绑定该群聊后再试试吧。') member = await member_ctl.get_member_by_external(ExternalType.QQ, member_external_id) campaign = await campaign_ctl.get_campaign(room.current_campaign_id) if not campaign: await matcher.finish('⛔ 房间内还没有已就绪的战役。\n' '请在网站上创建一个战役,或是将一个已有的战役设为「当前战役」后再试试。') if not member or member.id != campaign.owner_id: await matcher.finish('⛔ 没有权限使用该指令哦!') state['room'] = room state['member'] = member state['campaign'] = campaign
async def handle_first_receive(bot: Bot, event: MessageEvent, state: T_State): args = str(event.get_plaintext()).strip().split() if args: await admin_mail_add.finish('该命令不支持参数QAQ') await admin_mail_add.send('您正在添加邮箱, 请按提示操作, 注意: 当前只支持接收IMAP邮箱邮件!')
def get_operator_name(event: MessageEvent): if event.get_event_name().startswith('message.group'): return f"{MessageSegment.at(event.user_id)} " else: return '你'
async def _(bot: Bot, event: MessageEvent, state: dict): seed = str(event.get_message()).strip().encode('utf8') if not seed: seed = None await dice_ctl.refresh_randomizer(seed) await refresh.finish(str(Config.RUNTIME_ID))