Beispiel #1
0
async def _(bot: Bot, event: Event, state: T_State):
    yml_path = "src/shared_data/jrrp.yml"

    # if not event.is_tome():
    sender = event.get_user_id()
    if os.path.exists(yml_path):
        with open(yml_path, 'r', encoding="utf-8") as fi:
            jrrp_log = yaml.load(fi, Loader=yaml.FullLoader)

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

    if sender in jrrp_log.keys():
        rp = jrrp_log[sender]
    else:
        rp = await get_normal_random(qq=int(event.get_user_id()))
        jrrp_log[sender] = rp
        with open(yml_path, 'w', encoding="utf-8") as fi:
            yaml.safe_dump(jrrp_log, fi, encoding='utf-8', allow_unicode=True)

    msg = Message([{
        'type': 'at',
        'data': {
            'qq': sender
        }
    }, {
        'type': 'text',
        'data': {
            'text': f'你今天的人品是 {rp}%'
        }
    }])
    await jrrp.send(msg)
Beispiel #2
0
async def message_receive(bot: Bot, event: Event, state: dict):
    # logger.info(event.dict())
    replay = event.dict()["reply"]
    if replay and str(replay["sender"]["user_id"]) in hso_config.bot:
        await Setu(
            bot, event,
            state).get_text(message_id=event.dict()["reply"]["message_id"])
Beispiel #3
0
async def set_receive(bot: Bot, event: Event, state: dict):  # 功能设置接收
    true = ["True", "T", "true", "t"]
    false = ["False", "F", "false", "f"]
    args = str(event.get_message()).strip().split()
    state["key"] = args
    # logger.info(bot.__dict__)
    # logger.info(event.dict())
    # logger.info(state)
    mold = state["key"][0]
    info = setting.search(Q["group_id"] == event.dict()["group_id"])
    if info:
        if mold in true:
            info[0]["song"] = True
            setting.update(info, Q["group_id"] == event.dict()["group_id"])
            msg = "已开启自动下载功能"
            await bot.send(event=event,
                           message=Message(MessageSegment.text(msg)))
        elif mold in false:
            info[0]["song"] = False
            setting.update(info, Q["group_id"] == event.dict()["group_id"])
            msg = "已关闭自动下载功能"
            await bot.send(event=event,
                           message=Message(MessageSegment.text(msg)))
    else:
        setting.insert({"group_id": event.dict()["group_id"], "song": True})
Beispiel #4
0
async def delete_member_handler(bot: cqhttp.Bot, event: cqhttp.Event, state: typing.T_State):
    #   Request valid confirmation for deletion
    while True:
        if str(event.get_message()).strip() not in InteractionMessage.CONFIRMATION_MESSAGE:
            await delete_member.reject(InteractionMessage.INVALID_ARG)
        else:
            break

    user_confirm = str(event.get_message()).strip()
    if user_confirm.startswith(InteractionMessage.CONFIRMATION_MESSAGE[1]):
        #   Do not delete
        await delete_member.finish(message=InteractionMessage.RECORD_CHANGE_ABORT)
    else:
        delete_result = await data_source.mc.delete(state['member_id'])
        if delete_result['error'] is None:
            await delete_member.finish(message=InteractionMessage.RECORD_CHANGE_SUCCESS)
        else:
            if bot.config.debug:
                await bot.send_private_msg(
                    user_id=plugin_config.AUTHOR,
                    message=delete_result['func_info']
                )
                await bot.send_private_msg(
                    user_id=plugin_config.AUTHOR,
                    message=delete_result['error']
                )
            await delete_member.finish('\n'.join([
                InteractionMessage.RECORD_CHANGE_FAIL,
                InteractionMessage.ERROR_MESSAGE
            ]))
