Example #1
0
 def cqcode(self) -> MessageSegment:
     if hoshino.config.RES_PROTOCOL == 'http':
         return MessageSegment.image(self.url)
     elif hoshino.config.RES_PROTOCOL == 'file':
         return MessageSegment.image(
             f'file:///{os.path.abspath(self.path)}')
     else:
         try:
             return MessageSegment.image(util.pic2b64(self.open()))
         except Exception as e:
             hoshino.logger.exception(e)
             return MessageSegment.text('[图片出错]')
Example #2
0
def getCorrectInfo(originData: str) -> Dict[str, Any]:
    subjectList = []
    for perSubject in etree.HTML(originData).xpath(
        '//div[@class="row item-box"][position()>1]'
    ):
        previewLink = urljoin(_ASCII2D_ADDRESS, perSubject.xpath(".//div/img/@src")[0])
        imageTitle = perSubject.xpath(".//a[@rel][1]/text()")
        imageTitle = imageTitle[0] if imageTitle else None
        imageLink = perSubject.xpath(".//a[@rel][1]/@href")
        imageLink = imageLink[0] if imageLink else previewLink
        subjectList.append(
            {
                "preview_link": previewLink,
                "title": imageTitle,
                "link_source": imageLink,
                "source": urlparse(imageLink).netloc,
                "id": _getNumbers(imageLink),
            }
        )
    shortedLink = NetworkUtils.shortLink([i["link_source"] for i in subjectList])
    returnDict = {"size": len(subjectList), "subject": []}
    for perSubject in subjectList:
        perSubject.update(
            {
                "link": shortedLink[perSubject["link_source"]],
                "preview": MessageSegment.image(perSubject["preview_link"]),
            }
        )
        returnDict["subject"].append(perSubject)
    return returnDict
Example #3
0
def parseSingleImage(data: dict, mosaicR18: bool = True) -> dict:
    illustData = data["illust"]

    if illustData["page_count"] == 1:
        dwlLinks = [{
            "large":
            illustData["image_urls"]["large"],
            "medium":
            illustData["image_urls"]["medium"],
            "square_medium":
            illustData["image_urls"]["medium"],
            "original":
            illustData["meta_single_page"]["original_image_url"],
        }]
    else:
        dwlLinks = [
            perLink["image_urls"] for perLink in illustData["meta_pages"]
        ]

    hotRatio = ((illustData["total_bookmarks"] /
                 illustData["total_view"]) if illustData["total_view"] else 0)

    returnData = {
        "id": illustData["id"],
        "title": illustData["title"],
        "preview_link": dwlLinks[0]["medium"],
        "preview": str(MessageSegment.image(dwlLinks[0]["medium"])),
        "author": illustData["user"]["name"],
        "author_id": illustData["user"]["id"],
        "tags": [tag["name"] for tag in illustData["tags"]],
        "date": illustData["create_date"],
        "size": illustData["page_count"],
        "download": dwlLinks,
        "view": illustData["total_view"],
        "bookmark": illustData["total_bookmarks"],
        "ratio": hotRatio,
        "type": illustData["type"],
    }

    r18Status = _checkIsR18(returnData["tags"])
    previewDownload = str(
        MessageSegment.image(
            downloadImage(returnData["preview_link"],
                          mosaic=(mosaicR18 and r18Status))))

    returnData.update({"r-18": r18Status, "preview": previewDownload})
    return returnData
Example #4
0
def _(session: CommandSession):
    banID = extract_numbers(session.current_arg_text)
    if not banID:
        session.pause("请输入被洗白者的QQ")
    nowBlacklist: list = PluginManager.settings(__plugin_name__,
                                                session.event).settings
    nowBlacklist = [i for i in nowBlacklist if i not in banID]
    PluginManager.settings(__plugin_name__,
                           session.event).settings = [*set(nowBlacklist)]
    return "已经为" + "".join(map(lambda x: str(MessageSegment.at(x)),
                               banID)) + "移除黑名单"
Example #5
0
def timeTelling() -> str:
    imageData = daily.image()
    imageEncoded = f'base64://{b64encode(imageData["image"]).decode()}'
    hitokotoGet = daily.hitokoto()
    messageData = {
        "hitokoto": hitokotoGet["hitokoto"],
        "hitokoto_from": hitokotoGet["from"],
        "image": MessageSegment.image(imageEncoded),
        "image_from": imageData["source"],
        "date": date.today(),
    }
    return str(CONFIG.custom.format).format(**messageData)
