Beispiel #1
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 #2
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 #3
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 #4
0
async def add_boss_range_handler(bot: cqhttp.Bot, event: cqhttp.Event, state: typing.T_State):
    raw_args = str(event.get_message()).strip()
    arg_list = list(map(str.strip, raw_args.split(plugin_config.separator)))

    boss_names = arg_list[0:4]
    boss_healths = list(map(int, arg_list[4:8]))
    start_level = int(arg_list[8])
    end_level = int(arg_list[9])

    adding_tasks = []

    for level in range(start_level, end_level):
        for i in range(len(boss_names)):
            info = {
                'boss_id': level * 100 + i + 1,
                'alias': 'R' + str(level) + boss_names[i],
                'health': boss_healths[i]
            }
            adding_tasks.append(asyncio.create_task(data_source.bc.add(info)))

    await asyncio.wait(adding_tasks)

    await add_boss_range.finish(
        message='Added Boss in level range {} and {}'.format(start_level, end_level)
    )
Beispiel #5
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 #6
0
async def _(bot: Bot, event: Event, state: T_State):
    try:
        gid = event.group_id
        glst = await bot.get_group_member_list(group_id=gid,
                                               self_id=int(bot.self_id))
        v = re.match("/随个([男女]?)人", str(event.get_message())).group(1)
        if v == '男':
            for member in glst[:]:
                if member['sex'] != 'male':
                    glst.remove(member)
        elif v == '女':
            for member in glst[:]:
                if member['sex'] != 'female':
                    glst.remove(member)
        m = random.choice(glst)
        await random_person.finish(
            Message([{
                "type": "at",
                "data": {
                    "qq": event.user_id
                }
            }, {
                "type": "text",
                "data": {
                    "text":
                    f"\n{m['card'] if m['card'] != '' else m['nickname']}({m['user_id']})"
                }
            }]))

    except AttributeError:
        await random_person.finish("请在群聊使用")
Beispiel #7
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 #8
0
async def _(bot: Bot, event: Event):
    if str(event.get_message()) == '练功房':
        await destiny.finish(message=Message(
            f'[CQ:image,file=file:///{PATH}/src/data/destiny/practice_room.png]'
        ))
        return
    await destiny.finish(message=Message(f'检索不到关键词,触发为got方法'))
Beispiel #9
0
async def db_update(bot: Bot, event: Event, state: dict):  # 数据库
    args = str(event.get_message()).strip().split()
    state["key"] = args
    # logger.info(bot.__dict__)
    # logger.info(event.dict())
    # logger.info(state)
    await Power().change(bot, event, state)
Beispiel #10
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 #11
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 #12
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 #13
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 #14
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 #15
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 #16
0
async def log2database(bot: Bot, event: Event, state: T_State):

    message_id = event.get_event_description().split()[1]
    session_id = event.get_session_id().split("_")

    if session_id[0] == 'group':
        group_id = session_id[1]
        user_id = session_id[2]
        self_id = None
        msg: Message[MessageSegment] = event.get_message()
    else:
        group_id = None
        user_id = session_id[0]
        self_id = bot.self_id
        msg: Message[MessageSegment] = event.get_message()

    await db.log_chat(msg, user_id, message_id, group_id, self_id)
Beispiel #17
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 #18
0
async def ys_draw_handler(bot: Bot, event: Event):
    args = str(event.get_message()).strip()
    try:
        msg = sim_draw(10, game="yuanshen")
    except Exception as e:
        msg = f'发生错误:{repr(e)}'
        logger.exception(e)
    await bot.send(event, msg, at_sender=True)
Beispiel #19
0
async def _(bot: Bot, event: Event):
    argv = int(str(event.get_message()))
    if argv > 100:
        await shuffle.finish('请输入100以内的数字')
        return
    d = [str(i + 1) for i in range(argv)]
    random.shuffle(d)
    await shuffle.finish(','.join(d))
Beispiel #20
0
async def prts_draw_handler(bot: Bot, event: Event):
    args = str(event.get_message()).strip()
    noimg = True
    if args == "图":
        noimg = False
    msgs = sim_draw(55, noimg=noimg, game="prts")
    for msg in msgs:
        await prts_draw.send(msg)
Beispiel #21
0
async def _(bot: Bot, event: Event):
    message = str(event.get_message())
    try:
        uid = re.findall(r"\d+", message)[0]  # str
        im = await draw_pic(uid)
        await query.send(Message(f'[CQ:image,file={im}]'))
    except:
        await query.send(Message('输入错误!'))
