Пример #1
0
async def args(bot: Bot, event: Event, state: dict):
    parser = ArgumentParser()
    subparser = parser.add_mutually_exclusive_group()
    subparser.add_argument("-s", "--subs", nargs="+", help="订阅指定的 rss 源")
    subparser.add_argument("-r", "--route", nargs="+", help="获取自定路由的 rss 源的资讯")
    subparser.add_argument("-d", "--delete", nargs="+", help="删除 rss 订阅")
    subparser.add_argument("-l",
                           "--list",
                           action="store_true",
                           default=False,
                           help="列出已订阅的源")
    subparser.add_argument("-a", "--add", help="开通rss源")
    parser.add_argument("rss", nargs="*", help="获取已存在的 rss 源资讯")
    argv = parser.parse_args(event.plain_text.strip().split(" "))
    state["ls"] = []
    ls = []
    state["list"] = argv.list
    if argv.list:
        return
    if argv.subs != None:
        state["subs"] = argv.subs
        ls = argv.subs
    if argv.delete != None:
        state["del"] = argv.delete
        ls = argv.delete
    if argv.rss != []:
        state["rss"] = argv.rss
        ls = argv.rss
    if argv.route != None:
        state["route"] = argv.route
        state["ls"] = argv.route
        if len(state["ls"]) == 0:
            await rss.finish("查询路由地址不能为空哦!")
        return
    if argv.add != None:
        await rss.finish("目前不支持哦!!!")
        await rss.send(str(event.user_id))
        # result = await add_rss(argv.add.strip(), str(event.user_id))

    ls = list(set(ls))
    if event.detail_type == "group":
        safe = await Mg.query.where(Mg.gid == event.group_id).gino.all()
        print(len(safe))
        if len(safe) > 0 and safe[0].safe:
            ls = [i for i in ls if "r18" not in i]

    for key in doc:
        if key in ls[:]:
            state["ls"].append((gtfun(key), key))
            ls.remove(key)

    if len(ls) > 0 and " ".join(ls).strip() != "":
        await rss.send(
            unescape("没有添加「{}」的订阅源!请联系".format(" ".join(ls)) +
                     cq.at(545870222) + "添加订阅!"))
    if len(state["ls"]) == 0:
        await rss.finish(
            "本次资讯{}为空哦!".format("查看" if state["rss"] != [] else "订阅"))
Пример #2
0
async def handle_friend_recall(bot: Bot, event: FriendRecallNoticeEvent):
    user_id = event.get_user_id()

    # 仅用于自己测试
    if user_id == 593457446:
        msg_id = event.message_id
        msg = await bot.get_msg(message_id=msg_id)
        msg = unescape(msg["raw_message"])
        await bot.send_private_msg(user_id=user_id, message=f"撤回了一条消息:\n{msg}")
Пример #3
0
async def handle(bot: Bot, event: MessageEvent, state: T_State):
    raw_args = str(event.get_message()).strip()
    argc = 0
    if raw_args:
        arg_list = raw_args.split()
        argc = len(arg_list)
        for i in range(argc):
            state[f"arg{i+1}"] = arg_list[i]

    if argc > 0 and state["arg1"] == "日榜":
        is_timeout, is_error, status, data = await get_image_data_v1(
            url="https://rakuen.thec.me/PixivRss/daily-10")
    elif argc > 0 and state["arg1"] == "周榜":
        is_timeout, is_error, status, data = await get_image_data_v1(
            url="http://rakuen.thec.me/PixivRss/weekly-10")
    elif argc > 0 and state["arg1"] == "月榜":
        is_timeout, is_error, status, data = await get_image_data_v1(
            url="https://rakuen.thec.me/PixivRss/monthly-10")
    elif argc > 0:
        keyword = unescape(state["arg1"])
        await pixiv.send(f"正在搜索[{keyword}]……")
        is_timeout, is_error, status, data = await get_image_data_v2(
            tag=keyword)
    else:
        is_timeout, is_error, status, data = await get_image_data_v2()

    uid = event.user_id
    session_id = event.get_session_id().split("_")
    # 消息来自群聊
    if len(session_id) == 3:
        at = MessageSegment.at(uid) + "\n"
    else:
        at = ""

    if is_timeout:
        await pixiv.finish(at + "苦しい……请求超时了(´。_。`)")
    if status != 200 and status != 0:
        await pixiv.finish(at + f"苦しい……连接出错了({status}),可以马上重试一下呢!")
    if is_error:
        await pixiv.finish(at + "苦しい……连接出错了(´。_。`)")
    elif len(data) == 0:
        await pixiv.finish(at + "寂しい……什么都没找到呢。试试范围更大的关键词哦!")
    else:
        chosen = choice(data)
        try:
            await pixiv.send(at + f"{chosen[0]}\nPixiv 链接:{chosen[1]}\n" +
                             MessageSegment.image(chosen[2]) +
                             "可能会发不出图片呜呜,复制下面链接到浏览器查看吧")
        except ActionFailed as e:
            await pixiv.send(
                at +
                f"{chosen[0]}\nPixiv 链接:{chosen[1]}\n大概是太涩了差点发不出来,复制下面链接到浏览器查看吧"
            )
            print(f"[pixiv.py]: {e}")
        finally:
            await pixiv.finish(await async_shorten_url(chosen[2]))
