From 2f6980d5a29d3fb1d074bad76e6d99b09cb5efd2 Mon Sep 17 00:00:00 2001 From: yeyang <746659424@qq.com> Date: Mon, 9 Jan 2023 20:22:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=8A=E5=A4=A9=E8=B0=81?= =?UTF-8?q?=E7=94=9F=E6=97=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/gp_admin.js | 62 ++++++++++++++++++++++++++++-------- config/system/help_system.js | 4 +++ model/Browser.js | 60 ++++++++-------------------------- model/QQInterface.js | 2 +- model/common.js | 19 +++++++++-- 5 files changed, 83 insertions(+), 64 deletions(-) diff --git a/apps/gp_admin.js b/apps/gp_admin.js index 2078106..62d1280 100644 --- a/apps/gp_admin.js +++ b/apps/gp_admin.js @@ -136,6 +136,10 @@ export class Basics extends plugin { reg: Autisticreg,//我要自闭 fnc: 'Autistic' }, + { + reg: '^#?(今天|昨天|明天|后天|\\d{4}-\\d{1,2}-\\d{1,2})谁生日$', + fnc: 'groupBirthday' + } ] }) @@ -728,19 +732,20 @@ export class Basics extends plugin { //谁是龙王 async dragonKing(e) { - //图片版 + //浏览器截图 let url = `https://qun.qq.com/interactive/honorlist?gc=${e.group_id}&type=1&_wv=3&_wwv=129` + let screenshot = await Browser.Webpage(url, { "Cookie": Bot.cookies['qun.qq.com'] }, { + width: 375, + height: 667, + deviceScaleFactor: 3 + }, true) + if (screenshot) return e.reply(screenshot) //数据版 - // let res = await QQInterface.dragon(e.group_id) + let res = await QQInterface.dragon(e.group_id) e.reply([ - // `本群龙王:${res.name}`, - // segment.image(res.avatar), - // `蝉联天数:${res.desc}`, - await Browser.Webpage(url, { "Cookie": Bot.cookies['qun.qq.com'] }, { - width: 700, - height: 700, - deviceScaleFactor: 3 - }, true) + `本群龙王:${res.nick}`, + segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${res.uin}`), + `蝉联天数:${res.avatar_size}`, ]); } @@ -765,7 +770,7 @@ export class Basics extends plugin { return e.reply(ROLE_ERROR, true); } //图片截图 - let url = `https://qun.qq.com/m/qun/activedata/speaking.html?gc=${e.group_id}&time=${/(7|七)天/.test(e.msg) ? 1 : 0}&_wv=3&&_wwv=128` + let url = `https://qun.qq.com/m/qun/activedata/speaking.html?gc=${e.group_id}&time=${/(7|七)天/.test(e.msg) ? 1 : 0}` //接口数据 let res = await QQInterface.SpeakRank(e.group_id, /(7|七)天/.test(e.msg) ? 1 : 0) if (!res) return e.reply("接口失效辣!!!") @@ -776,8 +781,7 @@ export class Basics extends plugin { e.reply([ ...msg, await Browser.Webpage(url, { - "Cookie": - Bot.cookies['qun.qq.com'] + "Cookie": Bot.cookies['qun.qq.com'] }, { width: 700, height: 700, @@ -788,8 +792,16 @@ export class Basics extends plugin { //今日打卡 async DaySigned(e) { + //浏览器截图 + let url = `https://qun.qq.com/v2/signin/list?gc=${e.group_id}}` + let screenshot = await Browser.Webpage(url, undefined, { + width: 375, + height: 667, + deviceScaleFactor: 2 + }, true, common.getck('qun.qq.com', true), false) + if (screenshot) return e.reply(screenshot) + //出错后使用接口 let res = await QQInterface.signInToday(e.group_id) - if (!res) return e.reply("❎ 出错辣,请稍后重试") if (res.retCode != 0) return e.reply("❎ 未知错误\n" + JSON.stringify(res)); @@ -799,4 +811,26 @@ export class Basics extends plugin { let msg = list.infos.map((item, index) => `${index + 1}:${item.uidGroupNick}-${item.uid}\n打卡时间:${moment(item.signedTimeStamp * 1000).format("YYYY-MM-DD HH:mm:ss")}`).join("\n"); e.reply(msg) } + + //查看某天谁生日 + async groupBirthday(e) { + let date = e.msg.match(/^#?(今天|昨天|明天|后天|\d{4}-\d{1,2}-\d{1,2})谁生日$/)[1] + if (date == '昨天') { + date = moment().subtract(1, 'days').format("YYYY-MM-DD"); + } else if (date == '明天') { + date = moment().add(1, 'days').format("YYYY-MM-DD"); + } else if (date == '后天') { + date = moment().add(2, 'days').format("YYYY-MM-DD"); + } else if (date == '今天') { + date = moment().format("YYYY-MM-DD"); + } + let url = `https://qun.qq.com/qqweb/m/qun/calendar/detail.html?_wv=1031&_bid=2340&src=3&gc=${e.group_id}&type=2&date=${date}` + e.reply( + await Browser.Webpage(url, undefined, { + width: 375, + height: 667, + deviceScaleFactor: 2 + }, true, common.getck('qun.qq.com', true)) + ) + } } diff --git a/config/system/help_system.js b/config/system/help_system.js index 4bf80e1..e0f4ecf 100644 --- a/config/system/help_system.js +++ b/config/system/help_system.js @@ -243,6 +243,10 @@ export const helpList = [{ "title": "#acg刻晴", "desc": "acgcos", "icon": 9 + }, { + "title": "#今天谁生日", + "desc": "今天可换为昨天或后天或日期", + "icon": 12 },] }, { diff --git a/model/Browser.js b/model/Browser.js index ef2e715..b269117 100644 --- a/model/Browser.js +++ b/model/Browser.js @@ -1,5 +1,8 @@ import puppeteer from 'puppeteer' import { segment } from 'oicq' +let sleep = (ms) => { + return new Promise((resolve) => setTimeout(resolve, ms)) +} export default new class Browser { /** * @description:返回网页截图 @@ -14,7 +17,8 @@ export default new class Browser { width: 1920, height: 1080, deviceScaleFactor: 1 - }, font = false) { + }, font = false, ck = false, fullPage = true) { + const browser = await puppeteer.launch({ args: [ '--disable-gpu', @@ -27,23 +31,24 @@ export default new class Browser { ] }); const page = await browser.newPage(); - await page.setExtraHTTPHeaders(headers) - await page.goto(url, { 'timeout': 1000 * 30, 'waitUntil': 'networkidle0' }); - await page.setViewport(setViewport); - await page.addStyleTag({ - content: font ? `* {font-family: "汉仪文黑-65W","雅痞-简","圆体-简","PingFang SC","微软雅黑", sans-serif !important;}` : '' - }) try { + await page.setExtraHTTPHeaders(headers) + if (ck) await page.setCookie(...ck) + await page.goto(url, { 'timeout': 1000 * 30, 'waitUntil': 'networkidle0' }); + await page.setViewport(setViewport); + await page.addStyleTag({ + content: font ? `* {font-family: "汉仪文黑-65W","雅痞-简","圆体-简","PingFang SC","微软雅黑", sans-serif !important;}` : '' + }) + let res = await page.screenshot({ // path: './paper.jpeg', type: 'jpeg', - fullPage: true, + fullPage, quality: 100 }).catch(err => { console.log('截图失败'); console.log(err); }); - // await page.waitFor(5000); return segment.image(res) } catch (e) { console.log('执行异常'); @@ -53,41 +58,4 @@ export default new class Browser { } } - - /** - * @description: 截图不滚动不等待加载 - * @param {String} url 网页链接 - * @param {Number} width 页面的宽度 - * @param {Number} height 页面的高度 - * @return {image} 图片 - */ - async webPreview(url, width = 1920, height = 1080, headers = {}) { - - const browser = await puppeteer.launch({ - headless: true, - args: [ - '--disable-gpu', - '--disable-dev-shm-usage', - '--disable-setuid-sandbox', - '--no-first-run', - '--no-sandbox', - '--no-zygote', - '--single-process' - ] - }); - const page = await browser.newPage(); - await page.setExtraHTTPHeaders(headers) - await page.goto(url); - await page.setViewport({ - width: width, - height: height - }); - - let res = await page.screenshot({ - fullPage: true - }) - - await browser.close(); - return segment.image(res) - } } \ No newline at end of file diff --git a/model/QQInterface.js b/model/QQInterface.js index 278c87e..c166e12 100644 --- a/model/QQInterface.js +++ b/model/QQInterface.js @@ -204,7 +204,7 @@ export default new class assistant { .then(res => res.text()).catch(err => console.error(err)); let data = res.match(/