Exemple #1
0
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('操作已取消')
Exemple #2
0
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)
Exemple #3
0
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]
Exemple #4
0
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)
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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邮箱邮件!')
Exemple #9
0
def get_operator_name(event: MessageEvent):
    if event.get_event_name().startswith('message.group'):
        return f"{MessageSegment.at(event.user_id)} "
    else:
        return '你'
Exemple #10
0
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))