async def _onFocus(event: Event):
     if isinstance(event, GroupMessageEvent):
         return (event.message_type == message_type
                 and event.get_user_id() == user_id
                 and event.group_id == group_id)
     elif isinstance(event, PrivateMessageEvent):
         return event.message_type == message_type and event.get_user_id(
         ) == user_id
Пример #2
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))
Пример #3
0
async def _(bot: Bot, event: Event, state: T_State):

    yml_path = "src/plugins/jrrp/jrrp.yml"
    if not event.is_tome():
        sender = event.get_user_id()

        with open(yml_path, "r", encoding="utf-8") as f:
            jrrp_log = yaml.load(f, Loader=yaml.FullLoader)

        today = datetime.date.today()
        if not jrrp_log['date'] == today:
            jrrp_log = {'date': today}

        if sender in jrrp_log.keys():
            rp = jrrp_log[sender]
        else:
            rp = randint(0, 100)
            jrrp_log[sender] = rp
            with open("src/plugins/jrrp/jrrp.yml", "w", encoding="utf-8") as f:
                yaml.dump(jrrp_log, f)

        msg = [{
            'type': 'at',
            'data': {
                'qq': sender
            }
        }, {
            'type': 'text',
            'data': {
                'text': f'你今天的人品是 {rp}%'
            }
        }]
        await jrrp.send(msg)
Пример #4
0
async def command_env_settings(bot: Bot, event: Event, state: T_State, matcher: Matcher, regex: str):
    env_vars = os.environ.copy()
    old_python_env = env_vars.get("PYTHONPATH", "")
    if old_python_env.strip() == "":
        old_python_env = []
    else:
        old_python_env = old_python_env.split(":")
    env_vars["PYTHONPATH"] = ":".join(old_python_env + [str(PROJECT_ROOT)])
    if event is not None:
        env_vars["BOT_USER_ID"] = str(event.get_user_id())
        env_vars["BOT_SESSION_ID"] = str(event.get_session_id())
        if event.is_tome():
            env_vars["TO_BOT"] = str(1)
        env_vars["BOT_EVENT_TYPE"] = str(event.get_type())
        msg = str(event.get_plaintext())
        env_vars["BOT_EVENT_MESSAGE"] = msg
        group_id = getattr(event, "group_id", None)
        if group_id is not None:
            env_vars["BOT_GROUP_ID"] = str(group_id)
        if regex is not None:
            match = re.match(regex, msg, flags=re.MULTILINE | re.DOTALL)
            if match:
                _, origin_command, command_text = match.groups()
                env_vars["BOT_EVENT_COMMAND"] = origin_command
                env_vars["BOT_EVENT_COMMAND_ARGS"] = command_text
    return env_vars
Пример #5
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)))
async def handle_first_receive(bot: Bot, event: Event, state: T_State):
    user = event.get_user_id()
    at_ = "[CQ:at,qq={}]".format(user)
    replay = await get_randint()
    msg = at_ + " " + replay
    msg = Message(msg)
    await character.finish(message=msg)
Пример #7
0
async def _(bot: Bot, event: Event, state: dict):
    qq = int(event.get_user_id())
    argv = str(event.get_message()).strip().split(' ')
    try:
        nickname = binding_map[qq]
        if len(argv) != 2:
            await sancheck.send("你这白痴又弄错命令格式了!给我记好了,正确的格式是.sc <成功> <失败>!")
            return
        role = role_cache[nickname]
        value = random.randint(1, 100)
        sanity = role['stats']['san']
        if value > sanity:
            s, v = roll_expression(argv[1])
            role['stats']['san'] -= v
            await sancheck.send(
                "【%s】的理智检定:%d/%d 失败,理智扣除%s点,剩余%d点" %
                (nickname, value, sanity, s, role['stats']['san']))
        else:
            s, v = roll_expression(argv[0])
            role['stats']['san'] -= v
            await sancheck.send(
                "【%s】的理智检定:%d/%d 成功,理智扣除%s点,剩余%d点" %
                (nickname, value, sanity, s, role['stats']['san']))
    except KeyError:
        await sancheck.send("【%s】看起来还没绑定角色呢。输入.bind <角色名称> 进行绑定吧?" %
                            (event.sender.nickname))
        return