Пример #4
0
async def say_unescape(bot: Bot, event: MessageEvent):

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

    # message = reduce(_unescape, event.get_message(), Message())  # type: ignore
    # await bot.send(message=message, event=event)
    await bot.send(message=Message(unescape(str(event.get_message()))), event=event)
Пример #5
0
async def tempReportEvent(at_: str, stu_num: str, matcher: Matcher):
    logger.debug(f'{stu_num} 开始签到')

    # 有没有签到
    oss = AliyunOSS()
    if not oss.snp_exist(stu_num):
        # API POST JSON
        try:
            json = await get_json(stu_num)
            code = json['code']
        except JSONDecodeError:
            logger.error(NULL_PROMPT)
            if SEND_LOG:
                matcher.send(Message(NULL_PROMPT))
            raise JSONDecodeError

        logger.debug(f'已获得json: {json}')

        info = osh_status_code[int(code)]
        logger.debug(f'{info}')
        # CODE
        if code == CODE_SUCCESS:
            msg = Message(at_ + SUCCESS_PROMPT)
            await matcher.send(msg)
        elif code == CODE_FAILED:
            msg = Message(at_ + FAILED_PROMPT)
            await matcher.send(msg)
            return
        elif code == CODE_PERMISSION_ERROR:
            msg = Message(at_ + PERMISSION_ERROR_PROMPT)
            await matcher.send(msg)
            return

    logger.debug('oss上已存在信息')

    # 从OSS下载文件
    resp = await oss.download_snp(stu_num)
    if not resp:
        msg = Message(at_ + DOWNLOAD_FAILED_PROMPT)
        await matcher.send(msg)
        return

    logger.debug('截图下载成功')

    txt_path = SERVER_DIR_SCREENSHOT + f"/{stu_num}.txt"
    img_path = await conv_file(txt_path)

    logger.debug('截图转换成功,准备发送!')

    # reply = Message("[CQ:at,qq={}] [CQ:image,file={}]".format(user_id, img_path))
    # await macher.send(Message(unescape("[CQ:image,file=20181620310156.png]")))
    # logger.debug('image_path: {}'.format(img_path))
    reply = Message(unescape("[CQ:image,file={}]".format(img_path)))
    await matcher.send(reply)
Пример #6
0
async def pre(bot: Bot, event: Event, state: dict):
    safe = await cksafe(event.group_id)
    if event.group_id in [145029700, 1003259896, 1037557679]:
        safe = False
    x, err = await getSetuHigh(bot, not safe)
    if x == None:
        await stCome.finish(err)
    try:
        await stCome.send(unescape(x))
    except:
        await stCome.send("呀,发送失败辣,。,")
Пример #7
0
async def _(bot: Bot, event: Event, state: dict):
    if "pic" in state:
        res = await sauce(bot, state["pic"])
        logger.debug(unescape(res))
        await st.send(unescape(res))
        fd = re.search("[0-9]+\.[0-9]*%", res)
        per = float(res[fd.start():fd.end() - 1])
        ther = 70
        if per < ther:
            await st.send("相似度低于 {}% 正在使用 ascii2d 搜索!".format(ther))
            res = await ascii2d(bot, state["pic"])
            await st.finish(res)
    else:
        state["SanityLevel"] = 4
        res, _id = await searchPic(bot, state["keyword"], state["SanityLevel"])
        await st.send(
            (cq.reply(event.id) if event.detail_type != "private" else "") +
            res)
        state["id"] = _id
        if _id == -1:
            await st.finish("暂时没有搜索到关于 {} 的结果哦~~".format(state["keyword"]))
Пример #8
0
async def pre(bot: Bot, event: Event, state: dict):
    if event.detail_type == "group":
        safe = await cksafe(event.group_id)
    else:
        safe = False
    x, err = await getSetuHigh(bot, not safe)
    if x == None:
        await stCome.finish(err)
    try:
        await stCome.send(unescape(x))
    except:
        await stCome.send("呀,发送失败辣,。,")