Beispiel #5
0
async def _(bot: Bot, event: Event, state: T_State):
    # 开关检测,开则复述
    message = event.get_message()
    message_type = str(event.dict()["message_type"])
    # 来源判断
    if message_type == "group":
        id = str(event.dict()["group_id"])
        # message_type = "on_group"
        switch = (Path(".") / "apeiria_network" / "config" / "repeat" /
                  "group" / "switch.json")
        re = Path(
            "."
        ) / "apeiria_network" / "config" / "repeat" / "group" / "re.json"
    elif message_type == "private":
        id = event.get_user_id()
        # message_type = "on_user"
        switch = (Path(".") / "apeiria_network" / "config" / "repeat" /
                  "private" / "switch.json")
        re = Path(
            "."
        ) / "apeiria_network" / "config" / "repeat" / "private" / "re.json"
    try:
        with open(switch, mode="r", encoding="utf-8") as switch_json:
            switch_reader = json.load(switch_json)
    except:
        switch_reader = {}
    if id in switch_reader:
        if switch_reader[id] == "on":
            await repeat_after_me.finish(message)

    # 检测相同信息是否发送三次,若是则复述一次,然后清空数据
    i = 0
    # strmsg = {id: ['', '', '', i, message_type]}
    strmsg = {id: ["", "", "", i]}
    message = str(message)
    try:
        with open(re, mode="r", encoding="utf-8") as re_json:
            strmsg = json.load(re_json)
    except:
        strmsg = {}
    if id not in strmsg:
        with open(re, mode="w", encoding="utf-8") as re_json_file_w:
            # strmsg.update({id: [message, '', '', i, message_type]})
            strmsg.update({id: [message, "", "", i]})
            json.dump(strmsg, re_json_file_w, ensure_ascii=False, indent=4)
    pos = strmsg[id][3]
    if pos >= 2:
        strmsg[id][pos] = message
        pos -= 3
    else:
        strmsg[id][pos] = message
    pos += 1
    strmsg[id][3] = pos
    if strmsg[id][0] == strmsg[id][1] == strmsg[id][2]:
        strmsg[id][0] = strmsg[id][1] = strmsg[id][2] = ""
        re_json_file_w1 = open(re, mode="w", encoding="utf-8")
        json.dump(strmsg, re_json_file_w1, ensure_ascii=False, indent=4)
        await repeat_after_me.finish(event.get_message())
    re_json_file_w2 = open(re, mode="w", encoding="utf-8")
    json.dump(strmsg, re_json_file_w2, ensure_ascii=False, indent=4)
Beispiel #6
0
async def message_receive(bot: Bot, event: Event, state: dict):
    # logger.info(event.dict())
    _reply = event.dict()["reply"]
    if _reply and str(_reply["sender"]["user_id"]) in ncm_config.bot:
        message: str = _reply["message"][0].data["text"]
        # logger.info(message)
        id = re.search("ID:([0-9]*)", message)
        # logger.info(id)
        info = setting.search(Q["group_id"] == event.dict()["group_id"])
        if info:
            data = music.search(Q["id"] == int(id[1]))[0]
            if info[0]["song"]:
                params = {
                    "group_id": event.dict()["group_id"],
                    "file": data["file"],
                    "name": data["filename"]
                }
                async with httpx.AsyncClient() as client:
                    res = await client.post(
                        "http://127.0.0.1:5700/upload_group_file",
                        params=params)
                    if res.status_code != 200:
                        logger.error("文件上传错误")
        else:
            logger.error("数据库中未发现该ID")
Beispiel #7
0
async def db_update(bot: Bot, event: Event, state: dict):  # 数据库
    args = str(event.get_message()).strip().split()
    state["key"] = args
    await Power().change(bot, event, state)
    logger.info(bot.__dict__)
    logger.info(event.dict())
    logger.info(state)
Beispiel #8
0
async def cheatt_(bot: Bot, event: Event):
    if event.is_tome():
        print("YES")
    if event.is_tome() and int(event.get_user_id()) != event.self_id:
        mysay = event.get_message()
        mysay = await get_n(str(mysay))
        await bot.send(event=event, message=mysay)