Пример #8
0
async def _(bot: Bot, event: Event, state: dict):
    qq = int(event.get_user_id())
    try:
        nickname = binding_map[qq]
    except KeyError:
        await rollcheck.send("【%s】看起来还没绑定角色呢。输入.bind <角色名称> 进行绑定吧?" %
                             (event.sender.nickname))
        return
    argv = str(event.get_message()).strip().split(' ')
    try:
        stat_name = argv[0]
        if len(argv) == 2:
            value = int(argv[1])
            await rollcheck.send(check(nickname, stat_name, value))
            return
        try:
            role = role_cache[nickname]
            value, err = search_check(role, stat_name)
            if not err:
                await rollcheck.send("未找到能力值【%s】!真的有这个能力吗?" % stat_name)
                return
            await rollcheck.send(check(nickname, stat_name, value))
        except KeyError:
            await rollcheck.send("【%s】看起来还没绑定角色呢。输入.bind <角色名称> 进行绑定吧?" %
                                 (event.sender.nickname))
            return
    except Exception:
        await rollcheck.send("你这白痴又弄错命令格式了!给我记好了,正确的格式是.rc <技能/属性> [值]!")
        return
Пример #9
0
async def _(bot: Bot, event: Event, state: dict):
    name = str(event.get_message()).strip()
    qq = int(event.get_user_id())
    try:
        var = binding_map[qq]
    except KeyError:
        try:
            var = role_cache[name]
        except KeyError:
            text = requests.get("http://47.100.50.175:25565/query", {
                "name": name
            }).text
            if text == "{}":
                await bind.send("千雪没能找到角色【%s】,下次再出错就把你拉入黑名单了哦!" % name)
                return
            role_cache[name] = demjson.decode(text, encoding='utf-8')
        if check_map(name):
            binding_map[qq] = name
        else:
            await bind.send("这个角色已经绑定过啦!难道还想两个人控制一个角色吗?!")
            return
        await bind.send("绑定成功!现在千雪已经认为【%s】就是【%s】了哦!" %
                        (event.sender.nickname, name))
        return
    await bind.send("你已经绑定过角色了哟~")
async def onFocus(event: Event) -> Permission:
    """
    说明

      * 专注于当前会话类型,需配合 `nonebot.matcher.Matcher.permission_updater` 使用

    示例

      * 见连续会话实例
    """
    message_type = event.message_type
    user_id = event.get_user_id()
    group_id = None
    if isinstance(event, GroupMessageEvent):
        group_id = event.group_id

    async def _onFocus(event: Event):
        if isinstance(event, GroupMessageEvent):
            return (event.message_type == message_type
                    and event.get_user_id() == user_id
                    and event.group_id == group_id)
        elif isinstance(event, PrivateMessageEvent):
            return event.message_type == message_type and event.get_user_id(
            ) == user_id

    return Permission(_onFocus)
Пример #11
0
async def handle(bot: Bot, event: Event, state: T_State):
    try:
        user_id = event.get_user_id()
        at_ = "[CQ:at,qq={}]".format(user_id)
        args = str(state["args"]).split()
        if len(args) != 2:
            await query.send(Message(QUERY_ARGS_PROMPT))
        db = pymysql.connect(host=QQMAP_HOST, port=3306, user=QQMAP_USERNAME,
                             passwd=QQMAP_PASSWORD, db="cpds_db", charset='utf8')

        cursor = db.cursor()
        type, key = args
        logger.debug(f'query: {type} {key}')
        if type == '学号':
            qq = await stunum2qq(key, cursor)
            if not qq:
                await query.send(Message(at_ + QUERY_NO_DATA_PROMPT))
            else:
                await query.send(Message(at_ + QUERY_DATA_FORMAT.format(key, qq)))
        elif str(type).lower() == 'qq':
            stunum = await qq2stunum(key, cursor)
            if not stunum:
                await query.send(Message(at_ + QUERY_NO_DATA_PROMPT))
            else:
                await query.send(Message(at_ + QUERY_DATA_FORMAT.format(stunum, key)))
        else:
            await query.send(Message(QUERY_NO_SUCH_TYPE_PROMPT))
        db.close()
        cursor.close()
    except Exception as e:
        msg = f"Exception: {Exception}\n"
        msg += f"str(e): {str(e)}\nrepr(e): {repr(e)}\n"
        msg += f"traceback.format_exc(): {traceback.format_exc()}"
        await exception_log(bot, msg)
