Beispiel #1
0
async def get_result(bot: Bot, event: Event, state: T_State):
    if state.get("content") in ('help', 'h'):
        at_user = MessageSegment.at(event.get_user_id())
        result = await get_help()
    else:
        at_user = MessageSegment.at(event.get_user_id())
        roll_result = await roll_dice(state.get("content"))
        result = MessageSegment.text(roll_result)
    await dice.finish(Message().append(at_user).append(result))
Beispiel #2
0
async def get_result(bot: Bot, event: Event, state: T_State):
    at = MessageSegment.at(event.get_user_id())
    if not state.get("content"):
        result = await get_help()
    elif str(state.get("content")).lower() == "list":
        plugin_set = nonebot.plugin.get_loaded_plugins()
        plugin_names = []
        for plugin in plugin_set:
            try:
                name = f'{plugin.name} | ' \
                    f'{plugin.module.__getattribute__("__help_plugin_name__")}'
            except:
                name = f'{plugin.name}'
            try:
                version = plugin.module.__getattribute__("__help_version__")
            except:
                version = ""
            plugin_names.append(f'{name} {version}')
        plugin_names.sort()
        newline_char = '\n'
        result = f'已加载插件:\n{newline_char.join(plugin_names)}'
    else:
        try:
            plugin = nonebot.plugin.get_plugin(state.get("content"))
        except AttributeError:
            plugin = None
        try:
            result = plugin.module.__getattribute__("__usage__")
        except:
            try:
                result = plugin.module.__doc__
            except AttributeError:
                result = f'{state.get("content")}插件不存在或未加载'
    await helper.finish(Message().append(at).append(
        MessageSegment.text(result)))
Beispiel #3
0
async def handle_group_increase(bot: Bot, event: GroupIncreaseNoticeEvent,
                                state: T_State):
    user_id = event.user_id
    group_id = event.group_id
    detail_type = event.notice_type
    if detail_type == 'group_increase' and DBGroup(
            group_id=group_id).permission_command().result == 1:
        # 发送欢迎消息
        at_seg = MessageSegment.at(user_id=user_id)
        msg = f'{at_seg}欢迎新朋友~\n进群请先看群公告~\n一起愉快地聊天吧!'
        await bot.send(event=event, message=Message(msg))
        logger.info(f'群组: {group_id}, 有新用户: {user_id} 进群')
Beispiel #4
0
async def _(bot: Bot, event: GroupMessageEvent):
    print('tt')
    msg = event.raw_message
    user_id = event.user_id
    jp = rpbot.RP(user_id)

    if jp:
        msg= f'今天的人品值是:{jp}'
        if nn.my_name(user_id):
            await bot.send(event, message=f'{nn.my_name(user_id)}{msg}')
        else:
            await bot.send(event, message=MessageSegment.at(user_id)+msg)
Beispiel #5
0
async def format_token_message(token: CombatToken) -> Message:
    default_msg = Message(f'「{token.name}」')
    if not token.character_id:
        return default_msg
    character = await character_ctl.get_character(token.character_id)
    if not character:
        return default_msg
    external_id = await character_ctl.get_character_external_id(
        character.id, ExternalType.QQ)
    if not external_id:
        return default_msg
    if character.name == token.name:
        return Message(MessageSegment.at(external_id))
    return Message(f'「{token.name}」(控制者:{MessageSegment.at(external_id)})')
Beispiel #6
0
async def on_input_chara_name(bot, event: GroupMessageEvent):
    game = gm.get_game(event.group_id)
    if not game or game.winner:
        return

    dtime = int((datetime.now()-game.start_time).total_seconds())
    c = chara.fromname(event.message.extract_plain_text())
    if c.id != chara.UNKNOWN and c.id == game.answer:
        game.winner = event.user_id
        n = game.record()
        msg = f"正确答案是:{c.name}" + c.icon.cqcode+"\n"
        msg += MessageSegment.at(event.user_id) + \
            f"花了{dtime}秒就猜对了,真厉害!TA已经猜对{n}次了~\n(此轮游戏将在几秒后自动结束,请耐心等待)"
        await bot.send(event, msg)
        await sv.notify_others('pcr_guess_chara_name_win',
                               group_id=event.group_id, user_id=event.user_id, use_time=dtime, bot=bot, event=event)