Beispiel #9
0
async def _(bot: Bot, event: Event, state: T_State):
    v = "default"
    if event.__getattribute__('group_id') is None:
        event.__delattr__('group_id')
    else:
        group_dict = poke_dict[event.__getattribute__('group_id')]
        group_dict[event.sender_id] += 1
        v = await invoke_poke(event.group_id, event.sender_id)
        if v == "disabled":
            await poke.finish()
            return
    r = randint(1, 14)
    if r == 1 or v == "limited":
        await poke.send(
            Message([{
                "type": "poke",
                "data": {
                    "qq": f"{event.sender_id}"
                }
            }]))
    elif r == 2:
        await poke.send(Message('妈你戳'))
    elif r == 3:
        url = await get_jlpx('戳', '你妈', '闲着没事干')
        await poke.send(Message([{"type": "image", "data": {"file": url}}]))
    elif r == 4:
        img_p = Image.open(path)
        draw_text(img_p, '戳你妈', 0)
        draw_text(img_p, '有尝试过玩Cytus II吗', 400)
        await poke.send(
            Message([{
                "type": "image",
                "data": {
                    "file":
                    f"base64://{str(image_to_base64(img_p), encoding='utf-8')}"
                }
            }]))
    elif r == 5:
        await poke.send(Message('呜呜呜再戳人家要哭哭了啦'))
    elif r <= 7:
        await poke.send(
            Message([{
                "type": "image",
                "data": {
                    "file":
                    f"https://www.diving-fish.com/images/poke/{r - 5}.gif",
                }
            }]))
    elif r <= 12:
        await poke.send(
            Message([{
                "type": "image",
                "data": {
                    "file":
                    f"https://www.diving-fish.com/images/poke/{r - 7}.jpg",
                }
            }]))
    else:
        await poke.send(Message('戳你妈'))
Beispiel #10
0
def set_usr_args(state: T_State, event: Event):
    args = str(event.get_message()).strip()
    if args:
        state["username"] = args
    else:
        with open(_cachepath, "r", encoding="utf-8") as f:
            data: dict = json.load(f)
        state["username"] = data.get(event.get_user_id())
Beispiel #11
0
async def handle_first_receive(bot: Bot, event: Event, state: T_State):
    args = str(event.get_message()).strip()  # 首次发送命令时跟随的参数,例:/天气 上海,则args为上海
    user_id = event.get_user_id()
    area_reader = getAreaJson()  # 从area.json读取绑定的天气数据
    if args:
        state["city"] = args  # 如果用户发送了参数则直接赋值
    elif user_id in area_reader:
        state["city"] = area_reader[user_id]  #查到绑定的数据直接赋值
Beispiel #12
0
async def r6s_set_handler(bot: Bot, event: Event):
    args = str(event.get_message()).strip()
    if args:
        with open(_cachepath, "r", encoding="utf-8") as f:
            data = json.load(f)
        data[event.get_user_id()] = args
        with open(_cachepath, "w", encoding="utf-8") as f:
            json.dump(data, f)
        await r6s_set.finish("已设置ID:%s" % args)
Beispiel #13
0
async def rdcommandhandler(bot: Bot, event: Event):
    args = str(event.get_message())[2:].strip()
    uid = int(event.get_user_id())
    if args and not ("." in args):
        rrd = rd(args)
        if type(rrd) == str:
            await rdcommand.finish(rrd)
        elif type(rrd) == list:
            await bot.send_private_msg(user_id=uid, message=rrd[0])
Beispiel #14
0
async def lssv_h(bot: Bot, event: Event, state: T_State):
    plus = ''
    for i in plugins:
        state = check_plugin(event.dict().get('group_id'), i)
        txt = '| {} | {}\n'.format('○' if state else '×', i)
        plus += txt

    await lssv.finish(
        '群%d的插件有:\n===========\n%s\n===========\n通过 “启用/禁用 插件名「复数个用","隔开开关插件」”'
        % (event.dict().get('group_id'), plus))
Beispiel #15
0
async def _(bot: Bot, event: Event, state: T_State):
    if event.__getattribute__('group_id') is None:
        event.__delattr__('group_id')
    await poke.send(
        Message([{
            "type": "poke",
            "data": {
                "qq": f"{event.sender_id}"
            }
        }]))