Beispiel #22
0
async def _(bot: Bot, event: Event, state: T_State):
    v = str(event.get_message()).strip()
    help_text: dict = get_driver().config.help_text
    if v == "":
        help_str = '\n'.join(
            [f'/help {key}\t{help_text[key][0]}' for key in help_text])
        await help.finish(help_str)
    else:
        await help.finish(help_text[v][1])
Beispiel #23
0
async def cochandler(bot: Bot, event: Event):
    args = str(event.get_message())[4:].strip()
    try:
        args = int(args)
    except:
        args = 20
    inv = Investigator()
    inv.age_change(args)
    await coc.finish(inv.output())
Beispiel #24
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 #25
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 #26
0
async def search_by_member_handler(bot: cqhttp.Bot, event: cqhttp.Event,
                                   state: typing.T_State):
    raw_args = str(event.get_message()).strip()
    arg_list = list(map(str.strip, raw_args.split(plugin_config.separator)))

    if len(arg_list) not in [1, 2]:
        #   Not enough arguments have been provided
        await search_record_by_member.finish(
            InteractionMessage.INVALID_ARG_NUMBER)

    time_range = ()
    now_date = datetime.date.today().strftime('%Y-%m-%d')
    if len(arg_list) == 1:
        time_range = (
            int(
                time.mktime(
                    datetime.datetime.strptime(now_date,
                                               '%Y-%m-%d').timetuple())),
            int(
                time.mktime(
                    (datetime.datetime.strptime(now_date, '%Y-%m-%d') +
                     datetime.timedelta(hours=23, minutes=59,
                                        seconds=59)).timetuple())))
    else:
        if arg_list[1] != '-all':
            try:
                time_slice = datetime.datetime.strptime(
                    arg_list[1], '%Y-%m-%d')
                time_range = (
                    int(time.mktime(time_slice.timetuple())),
                    int(
                        time.mktime((time_slice + datetime.timedelta(
                            hours=23, minutes=59, seconds=59)).timetuple())))
            except ValueError:
                await search_record_by_member.finish(
                    InteractionMessage.INVALID_ARG)

    search_result = await record_database.search('member', arg_list[0],
                                                 time_range)

    if search_result['status'] != DBStatusCode.SEARCH_SUCCESS:
        if bot.config.debug:
            await bot.send_private_msg(user_id=plugin_config.AUTHOR,
                                       message=str(search_result['error']))
        await search_record_by_member.finish(InteractionMessage.ERROR_MESSAGE)
    else:
        if not search_result['result']:
            #   No record found
            await search_record_by_member.finish(
                message=InteractionMessage.RECORD_FIND_FAIL.format(arg_list[0])
            )
        else:
            result_message = InteractionMessage.RECORD_FIND_SUCCESS.format(
                '成员(' + arg_list[0] + ')')
            result_message = result_message + '\n'.join(
                map(_revue_record_member_formatter, search_result['result']))
            await search_record_by_member.finish(result_message)
Beispiel #27
0
async def handle_help(bot: Bot, event: Event, state: dict):
    args = str(event.get_message()).strip()
    if args:
        state["functionID"] = args
        await bot.send(event, "get it!")
    else:
        msg = ('请直接输入功能代码获取帮助~\n'
               f'[CQ:at,qq={event.get_user_id()}]Senrin目前支持的功能如下:\n'
               f'{HelpList}')
        await help.send(Message(msg))
Beispiel #28
0
async def _(bot: Bot, event: Event, state: T_State):
    regex = "今天(.+?)还是(.+)"
    res = re.match(regex, str(event.get_message())).groups()
    await pick.finish(
        Message([{
            "type": "text",
            "data": {
                "text": f"{random.choice(res)}\n"
            }
        }]))
Beispiel #29
0
async def handle_tuling(bot: Bot, event: Event, state: dict):
    message = str(event.get_message())

    group_id = get_group_id(message)

    data = await get_data(group_id)
    if data and len(data):
        await tickets.finish(escape('\n---\n'.join(map(format_ticket, data))))
    else:
        await tickets.reject('票务查询失败')
Beispiel #30
0
async def _(bot: Bot, event: Event, state: T_State):
    args = str(event.get_message()).strip()
    # if message_type == 'group':
    #     id = str(event.dict()['group_id'])
    # elif message_type == 'private':
    #     id = event.get_user_id()
    # logger.info(event.get_message())
    # logger.info(args)
    receive = _switch(args, 'on', event)
    await switch_on.finish(receive)