From b76a452404a889079f6769d57a12576e42047079 Mon Sep 17 00:00:00 2001 From: zhiyu1998 Date: Sun, 12 Mar 2023 02:34:20 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=96=B0=E5=A2=9E=E7=BD=91?= =?UTF-8?q?=E6=98=93=E4=BA=91=E9=9F=B3=E4=B9=90=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/query.js | 22 +---------- apps/tools.js | 66 ++++++++++++++++++++++++++++++--- config/help.yaml | 3 ++ resources/img/icon/netease.png | Bin 0 -> 11234 bytes 4 files changed, 64 insertions(+), 27 deletions(-) create mode 100644 resources/img/icon/netease.png diff --git a/apps/query.js b/apps/query.js index e28baff..c1c88a2 100644 --- a/apps/query.js +++ b/apps/query.js @@ -206,19 +206,11 @@ export class query extends plugin { async hotSearch(e) { let keyword = e.msg.replace(/#|热搜/g, "").trim(); - console.log(keyword); - // 虎扑/知乎/36氪/百度/哔哩哔哩/贴吧/微博/抖音/豆瓣/少数派/IT资讯/微信 let url = "https://api.vvhan.com/api/hotlist?type="; switch (keyword) { - case "虎扑": - url += "huPu"; - break; case "知乎": url += "zhihuHot"; break; - case "36氪": - url += "36Ke"; - break; case "百度": url += "baiduRD"; break; @@ -234,20 +226,8 @@ export class query extends plugin { case "抖音": url += "douyinHot"; break; - case "豆瓣": - url += "douban"; - break; - case "少数派": - url += "ssPai"; - break; - case "IT资讯": - url += "itInfo"; - break; - case "微信": - url += "wxHot"; - break; default: - url += "history"; + url += "bili"; break; } let sendTemplate = { diff --git a/apps/tools.js b/apps/tools.js index 70eccc5..668d442 100644 --- a/apps/tools.js +++ b/apps/tools.js @@ -1,7 +1,7 @@ // 主库 import fetch from "node-fetch"; import fs from "node:fs"; -import { segment } from "oicq"; +import { Gfs, segment } from "oicq"; // 其他库 import md5 from "md5"; import axios from "axios"; @@ -15,6 +15,7 @@ import { parseUrl, parseM3u8, downloadM3u8Videos, mergeAcFileToMp4 } from "../ut import { transMap, douyinTypeMap, TEN_THOUSAND } from "../utils/constant.js"; import { getIdVideo } from "../utils/common.js"; import config from "../model/index.js"; +import { resolve } from "patch-package/dist/path.js"; export class tools extends plugin { constructor() { @@ -49,8 +50,8 @@ export class tools extends plugin { fnc: "twitter", }, { - reg: "https://(m.)?v.qq.com/(.*)", - fnc: "tx", + reg: "music.163.com", + fnc: "netease", }, { reg: "(acfun.cn)", @@ -68,7 +69,7 @@ export class tools extends plugin { reg: "^#清理data垃圾$", fnc: "clearTrash", permission: "master", - } + }, ], }); // http://api.tuwei.space/girl @@ -623,7 +624,7 @@ export class tools extends plugin { // 清理垃圾文件 async clearTrash(e) { - const directory = './data/'; + const directory = "./data/"; try { fs.readdir(directory, (err, files) => { for (const file of files) { @@ -636,10 +637,63 @@ export class tools extends plugin { await e.reply(`清理完成!`); } catch (err) { console.log(err); - e.reply("清理失败,重试或者自动清理即可") + e.reply("清理失败,重试或者自动清理即可"); } } + async netease(e) { + const message = e.msg === undefined ? e.message.shift().data.replaceAll("\\", "") : e.msg.trim(); + const musicUrlReg = /(http:|https:)\/\/music.163.com\/song\/media\/outer\/url\?id=(\d+)/; + const realMusicUrl = musicUrlReg.exec(message)[0]; + const id = musicUrlReg.exec(message)[2]; + console.log(id); + fetch(`https://api.vvhan.com/api/music?id=${id}&type=song&media=netease`, { + headers: { + "User-Agent": + "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Mobile Safari/537.36", + "Content-Type": "application/json", + }, + }) + .then(resp => resp.json()) + .then(resp => { + console.log(resp); + const { name, author, mp3url, cover } = resp; + e.reply([`识别:网易云音乐,${name}--${author}`, segment.image(cover)]); + console.log(mp3url); + fetch(mp3url, { + headers: { + "User-Agent": + "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Mobile Safari/537.36", + }, + responseType: "stream", + redirect: 'manual' + }) + .then(res => { + const path = `${this.defaultPath}${this.e.group_id || this.e.user_id}/temp.mp3` + const fileStream = fs.createWriteStream(path); + res.body.pipe(fileStream); + return new Promise((resolve, reject) => { + fileStream.on("finish", () => { + fileStream.close(() => { + resolve(path); + }); + }); + fileStream.on("error", err => { + fs.unlink(path, () => { + reject(err); + }); + }); + }); + }).then(path => { + Bot.acquireGfs(e.group_id).upload(fs.readFileSync(path), '/', `${name}.mp3`) + }) + .catch(err => { + console.error(`Error downloading file: ${err.message}`); + }); + }); + return true; + } + /** * 哔哩哔哩下载 * @param title diff --git a/config/help.yaml b/config/help.yaml index d8a92be..60f9a9b 100644 --- a/config/help.yaml +++ b/config/help.yaml @@ -53,6 +53,9 @@ - icon: literature title: "论文" desc: SCI论文实时解析 + - icon: netease + title: "网易云音乐", + desc: 网易云音乐解析 - group: 其他指令 list: - icon: update diff --git a/resources/img/icon/netease.png b/resources/img/icon/netease.png new file mode 100644 index 0000000000000000000000000000000000000000..4fcf4c66a0aee662bc258f9323daf50e0676e2b9 GIT binary patch literal 11234 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

o@PAnX4jpxywB?>C~Chmb^0#` zv8@ScH?C?{R@rOQ2$DzOUfZrxQqzLJ`EsL6H>o2 zz07}m16v~o;yGOt33hEVoE;6TEHG@Pj&7iMa3|sU3aNYaFMH=z53_wuG4(1g@eaO- z8Zh~G%Z|}V6pJ8dg$ zBluyXpIgmpG80Jm@kGS9J1q&urk+AMJ-(v@Add43F_8yn>>@mw?$z&qG;Ned0DD83v-;~Vv85ZxGzQOi-eHq()* z@qnIK5Cb2^z~KO5GI>YD>j5U*n919}jEH|twpm@fkN^SV-8O^3N2RUO&BLEtDQ$m& zCfGLGyDQqzKoRN)!0R$_xB?u)tylH<92mce#rXcY%SwNCcc0uDxs>`vX8M6#uF-Q7 zO-0iM``06lrlw69t(x8I$r!8o(S7$Qbpk{`j?fO(i*P%8Jn6mi{Wff z4lwVgnbjH2r9Er1q*oEH^VvSq+*#vh3BkH(T@Vvh>(Lv8fPj8RqK0ME^r{$34| z7m|tDD)G{GHKv~4Lr$z`^X02nw32P2$xtkY-U=hF5PF%N-kSOmiKd)G;vWK5F=z;I zh5)MmHyDdzOfSw^UTnFwYwI`2$YLl^W(zR$;T!jj@d1iyA``eHhbWxc`dPG5%}jeQ z!+@?`tN^FCw-tZ@fyk`Dzp6p<7!dzZTNPgUcfUa5%PbpO=AW`l;l~3JG)?s*Uh3R` zShl(gP_70^^=+bSZ_qHrf5#3Y`eZs^e4t|uY@%V$>sU7d^$rFtXrda@L^JU3jAgGU z7`_)IIb9pzXf~D76qmw?=nNxYyhIAGE|aPUavQ7jI9BZwzjdd$gn(??va9Vn-V2gu zHC^*hQw=EsdfX_v7-NMqVsjP5WjyV|Pbzi$#<{XRfaTCla2t#!3|$6-3R zuTboSytRh8U7)@*u}CxNZV z#RzgK?E>a%pZJa*%ye3&P`rFhkmQo;HcTWs)lSv%E`ak5%f4u;I-s8214-@B7_g8D z+f5Ds{1@Ntz0a+YyOP%dtTQ#7FsYS~RN#E8zq?ndIw;!{pHDGmA-I}{HdV%3Z(H{I zTVwbF`n@0#|6wMz2SC_ss(7M~ofQJkPh0l+Q`Hx_nVP{4Ed=<)Dd>X-49ouHsNG|N zWKd6>?0~PFf=;PzGU0hJZUx70F$(XloC`8;`5XhMOx3RnWKGFw zOM4P?$_g);3J-%n8(HMF-3rDnMxoT2{U!YwG-3AQnd;^-2cHAzsHqwpBTiXXEZQHQ z_Zr>^T%g5pNC=9Nht2Vpz7oFL-ZE43d<3EV!Ct z&>eL>K!0?AyI64^Z)VL(kVRTNbIpz7j=g}14wzyaayNHXV#FVrn=k#XZje;pCb}jH zWu!IpbknQ@et!<&$BC3j()r?pt!R(fh*y|Dt}rcNU;%Xi(u;gQ^Y;y_B=%xs#)LPC z_%)kM>_Kf@Q6}GczBsIkA3LRcMLmKqYDtqt2eU*)o39Y>4A6W4n@eKdscio3 zIJ9lw^5TR&dCefHzD<&e>p^^Mr+TD;c8MC60RW4cc>oIMv{-z_CNB@IAfOUdkK7Eb zUr|*(=8(=rDI!OAm{J7j1lAd}VNl*vl8*6hqhOy~%l1iwWKf^B3B&n413gpHX^k=Z zRR&fP^IM+9QT5^10j%knraRHi120U6y>rS!&EBDt28rN0sH-P9pljVEbbs%9pv^sS zh+)~kn9PQ{K~nwf(zUw)9N6Yg=&IlKz$6}^>kX@Td_DKL2T6~%85D@qt`Bwn-1R_* zdBAjH%ARf=30#9jIAtKI9ik9KQC4?!Je1c=Z-P>={hGc|2ju;b~Qu9Y0s)n#gWAZUPu3KBv5 z(k9dNQrY<^^btJ)S%rAV4t?}Sy$1i;sKHFb5hurccFts zc$w%yi zVBov2TK2gD5k4r7)#;=LiC`>>dr-lJBkj;+=-B1a^?+9oJgb1t>$QsadnNEPPkNAy z3LQ+wcdAhAZ~`CJ3H{E!II}yaX&!i%!PjN1(sfa25Lu9nD!aHRF(