Beispiel #16
0
async def deal_question(bot: Bot, event: Event):
    if random.random() > sv.get_config('YYGQ_RATE', event):
        return
    if random.random() < 0.5:
        await bot.send(event,
                       random.choice(QUESTION_ANSWERS),
                       at_sender=event.is_tome())
    else:
        await bot.send(event,
                       random.choice(UNIVERSAL_ANSWERS),
                       at_sender=event.is_tome())
Beispiel #17
0
async def deal_strong_emotion(bot: Bot, event: Event):
    if random.random() > sv.get_config('YYGQ_RATE', event):
        return
    if random.random() < 0.7:
        await bot.send(event,
                       random.choice(STRONG_EMOTION_ANSWERS),
                       at_sender=event.is_tome())
    else:
        await bot.send(event,
                       random.choice(UNIVERSAL_ANSWERS),
                       at_sender=event.is_tome())
Beispiel #18
0
async def handle_tuling(bot: Bot, event: Event, state: dict):
    message = str(event.get_message())

    reply = await get_data(
        message, event.get_user_id(),
        event.group_id if isinstance(event, GroupMessageEvent) else None)
    if reply:
        await tuling.finish(escape(reply))
    else:
        # 如果调用失败,或者它返回的内容我们目前处理不了,发送无法获取图灵回复时的「表达」
        # 这里的 render_expression() 函数会将一个「表达」渲染成一个字符串消息
        await tuling.reject(render_expression(EXPR_DONT_UNDERSTAND))
Beispiel #19
0
async def enable_service(bot: Bot, event: CQEvent):
    if isinstance(event, GroupMessageEvent):
        names = event.get_plaintext().split()
        uid = event.user_id
        user_info = await bot.get_stranger_info(user_id=uid)
        nickname = user_info.get('nickname', '未知用户')
        if not names:
            await enable.finish(f'>{nickname}\n请在空格后接要启用的服务名')
        group_id = event.group_id
        svs = Service.get_loaded_services()
        succ, notfound = [], []
        for name in names:
            if name in svs:
                sv = svs[name]
                u_priv = priv.get_user_priv(event)
                if u_priv >= sv.manage_priv:
                    sv.set_enable(group_id)
                    succ.append(name)
                else:
                    await enable.finish(
                        f'>{nickname}\n权限不足!启用[{name}]需要权限:{sv.manage_priv},您的权限:{u_priv}\n{PRIV_TIP}'
                    )
            else:
                notfound.append(name)
        msg = [f'>{nickname}']
        if succ:
            msg.append('已启用服务:' + '、'.join(succ))
        if notfound:
            msg.append('未找到服务:' + '、'.join(notfound))
        if msg:
            await enable.finish('\n'.join(msg))
    elif isinstance(event, PrivateMessageEvent):
        if event.user_id not in salmon.configs.SUPERUSERS:
            await enable.finish('请在群聊中启用服务')
        args = event.get_plaintext().split()
        if len(args) < 2:
            await enable.finish(
                'Input not supported.\nUsage: <service_name> <group_id1> [<group_id2>, ...]'
            )
        name, *group_ids = args
        svs = Service.get_loaded_services()
        if name not in svs:
            await enable.finish(f'未找到服务:{name}')
        sv = svs[name]
        succ = []
        for gid in group_ids:
            try:
                gid = int(gid)
                sv.set_enable(gid)
                succ.append(gid)
            except:
                await bot.send(event, f'非法群号:{gid}')
        await enable.finish(f'服务[{name}]已于{len(succ)}个群内启用:{succ}')
Beispiel #20
0
async def _get_march(bot: Bot, event: Event):
    try:
        return_msg_pub = studylib['public']['all_users'][str(
            event.get_message())][0]
        await get_march.finish(Message(return_msg_pub))
    except:
        pass
    try:
        return_msg_pri = studylib['private'][event.get_user_id()][str(
            event.get_message())]
        await get_march.finish(Message(return_msg_pri))
    except:
        pass
