From 20016c10111ba31b72c85487dd7b050386e385be Mon Sep 17 00:00:00 2001 From: zhiyu1998 <542716863@qq.com> Date: Wed, 23 Nov 2022 16:16:23 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E5=A2=9E=E5=8A=A0=E6=8A=96?= =?UTF-8?q?=E9=9F=B3=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++- apps/tools.js | 83 ++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 65 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index dc7a721..bccec56 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,9 @@ index -- 主入口 2. 下载mongodb > linux系统下自己装一个mongodb,上一个密码(不上有风险) 3. 在`Yunzai-Bot`安装mongodb依赖 -> pnpm i mongodb +> pnpm add mongodb -w + +> pnpm add axios -w 4. 下载插件 > git clone https://gitee.com/kyrzy0416/rconsole-plugin.git ./plugins/rconsole-plugin/ diff --git a/apps/tools.js b/apps/tools.js index 0b90397..01ab549 100644 --- a/apps/tools.js +++ b/apps/tools.js @@ -1,8 +1,14 @@ +// 主库 import fetch from 'node-fetch' +import fs from "node:fs"; +import { segment } from 'oicq' +// 其他库 import md5 from 'md5' +import https from 'https' +import axios from 'axios' export class tools extends plugin { - constructor () { + constructor() { super({ name: '工具和学习类', dsc: '工具相关指令', @@ -11,13 +17,17 @@ export class tools extends plugin { rule: [ { reg: '^#(翻译)(.*)$', fnc: 'trans' + }, + { + reg: '(.*)(v.douyin.com)', fnc: 'douyin' } ] }) + this.path = "./data/mp4/"; } // 翻译插件 - async trans (e) { + async trans(e) { let place = e.msg.replace(/#|翻译/g, '').trim() let url = /[\u4E00-\u9FFF]+/g.test(place) ? `http://api.fanyi.baidu.com/api/trans/vip/translate?from=zh&to=en&appid=20210422000794040&salt=542716863&sign=${md5('20210422000794040' + place + '542716863' + 'HooD_ndgwcGH6SAnxGrM')}&q=${place}` : `http://api.fanyi.baidu.com/api/trans/vip/translate?from=en&to=zh&appid=20210422000794040&salt=542716863&sign=${md5('20210422000794040' + place + '542716863' + 'HooD_ndgwcGH6SAnxGrM')}&q=${place}` await fetch(url) @@ -31,24 +41,55 @@ export class tools extends plugin { // 抖音解析 async douyin(e) { const urlRex = /(http:|https:)\/\/v.douyin.com\/[A-Za-z\\d._?%&+\-=\/#]*/g - puppeteer.launch().then(async browser => { - const page = await browser.newPage(); - await page.goto(urlRex.exec(e.msg.trim())[0]); - const headers = page.headers() - console.log(headers) - await browser.close(); - }); - const douyinRex = /.*video\/(\d+)\/(.*?)/g - const resolver = douyinRex.exec(location) - const url = `https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=${resolver}` - e.reply('解析中...') - const res = fetch(url, { - 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" - }, - timeout: 10000 - }).then(resp => { - return resp.body - }) + const douUrl = urlRex.exec(e.msg.trim())[0] + + await https.request(douUrl, { + method: 'HEAD', 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' + }, timeout: 10000 + }, (res) => { + const location = res.headers['location'] + const douRex = /.*video\/(\d+)\/(.*?)/g + const douId = douRex.exec(location)[1] + const url = `https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=${douId}` + e.reply('解析中...') + return fetch(url) + .then(resp => resp.json()) + .then(json => json.item_list[0]) + .then(item => item.video.play_addr.url_list[0]) + .then(async url => { + await e.reply(await segment.video(await this.downloadVideo(url))) + }) + }).on('error', (err) => { + console.error(err); + }).end(); + return true; } + + // 根URL据下载视频 / 音频 + async downloadVideo (url) { + const target = `${this.path}${this.e.group_id || this.e.user_id}/temp.mp4` + if (fs.existsSync(target)) { + console.log(`视频已存在`); + fs.unlinkSync(target) + } else { + fs.mkdirSync(`${this.path}${this.e.group_id || this.e.user_id}`) + } + const res = await axios.get(url, { + 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", + }); + console.log(`开始下载: ${url}`); + const writer = fs.createWriteStream(target); + res.data.pipe(writer); + new Promise((resolve, reject) => { + writer.on("finish", resolve); + writer.on("error", reject); + }); + return target + }; }