Пример #9
0
async def firsthandle(bot: Bot, event: Event, state: dict):
    today = datetime.date.today()
    ans = -1
    random.seed(datetime.datetime.now())
    value = await Jrrp.query.where(Jrrp.qid == event.user_id).gino.first()
    if value == None:
        value = await Jrrp.create(qid=event.user_id)
    ans = value.rand
    if value.dt != today:
        ans = random.randint(0, 100)
        await value.update(dt=today, rand=ans).apply()

    await jrrp.finish(
        unescape(cq.at(event.user_id) + "今天的人品为:{} 哦!".format(ans)))
Пример #10
0
async def pre(bot: Bot, event: Event, state: dict):
    r18 = False
    if event.group_id == 145029700:
        hour = datetime.today().hour
        r18 = hour <= 7 or hour >= 22
    if event.group_id == 1037557679:
        r18 = True
    x, err = await getSetuHigh(bot, r18)
    if x == None:
        await stCome.finish(err)
    try:
        await stCome.send(unescape(x))
    except:
        await stCome.send("呀,发送失败辣,。,")
Пример #11
0
async def firsthandle(bot: Bot, event: Event, state: dict):
    if event.sub_type == "poke" and event.raw_event["target_id"] == 3418961367:
        r18 = False
        if event.group_id == 145029700:
            hour = datetime.today().hour
            r18 = hour <= 7 or hour >= 22
        if event.group_id == 1037557679:
            r18 = True
        x, err = await getSetuHigh(bot, r18)
        if x == None:
            await poke.finish(err)
        try:
            await poke.send(unescape(x))
        except:
            await poke.send("呀,发送失败辣,。,")
Пример #12
0
async def handle_fake_msg(bot: Bot, event: Event, state: dict):
    # if event.message_type!='group':
    #     await fake.send('仅在群聊中有效!')
    #     return
    msg_info = state["fake"]
    try:
        msg = await fake_forward(message=unescape(msg_info),
                                 group_id=event.group_id,
                                 bot=bot,
                                 user_id=event.user_id,
                                 bot_nofake_id=config.superusers)
        await bot.call_api('send_group_forward_msg',
                           group_id=event.group_id,
                           messages=msg)
        # await fake.send('切勿用作违法!')
    except Exception as e:
        await fake.send('参数有误!E: {}'.format(e))
        logger.error('参数有误!E: {}'.format(e))
Пример #13
0
async def handle_group_recall(bot: Bot, event: GroupRecallNoticeEvent):
    msg_id = event.message_id
    operator_id = event.operator_id
    sender_id = event.user_id
    group_id = event.group_id

    # 仅供测试
    if not group_id in test_group_list:
        return

    msg = await bot.get_msg(message_id=msg_id)
    msg = unescape(msg["raw_message"])
    if operator_id == sender_id:  # 撤回了自己的消息
        await bot.send_group_msg(group_id=group_id, message=f"({operator_id}) 撤回了:\n{msg}")
    elif sender_id == 2497540344:  # 小丛雨自己的消息被撤回
        await bot.send_group_msg(group_id=group_id, message=f"({operator_id}) 撤回了小丛雨的消息:\n{msg}")
    else:
        await bot.send_group_msg(group_id=group_id, message=f"({operator_id}) 撤回了 ({sender_id}) 的消息:\n{msg}")
Пример #14
0
async def _(bot: Bot, event: Event, state: T_State):
    args = state["args"]
    args.user_id = event.user_id if isinstance(event,
                                               PrivateMessageEvent) else None
    args.group_id = event.group_id if isinstance(event,
                                                 GroupMessageEvent) else None
    args.is_admin = (event.sender.role in ["admin", "owner"] if isinstance(
        event, GroupMessageEvent) else False)
    if hasattr(args, "message"):
        args.message = unescape(args.message)

    if hasattr(args, "handle"):
        args = args.handle(args)
        if args.message:
            await bot.send_msg(
                user_id=args.user_id,
                group_id=args.group_id,
                message=Message(args.message),
            )
Пример #15
0
async def firsthandle(bot: Bot, event: Event, state: dict):
    if event.sub_type == "poke" and event.raw_event["target_id"] in [
            3418961367,
            2145919330,
            2167073315,
            3428325075,
    ]:
        r18 = not await cksafe(event.group_id)
        if event.group_id in [145029700, 1003259896]:
            hour = datetime.today().hour
            r18 = hour <= 7 or hour >= 22
        if event.group_id == 1037557679:
            r18 = True
        x, err = await getSetuHigh(bot, r18)
        if x == None:
            await poke.finish(err)
        try:
            await poke.send(unescape(x))
        except:
            await poke.send("呀,发送失败辣,。,")