Beispiel #21
0
    async def change(bot: Bot, event: Event, state: T_State):
        """修改配置\r\n
        type:\r\n
        group\r\n
        private\r\n
        order:\r\n
        "setu_level"\r\n
        "original"\r\n
        "setu"\r\n
        "r18"\r\n
        "max_num"\r\n
        "revoke"\r\n
        "at"\r\n
        """
        key = state["key"]
        mold = event.dict()["message_type"]
        if mold == "group":
            config = group_config.search(
                Q["group_id"] == event.dict()['group_id'])[0]
            admins = config["admins"]
            admins.append(config["owner"])
            if int(event.get_user_id()) in admins or event.get_user_id(
            ) in hso_config.superusers:
                data = config
                before = str(config["group"][key[1]])
                if key[0] == "开启":
                    data["group"][key[1]] = True
                    after = "True"
                elif key[0] == "关闭":
                    data["group"][key[1]] = False
                    after = "False"
                else:
                    try:
                        data["group"][key[1]] = int(key[2])
                    except:
                        data["group"][key[1]] = key[2]
                    after = key[2]
                group_config.update(data,
                                    Q["group_id"] == event.dict()['group_id'])
                return await bot.send(event=event,
                                      message=Message(
                                          MessageSegment.text(
                                              '{}:{}-->{}'.format(
                                                  key[1], before, after))))
            else:
                return await bot.send(event=event,
                                      message=Message(
                                          MessageSegment.text('¿没权限还玩🐎¿')))

        elif mold == 'private':
            pass  # todo
Beispiel #22
0
async def _(bot: Bot, event: Event):
    global mid
    qid = event.get_user_id()
    data = readJson()
    key = str(event.get_message()).strip()
    pic, pid = await ghs_pic3(key, 0)
    try:
        await setu.send(f'给大佬递图,pixiv的pid={pid}', at_sender=True)
        mid = await setu.send(message=Message(pic))
        print(mid)
        writeJson(qid, event.time, mid['message_id'], data)
    except Exception as e:
        print(e)
        await setu.send(message=Message('前面的涩图,以后再来探索吧'), at_sender=True)
Beispiel #23
0
async def _(bot: Bot, event: Event, state: T_State):
    args = str(event.get_message()).strip()
    # message_type = str(event.dict()['message_type'])
    # logger.info(event.get_message())
    # logger.info(args)
    receive = _switch(args, 'off', event)
    await switch_on.finish(receive)
Beispiel #24
0
async def _(bot: Bot, event: CQEvent, state: T_State):
    if isinstance(event, GroupMessageEvent):
        state['gids'] = [event.group_id]
    elif isinstance(event, PrivateMessageEvent):
        gid = event.get_plaintext().split()
        if gid:
            state['gids'] = gid
Beispiel #25
0
async def handle_image(bot: Bot, event: Event, state: dict):
    message = str(event.get_message())

    images = await get_data(message)
    # TODO 使用抛出异常的方式统一处理,避免使用独立的异常处理逻辑
    if type(images) is list and len(images):
        logger.info(f'[{message}] images count: {len(images)}')
        reply_image = random.choice(images)
        # logger.info(f'reply_image: {reply_image}')
        # 使用 objURL 时,图片可能会不存在,不知道百度搜图这个操作啥意思 _(:3J∠)_
        # 可能是由于百度会从源地址去下载原图,但是原图不存在的问题
        obj_url = reply_image['objURL']
        middle_url = reply_image['middleURL']
        logger.info(f'obj_url: {obj_url}')
        logger.info(f'middle_url: {middle_url}')
        try:
            # await image.finish(f'[CQ:image,file={escape(reply_image)}]') # 通过字符串暂时无法发送带有特殊符号的图片链接
            await image.finish(get_message(event, obj_url))
            logger.info(f'reply obj_url: {obj_url}')
        except exception.ActionFailed:
            logger.warning(f'reply obj_url failed, retry by middle_url')
            await image.finish(get_message(event, middle_url))
    else:
        logger.info(f'[{message}] no images')
        await image.finish(f'未找到 [{message}] 相关图片 _(:3J∠)_')
