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('[图片出错]')
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
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
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)) + "移除黑名单"
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)
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
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
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)}张图片"
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)) + "添加黑名单"
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, }
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
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
def _(session: CommandSession): nowBlacklist: list = PluginManager.settings(__plugin_name__, session.event).settings return ("目前" + "".join(map(lambda x: str(MessageSegment.at(x)), nowBlacklist)) + "在黑名单上")