Ejemplo n.º 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('[图片出错]')
Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 4
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)
Ejemplo n.º 5
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
Ejemplo n.º 6
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)}张图片"
Ejemplo n.º 7
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,
    }
Ejemplo n.º 8
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