Beispiel #26
0
def get_message(event: Event, url: str):
    at_segment = {"type": "at", "data": {"qq": event.get_user_id()}}
    image_segment = {"type": "image", "data": {"file": url}}

    if isinstance(event, GroupMessageEvent):
        return Message([image_segment, at_segment])
    return Message(image_segment)
Beispiel #27
0
async def ygo_rev(bot: Bot, event: Event, state: dict):
    # print(event.get_message())
    msg = str(event.get_message())[4:]
    url = f"https://ygocdb.com/?search={msg}"
    # print(url)
    async with aiohttp.ClientSession() as session:
        async with session.get(url=url, headers=headers) as response:
            txt = await response.text()
            list_pic = re.findall('\<a href\=\"(.*?)\" target\=\"_blank\"\>',
                                  txt)
            list_pic = [x for x in list_pic if str(x).endswith(".jpg")]

    pic_all = os.listdir("/root/QQbotFiles/ygo")

    send_msg = ""

    if list_pic:
        list_pic = list_pic[:1]
        for x in list_pic:
            if x not in pic_all:
                await down_img(x)
            name = x[x.rfind("/") + 1:]
            send_msg += f'[CQ:image,file=file:////root/QQbotFiles/ygo/{name}]'

    if send_msg != "":
        await bot.send(event=event, message=Message(send_msg))
    else:
        await bot.send(event=event, message="未查询到此类卡片")
Beispiel #28
0
async def handle_image(bot: Bot, event: Event, state: dict):
    message = str(event.get_message())

    short_result = short_reg.findall(message)
    short_links = list(set(short_result))
    # # https://stackoverflow.com/questions/62846735/how-to-use-await-inside-map-function
    # makeup_links = await alist(amap(get_target_link, short_links))

    result = reg.findall(message)
    links = list(filter(lambda link: type(link) == str, list(
        set(result)))) + short_links
    for link in links:
        info = await get_data(link)
        if info and 'url' in info:
            text = [f"{link}", f"UP: {info['up']}", f"标题: {info['title']}"]
            if info['desc']:
                text.append(f"简介:{info['desc']}")
            message = Message([{
                "type": "image",
                "data": {
                    "file": info['url']
                }
            }, {
                "type": "text",
                "data": {
                    "text": '\n'.join(text)
                }
            }])
            await bili_cover.send(message)
        else:
            await bili_cover.send(f'未找到 {link} 相关信息')
    if len(links):
        raise StopPropagation
Beispiel #29
0
async def _(bot: Bot, event: Event):
    mes = str(event.get_message())
    if '一' in mes:
        await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we1.png]'))
    elif '二' in mes:
        await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we2.png]'))
    elif '三' in mes:
        await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we3.png]'))
    elif '四' in mes:
        await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we4.png]'))
    elif '五' in mes:
        await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we5.png]'))
    elif '六' in mes:
        await we.finish(message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we6.png]'))
    else:
        day = str(datetime.now().isoweekday())
        if '明' in mes:
            if day == '7':
                day = '1'
                await we.finish(
                    message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we{day}.png]'))
            elif day == '6':
                await tf.finish(message='明天星期天所有副本都可以刷哦!')
            else:
                day = str(int(day) + 1)
                await we.finish(
                    message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we{day}.png]'))
        elif day != '7':
            await we.finish(
                message=Message(f'[CQ:image,file=file:///{PATH}/src/data/challenge/we{day}.png]'))
        else:
            await we.finish(message='今天星期天所有副本都可以刷哦!')
Beispiel #30
0
async def help_(bot: Bot, event: Event, state: dict):
    if int(event.get_user_id()) != event.self_id:
        path_ = os.getcwd()
        path_ = path_ + '\help.png'
        mypath = 'file:///' + path_
        print(mypath)
        await bot.send(event=event, message=MessageSegment.image(mypath))