Пример #12
0
async def _(bot: Bot, event: Event, state: dict):
    result = roll_expression(str(event.get_message()).strip())
    name = event.sender.nickname
    try:
        name = binding_map[int(event.get_user_id())]
    except KeyError:
        pass
    await roll.send("【%s】的掷骰结果:%s" % (name, result[0]))
Пример #13
0
async def handle_first_receive(bot: Bot, event: Event, state: T_State):
    if event.get_user_id() != "1364374624":
        await Delwords.finish(Message("你就是逊啊,没权限"))
    del_msg = IsDel()
    if del_msg:
        await Delwords.finish(
            Message("已将语录:\n-------\n" + del_msg + "\n-------\n删除!"))
    else:
        await Delwords.finish(Message("删除失败了,嗯嘿嘿"))
Пример #14
0
async def handle(bot: Bot, event: Event, state: T_State):
    at_ = "[CQ:at,qq={}]".format(event.get_user_id())
    async with httpx.AsyncClient() as client:
        resp = await client.get(
            'https://api.mtyqx.cn/api/random.php?return=json')
        logger.debug(resp.json())
        imgurl = resp.json()['imgurl']
        cqimg = f"[CQ:image,file=1.{imgurl.split('.')[1]},url={imgurl}]"
        await setu.send(Message(at_ + cqimg))
Пример #15
0
async def _(bot: Bot, event: Event, state: dict):
    qq = int(event.get_user_id())
    try:
        var = binding_map[qq]
        del role_cache[binding_map[qq]]
        del binding_map[qq]
        await unbind.send("解绑成功~")
    except KeyError:
        await unbind.send("你还未绑定角色哦~")
Пример #16
0
async def _(bot: Bot, event: Event, state: dict):
    qq = int(event.get_user_id())
    try:
        nickname = binding_map[qq]
        role = role_cache[nickname]
        await showall.send(gen_showall_text(role), ensure_private=True)
        await showall.send("已发送私聊消息~", at_sender=True)
    except KeyError:
        await showall.send("【%s】看起来还没绑定角色呢。输入.bind <角色名称> 进行绑定吧?" %
                           event.sender.nickname)
        return
Пример #17
0
async def faq_local(bot: Bot, event: Event):
    raw_question = str(event.get_message())
    question = raw_question.replace(' ', '')
    question = question.replace('\r\n', '')
    if question:
        reply, confidence = await test_local(question, event.is_tome())
        if event.is_tome():
            if confidence < config.CONFIDENCE:
                reply = '我现在还不太明白,但没关系,以后的我会变得更强呢!'
            reply = add_at(reply, event.get_user_id())
            await faq.send(message.Message(reply))
Пример #18
0
async def give_okodokai(bot, event: Event):
    uid = event.get_user_id()
    if not lmt.check(uid):
        await bot.send(event, '明日はもう一つプレゼントをご用意してお待ちしますね', at_sender=True)
        return
    lmt.increase(uid)
    present = random.choice(login_presents)
    todo = random.choice(todo_list)
    await bot.send(
        event,
        f'\nおかえりなさいませ、きさま{R.img("priconne/kokkoro_stamp.png").cqcode}\n{present}を獲得しました\n私からのプレゼントです\n主人今天要{todo}吗?',
        at_sender=True)
Пример #19
0
async def handle_event(bot: Bot, event: Event, state: T_State):
    filename = str(event.get_user_id()) + str(random.randint(0,
                                                             10000)) + ".jpg"
    content = state["content"]

    at_ = f"[CQ:at,qq={event.get_user_id()}]"

    if len(content) >= 25:
        await luxun.finish(Message(at_ + " 太长了, 鲁迅说不完!"))
    else:
        await process_pic(content, filename)
        cqimg = f"[CQ:image,file=file:////root/qqBot/NothAmor-Bot/nothamor_bot/plugins/luxun_says/says_img/{filename}]"

        await luxun.finish(Message(cqimg))
Пример #20
0
async def handle_first_receive(bot: Bot, event: Event, state: T_State):
    user = event.get_user_id()
    at_ = "[CQ:at,qq={}]".format(user)
    replay = await get_randint()
    msg = at_ + " " + replay
    msg = Message(msg)

    # def _unescape(message: Message, segment: MessageSegment):
    #     if segment.is_text():
    #         return message.append(unescape(str(segment)))
    #     return message.append(segment)

    # msg = reduce(_unescape, msg, Message())
    await rp.finish(message=msg)