Пример #16
0
async def _(bot: Bot, event: Event, state: dict):
    if "pic" in state:
        pic, res = await sauce(bot, state["pic"])
        try:
            await st.send(unescape(pic + "\n" + res))
        except:
            await st.send("发送失败了。。。尝试不带缩略图的发送!")
            try:
                await st.send(res)
            except:
                await st.send("不带缩略图的也发送失败了。。。尝试使用ascii2d搜索!")
                res = await ascii2d(bot, state["pic"])
                try:
                    await st.send(res)
                except:
                    await st.finish("ascii2d 发送也失败了。。。尝试私聊搜图可能可行!")
                await st.finish()
        fd = re.search("[0-9]+\.[0-9]*%", res)
        per = float(res[fd.start():fd.end() - 1])
        ther = 70
        if per < ther:
            await st.send("相似度低于 {}% 正在使用 ascii2d 搜索!".format(ther))
            res = await ascii2d(bot, state["pic"])
            await st.finish(res)
    else:
        if event.group_id:
            safe = await cksafe(event.group_id)
        else:
            safe = False
        res, _id = await getSetuHigh(bot, not safe, state["keyword"])
        if res == None:
            res, _id = await searchPic(
                bot,
                state["keyword"],
            )
            if _id == -1:
                await st.finish("暂时没有搜索到关于 {} 的结果哦~~".format(state["keyword"]))
        await st.send(
            (cq.reply(event.id) if event.detail_type != "private" else "") +
            res)
Пример #17
0
async def firsthandle(bot: Bot, event: Event, state: dict):
    await say.finish(unescape(str(event.message)))
    pass
Пример #18
0
async def firsthandle(bot: Bot, event: Event, state: dict):
    await act.finish(unescape(cq.image("activity.jpg")))
Пример #19
0
async def firsthandle(bot: Bot, event: Event, state: dict):
    if event.detail_type == "group_increase":
        await helloNew.send(unescape(cq.at(event.user_id) + " 欢迎新人入群👏!"))
        await bot.send_private_msg(user_id=545870222,
                                   message=f"新入群 {event.group_id}")
Пример #20
0
async def firstHandle(bot: Bot, event: Event, state: dict):
    if "subs" in state:
        for _, item in state["ls"]:
            await Sub.create(qid=event.user_id, dt="No Information", rss=item)
            await rss.send(f"「{doc[item]}」的资讯已添加订阅了!有新资讯发布时,会私信你哦!")
            # except asyncpg.exceptions.ForeignKeyViolationError:
            #    await session.send(f"貌似系统并没有支持该订阅源的订阅!")
            #    logger.error("no", exc_info=True)
            # except asyncpg.exceptions.UniqueViolationError:
            #    await session.send(f"你已经添加过「{doc[item]}」的资讯订阅啦!")
            # except:
            #    await session.send(
            #        f"发生未知错误!错误详细信息已记录了在log中!\n定位 message id 为:{event.message_id}"
            #    )
            #    logger.error("some rss issue", exc_info=True)

    elif "route" in state:
        for rt in state["ls"]:
            resp = await sendrss(
                event.user_id,
                bot,
                "自定义路由",
                None,
                getrss,
                (1, 1),
                route=rt,
            )
            if resp and event.detail_type != "private":
                await rss.send(
                    unescape(cq.at(event.user_id) + f"「{rt}」的资讯已私信,请查收。"))

    elif "del" in state:
        fail = []
        success = []
        for _, dl in state["ls"]:
            resp = await Sub.delete.where((Sub.qid == event.user_id)
                                          & (Sub.rss == dl)).gino.status()
            print(resp)
            if resp[len("delete "):] == "0":
                fail.append(doc[dl])
            else:
                success.append(doc[dl])
        if len(fail) > 0:
            await rss.send(
                cq.at(event.user_id) +
                f"这{'个' if len(fail)==1 else '些'}源「{'、'.join(fail)}」不在你的订阅列表里面哦~"
            )
        if len(success) > 0:
            await rss.send(
                cq.at(event.user_id) +
                f" 取消订阅「{'、'.join(success)}」成功!可喜可贺,可喜可贺!")
    elif state["list"]:
        values = await Sub.query.where(Sub.qid == event.user_id).gino.all()
        if len(values) == 0:
            await rss.finish("貌似你没有订阅任何 rss 源")
        await rss.send(
            cq.at(event.user_id) + "以下是你已订阅的源:\n{}".format("\n".join(
                [doc[i.rss] + " - " + i.rss for i in values])))

    else:
        loop = asyncio.get_event_loop()
        for item, nm in state["ls"]:
            asyncio.run_coroutine_threadsafe(
                sendrss(
                    event.user_id,
                    bot,
                    nm,
                    None,
                    item,
                    feedBack=event.group_id
                    if event.detail_type != "private" else False,
                ),
                loop,
            )
Пример #21
0
 def _unescape(message: Message, segment: MessageSegment):
     if segment.is_text():
         return message.append(unescape(str(segment)))
     return message.append(segment)