Example #6
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
Example #7
0
def _(session: CommandSession):
    session.send("开始获取一图")
    randomRank = random.choice(["day", "week", "month"])
    apiParse = parseMultiImage(pixiv.getRank(randomRank))
    choiceResult = random.choice(
        [data for data in apiParse["result"] if data["type"] == "illust"]
    )
    imageLinks = [i["large"] for i in choiceResult["download"]][: Config.customize.size]
    images = downloadMutliImage(imageLinks)
    messageRepeat = [str(MessageSegment.image(images[i])) for i in imageLinks]
    fullMessage = (
        str(Config.customize.rank_prefix).format(**choiceResult)
        + "\n".join(messageRepeat)
        + "\n"
        + str(Config.customize.rank_suffix).format(**choiceResult)
    )
    return fullMessage
Example #8
0
def NSFWImage(session: CommandSession):
    rank: str = session.get_optional("rank", Config.send.default)
    pictureCount: int = session.get_optional("num", 1)
    pictureCount = (
        pictureCount if pictureCount <= Config.send.size else Config.send.size
    )
    session.send(f"{rank.upper()}级涩图加载中,将发送最多{pictureCount}张")
    imageInfoList: List[Dict[str, Any]] = getImageList()
    imageList: List[str] = [
        i.get("sample_url", i.get("file_url"))
        for i in imageInfoList
        if i["rating"].upper() in rank.upper()
    ]
    random.shuffle(imageList)
    images = downloadMultiImage([i for i in imageList if i][:pictureCount])
    imageSent = [str(MessageSegment.image(i)) for i in images.values()]
    return "\n".join(imageSent) + f"\n共筛选出{len(imageList)}张图片"
Example #9
0
def _(session: CommandSession):
    banID = extract_numbers(session.current_arg_text)
    groupUsers = [
        i["user_id"]
        for i in callModuleAPI("get_group_member_list",
                               params={"group_id": session.event.group_id})
    ]
    banID = [*set([int(i) for i in banID]).intersection({*groupUsers})]
    if not banID:
        session.pause("请输入被拉黑者的QQ")
    nowBlacklist: list = PluginManager.settings(__plugin_name__,
                                                session.event).settings
    nowBlacklist.extend(map(int, banID))
    PluginManager.settings(__plugin_name__,
                           session.event).settings = [*set(nowBlacklist)]
    return "已经为" + "".join(map(lambda x: str(MessageSegment.at(x)),
                               banID)) + "添加黑名单"
Example #10
0
def parse(data: str) -> dict:
    dataLoad = json.loads(data)
    link = ""
    perview = ""  # noqa: F841
    assert "desc" in dataLoad
    assert "prompt" in dataLoad
    assert "meta" in dataLoad
    for detail in dataLoad["meta"].values():
        if "qqdocurl" in detail:
            link = detail["qqdocurl"]
        if "preview" in detail:
            preview = detail["preview"]
    return {
        "desc": dataLoad["desc"],
        "prompt": dataLoad["prompt"],
        "link": link,
        "preview": MessageSegment.image(preview) if preview else preview,
    }
Example #11
0
async def call_subscribe(bot: NoneBot, ctx: Context_T, 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
Example #12
0
def getImage(session: CommandSession):
    allowR18: bool = PluginManager.settings(GET_IMAGE_METHOD, ctx=session.ctx).settings[
        "r-18"
    ]
    imageID: int = session.get("id")
    imageResloution: str = session.get_optional("res", "large")
    session.send(f"开始获取Pixiv ID为{imageID}的{imageResloution}")
    apiGet = pixiv.getImageDetail(imageID)
    apiParse = parseSingleImage(apiGet, mosaicR18=not allowR18)
    imageURLs = [p[imageResloution] for p in apiParse["download"]][
        : Config.customize.size
    ]
    imageDownloaded = downloadMutliImage(
        imageURLs, mosaic=((not allowR18) and apiParse["r-18"])
    )
    images = [str(MessageSegment.image(imageDownloaded[i])) for i in imageURLs]
    repeatMessage = "\n".join(images)
    finalMessage = (
        str(Config.customize.image_prefix).format(**apiParse)
        + f"{repeatMessage}\n"
        + str(Config.customize.image_suffix).format(**apiParse)
    )
    return finalMessage
Example #13
0
def _(session: CommandSession):
    nowBlacklist: list = PluginManager.settings(__plugin_name__,
                                                session.event).settings
    return ("目前" +
            "".join(map(lambda x: str(MessageSegment.at(x)), nowBlacklist)) +
            "在黑名单上")