Пример #21
0
def iterate_groups(bot: Bot, event: Event) -> Iterable[PermissionGroup]:
    # 特定用户
    user = getattr(event, 'user_id', None) or event.get_user_id()
    group, _ = get('user', user)
    yield group

    # Bot超级用户
    if event.get_user_id() in bot.config.superusers:
        group, _ = get('global', 'superuser')
        yield group

    # 所有用户
    group, _ = get('global', 'anyone')
    yield group

    # 群组
    if isinstance(event, GroupMessageEvent):
        # 用户在群组内的身份
        if event.sender.role == 'admin':
            group, _ = get('global', 'group_admin')
            yield group
        elif event.sender.role == 'owner':
            group, _ = get('global', 'group_owner')
            yield group

        # 特定群组
        group, _ = get('group', event.group_id)
        yield group

        # 所有群组
        group, _ = get('global', 'group')
        yield group

    # 私聊
    if isinstance(event, PrivateMessageEvent):
        group, _ = get('global', 'private')
        yield group
Пример #22
0
async def process_msg(bot: Bot, event: Event, enable: bool):
    try:
        args = event.get_plaintext().strip()
        if not args:
            msg = _GROUP_USAGE if isinstance(
                event, GroupMessageEvent) else _PRIVATE_USAGE
            raise ValueError('未找到参数。' + msg)
        args = args.split(' ')

        # 从群组内调用
        if isinstance(event, GroupMessageEvent):
            succeed = set()
            failed = set()
            group_id = event.group_id
            services = args
            for sv_name in services:
                sv = Service.get_loaded_services().get(sv_name)
                if sv:
                    await set_sv(sv, group_id, enable)
                    succeed.add(sv_name)
                else:
                    failed.add(sv_name)
            msg = ''
            if succeed:
                msg += '服务' + '、'.join([str(i) for i in succeed]) + \
                       '已启用' if enable else '已禁用' + '\n'
            if failed:
                msg += '不存在这些服务:' + '、'.join([str(i) for i in failed])
            await bot.send(event, msg)

        # 私聊调用,需要superuser权限
        elif isinstance(event, PrivateMessageEvent):
            if not is_superuser(event.get_user_id()):
                return
            parser = ArgParserPrivate(enable, args)
            await parser.run()
            msg = ''
            if parser.succeed:
                msg += '执行完毕。\n'
            if parser.failed:
                msg += '以下群组发生错误:\n'
                msg += '\n'.join(
                    [f'  {name}: {msg}\n'
                     for name, msg in parser.failed]) + '\n'
                msg += _PRIVATE_USAGE
            await bot.send(event, msg)

    except ValueError as e:
        await bot.send(event, str(e))
Пример #23
0
async def handle(bot: Bot, event: Event, state: T_State):
    try:
        user_id = event.get_user_id()
        at_ = "[CQ:at,qq={}]".format(user_id)
        args = str(state["args"]).split()
        if len(args) == 1:
            await addEvent(user_id, args[0], add)
        elif len(args) == 2:
            await addEvent(args[0], args[1], add)
        else:
            await add.send(Message(ADD_ARGS_PROMPT))
    except Exception as e:
        msg = f"Exception: {Exception}\n"
        msg += f"str(e): {str(e)}\nrepr(e): {repr(e)}\n"
        msg += f"traceback.format_exc(): {traceback.format_exc()}"
        await exception_log(bot, msg)
Пример #24
0
async def _(bot: Bot, event: Event, state: T_State):
    if not event.is_tome():
        sender = event.get_user_id()
        qq = int(sender)
        msg = Message([{
            'type': 'at',
            'data': {
                'qq': sender
            }
        }, {
            'type': 'text',
            'data': {
                'text': f'(简单算法版)你今天的人品是 {get_rp(qq)}%'
            }
        }])
        await rp.send(msg)
Пример #25
0
async def _(bot: Bot, event: Event, state: T_State):
    username = str(event.get_message()).strip()
    if username == "":
        payload = {'qq': str(event.get_user_id()), 'b50': True}
    else:
        payload = {'username': username, 'b50': True}
    img, success = await generate50(payload)
    if success == 400:
        await best_50_pic.send("未找到此玩家,请确保此玩家的用户名和查分器中的用户名相同。")
    elif success == 403:
        await best_50_pic.send("该用户禁止了其他人获取数据。")
    else:
        await best_50_pic.send(
            Message([
                MessageSegment.reply(event.message_id),
                MessageSegment.image(
                    f"base64://{str(image_to_base64(img), encoding='utf-8')}")
            ]))