Beispiel #7
0
def _gen_namelist_text(bm: BattleMaster,
                       uidlist: List[int],
                       memolist: List[str] = None,
                       do_at=False):
    if do_at:
        mems = map(lambda x: str(ms.at(x)), uidlist)
    else:
        mems = map(
            lambda x: bm.get_member(x, bm.group) or bm.get_member(x, 0) or
            {'name': str(x)}, uidlist)
        mems = map(lambda x: x['name'], mems)
    if memolist:
        mems = list(mems)
        for i in range(len(mems)):
            if i < len(memolist) and memolist[i]:
                mems[i] = f"{mems[i]}:{memolist[i]}"
    return mems
Beispiel #8
0
 async def cmd_handler(self, bot: Bot, event: Event, state: T_State, matcher: Matcher, cmd=None):
     # get real command content
     cwd, msg, task = await self.cmd_run(bot=bot, event=event, state=state, matcher=matcher, cmd_replaced=cmd, empty_hint=True)
     if self.workspace_mode == WorkspaceMode.serial:
         queue = self.running_queues[cwd]
         task = queue.run(task)
     output = await task
     if self.reply_notify:
         if hasattr(event, "group_id") and hasattr(event, "message_id"):
             # reply Mode
             output = MessageSegment.reply(event.message_id) + output
         else:
             output = MessageSegment.at(event.get_user_id()) + "\n" + output
     extra_msgs = {}
     if self.hidden_result:
         extra_msgs.update({"message_type": "private"})
     logger.info(f"{msg} ===> {output}")
     await matcher.send(output, **extra_msgs)
Beispiel #9
0
async def call_subscribe(bot: Bot, ctx: Event, round_: int, boss: int):
    bm = BattleMaster(ctx.group_id)
    msg = []
    sub = _load_sub(bm.group)
    slist = sub.get_sub_list(boss)
    mlist = sub.get_memo_list(boss)
    tlist = sub.get_tree_list()
    if slist:
        msg.append(f"您们预约的老{BattleMaster.int2kanji(boss)}出现啦!")
        msg.extend(_gen_namelist_text(bm, slist, mlist, do_at=True))
    if slist and tlist:
        msg.append("==========")
    if tlist:
        msg.append(f"以下成员可以下树了")
        msg.extend(map(lambda x: str(ms.at(x)), tlist))
        sub.clear_tree()
        _save_sub(sub, bm.group)
    if msg:
        await bot.send(ctx, '\n'.join(msg),
                       at_sender=False)  # do not at the sender
Beispiel #10
0
async def _code_runner(bot: Bot, event: MessageEvent):
    user_id = event.get_user_id()
    if not _flmt.check(user_id):
        await code_runner.finish(_flmt_notice)

    msg = str(event.get_message())
    args = msg.split("\n")

    if not args:
        content = f"> {MessageSegment.at(user_id)}\n" + "请键入 /code help 以获取帮助~!"
    elif args[0] == "help":
        content = f"> {MessageSegment.at(user_id)}\n" + CodeRunner().help()
    elif args[0] == "list":
        content = f"> {MessageSegment.at(user_id)}\n" + CodeRunner(
        ).list_supp_lang()
    else:
        content = MessageSegment.at(user_id) + await CodeRunner().runner(msg)

    _flmt.start_cd(user_id)
    await code_runner.finish(Message(content))
Beispiel #11
0
async def h_r(bot: Bot, event: Event, state: T_State):
    id = str(event.get_user_id())
    biaoqing = f"[CQ:face,id=5]"  # 表情包使用
    await test.send(MessageSegment.at(id) + biaoqing + '呜呜,我真的哭了')
Beispiel #12
0
async def h_r(bot: Bot, event: Event, state: T_State):
    id = str(event.get_user_id())
    # biaoqing = f"[CQ:face,id=182]"  # 表情包使用
    # await test.send(MessageSegment.at(id) + biaoqing + '哈哈,笑死我了')
    await test.send(MessageSegment.at(id) + MessageSegment.face(182) + '笑死我了')
Beispiel #13
0
async def h_r(bot: Bot, event: Event, state: T_State):
    id = str(event.get_user_id())
    # yuyin=f"[CQ:record,file=http://baidu.com/1.mp3]"
    # biaoqing=f"[CQ:face,id=123]"#表情包使用
    hongbao = f"[CQ:gift,qq={id},id=0]"  # 礼物使用
    await test.send(MessageSegment.at(id) + hongbao)
Beispiel #14
0
async def hime_handle(bot: Bot, event: GroupUploadNoticeEvent, state: T_State):
    file_name = event.file.name
    file_url = event.file.dict().get('url')
    user_id = event.user_id

    # 不响应自己上传的文件
    if int(event.user_id) == int(bot.self_id):
        await zhouShenHime.finish()

    if file_name.split('.')[-1] not in ['ass', 'ASS']:
        await zhouShenHime.finish()

    # 只处理文件名中含"未校""待校""需校"的文件
    if not any(key in file_name for key in ['未校', '待校', '需校']):
        await zhouShenHime.finish()

    plugin_path = os.path.dirname(__file__)
    download_dir = os.path.join(plugin_path, 'file_downloaded')
    if not os.path.exists(download_dir):
        os.makedirs(download_dir)

    download_file_path = os.path.join(download_dir, file_name)
    dl_res = await download_file(url=file_url, file_path=download_file_path)
    if not dl_res.success():
        logger.error(f'下载文件失败: {dl_res.info}')
        await zhouShenHime.finish()

    at_msg = MessageSegment.at(user_id=user_id)
    msg = f'{at_msg}你刚刚上传了一份轴呢, 让我来帮你看看吧!'
    await zhouShenHime.send(Message(msg))

    checker = ZhouChecker(file_path=download_file_path, flash_mode=True)

    try:
        init_res = checker.init_file(auto_style=True)
        if not init_res.success():
            logger.error(f'初始化时轴文件失败: {init_res.info}')
            await zhouShenHime.finish('出错了QAQ')

        handle_res = checker.handle()
        if not handle_res.success():
            logger.error(f'处理时轴文件失败: {handle_res.info}')
            await zhouShenHime.finish('出错了QAQ')
    except Exception as e:
        logger.error(f'执行ZhouChecker时发生了意外的错误: {repr(e)}')
        await zhouShenHime.finish('出错了QAQ')
        return

    output_txt_path = os.path.abspath(handle_res.result.get('output_txt_path'))
    output_txt_filename = os.path.basename(output_txt_path)

    output_ass_path = os.path.abspath(handle_res.result.get('output_ass_path'))
    output_ass_filename = os.path.basename(output_ass_path)

    character_count = handle_res.result.get('character_count')
    overlap_count = handle_res.result.get('overlap_count')
    flash_count = handle_res.result.get('flash_count')

    # 没有检查到错误的话就直接结束
    if character_count + flash_count + overlap_count == 0:
        msg = f'看完了! 没有发现符号错误、疑问文本、叠轴和闪轴, 真棒~'
        await zhouShenHime.finish(msg)

    try:
        group_file_info = await bot.call_api(api='get_group_root_files',
                                             group_id=event.group_id)
        group_folders = group_file_info.get('folders')

        folder_id = None
        if group_folders:
            for folder in group_folders:
                if folder.get('folder_name') == '锤轴记录':
                    folder_id = folder.get('folder_id')
                    break

        if folder_id:
            await bot.call_api(api='upload_group_file',
                               group_id=event.group_id,
                               folder=folder_id,
                               file=output_txt_path,
                               name=output_txt_filename)
            await bot.call_api(api='upload_group_file',
                               group_id=event.group_id,
                               folder=folder_id,
                               file=output_ass_path,
                               name=output_ass_filename)
        else:
            await bot.call_api(api='upload_group_file',
                               group_id=event.group_id,
                               file=output_txt_path,
                               name=output_txt_filename)
            await bot.call_api(api='upload_group_file',
                               group_id=event.group_id,
                               file=output_ass_path,
                               name=output_ass_filename)
    except Exception as e:
        logger.error(f'上传结果时时发生了意外的错误: {repr(e)}')
        await zhouShenHime.finish('出错了QAQ')
        return

    msg = f'看完了! 以下是结果:\n\n符号及疑问文本共{character_count}处\n' \
          f'叠轴共{overlap_count}处\n闪轴共{flash_count}处\n\n锤轴结果已上传, 请参考修改哟~'
    await zhouShenHime.finish(msg)
Beispiel #15
0
async def longwang(bot: Bot, event: HonorNotifyEvent):
    if event.honor_type == 'talkative':
        reply = ['龙王出来喷水', '呼风唤雨']
        msg = MessageSegment.at(event.get_user_id())
        msg += random.choice(reply)
        await bot.send(event, msg)