async def handle_event(bot: Bot, event: Event, state: T_State):
    try:
        thing = state["thing"]
        thing_array = thing.split(" ")
        if thing_array[0] != '提醒':
            thing_array.insert(0, '提醒')
        user = event.get_user_id()
        msg = await insert(user, thing_array[1] + " " + thing_array[2],
                           thing_array[6], thing_array[5], thing_array[8],
                           thing_array[3] + " " + thing_array[4],
                           int(thing_array[7]))
        if msg:
            await add_remaind.send(Message("增加成功"))
        else:
            await add_remaind.send(Message("增加失败"))
    except Exception as e:
        print(e)
        await add_remaind.send(Message("发生错误,增加失败"))
Пример #27
0
async def handle_event(bot: Bot, event: Event, state: T_State):
    logger.debug('准备执行twqd')

    try:
        stu_nums = str(state["stu_nums"]).split()
        user_id = event.get_user_id()
        at_ = "[CQ:at,qq={}]".format(user_id)
        for stu_num in stu_nums:
            # TODO: stu_num check
            if not re.match('[0-9]{8,16}', stu_num):
                await twqd.send(Message(at_ + TWQD_ARGS_ERROR_PROMPT))
                continue
            await tempReportEvent(at_, stu_num, twqd)
    except Exception as e:
        msg = f"Exception: {Exception}\n"
        msg += f"str(e): {str(e)}\nrepr(e): {repr(e)}\n"
        msg += f"traceback.format_exc(): {traceback.format_exc()}"
        await exception_log(bot, msg)
Пример #28
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)
Пример #29
0
async def _(bot: Bot, event: Event, state: dict):
    argv = str(event.get_message()).strip().split(' ')
    argc = len(argv)
    if len(argv) != 1 and len(argv) != 3 and len(argv) != 4:
        await stat.send(
            "你这白痴又弄错命令格式了!给我记好了,正确的格式是.stat <技能/属性> <add|sub|set> <值> [触发时间(小时)]!"
        )
        return
    role = None
    try:
        role = role_cache[binding_map[int(event.get_user_id())]]
    except KeyError:
        await stat.send("【%s】看起来还没绑定角色呢。输入.bind <角色名称> 进行绑定吧?" %
                        (event.sender.nickname))
        return
    if argc == 1:
        stat_name = argv[0]
        value, err = search_check(role, stat_name)
        if not err:
            await stat.send("未找到能力值【%s】!真的有这个能力吗?" % stat_name)
            return
        await stat.send(
            "【%s】的能力值【%s】为:%d/%d/%d" %
            (role['name'], stat_name, value, int(value / 2), int(value / 5)))
        return
    elif argc >= 3:
        time = 0
        if argc == 4:
            time = int(argv[3])
        m = {'add': 1, 'sub': 2, 'set': 0}
        try:
            op = m[argv[1]]
        except KeyError:
            await stat.send("看起来命令不支持【%s】这个操作呢~" % argv[1])
            return
        s, e = stat_modify(role, argv[0], op, int(argv[2]), time)
        if not e:
            await stat.send("未找到能力值【%s】!真的有这个能力吗?" % argv[0])
        else:
            if time == 0:
                await stat.send(s)
            else:
                await stat.send("【%s】的【%s】会在%d小时后发生变化~" %
                                (role['name'], argv[0], time))
Пример #30
0
async def _(bot: Bot, event: Event, state: T_State):
    qq = int(event.get_user_id())
    h = hash(qq)
    rp = h % 100
    wm_value = []
    for i in range(11):
        wm_value.append(h & 3)
        h >>= 2
    s = f"今日人品值:{rp}\n"
    for i in range(11):
        if wm_value[i] == 3:
            s += f'宜 {wm_list[i]}\n'
        elif wm_value[i] == 0:
            s += f'忌 {wm_list[i]}\n'
    s += "千雪提醒您:打机时不要大力拍打或滑动哦\n今日推荐歌曲:"
    music = total_list[h % len(total_list)]
    await jrwm.finish(Message([
        {"type": "text", "data": {"text": s}}
    ] + song_txt(music)))