Merge branch 'master' of github.com:yoimiya-kokomi/Miao-Yunzai
This commit is contained in:
commit
3d639664d3
|
@ -158,6 +158,7 @@ class PluginsLoader {
|
||||||
* @param e icqq Events
|
* @param e icqq Events
|
||||||
*/
|
*/
|
||||||
async deal (e) {
|
async deal (e) {
|
||||||
|
e.bot = Bot
|
||||||
/** 检查频道消息 */
|
/** 检查频道消息 */
|
||||||
if (this.checkGuildMsg(e)) return
|
if (this.checkGuildMsg(e)) return
|
||||||
/** 检查黑白名单 */
|
/** 检查黑白名单 */
|
||||||
|
|
|
@ -246,6 +246,87 @@ class Puppeteer {
|
||||||
return segment.image(buff)
|
return segment.image(buff)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `chromium` 分片截图
|
||||||
|
*/
|
||||||
|
async screenshots (name, data = {}) {
|
||||||
|
// FIXME: pageHeight 作为参数?
|
||||||
|
const pageHeight = 7000
|
||||||
|
|
||||||
|
await this.browserInit()
|
||||||
|
|
||||||
|
if (!this.browser) return false
|
||||||
|
|
||||||
|
const savePath = this.dealTpl(this.model, data)
|
||||||
|
if (!savePath) return false
|
||||||
|
|
||||||
|
const page = await this.browser.newPage()
|
||||||
|
try {
|
||||||
|
await page.goto(`file://${_path}${lodash.trim(savePath, '.')}`, { timeout: 120000 })
|
||||||
|
const body = await page.$('#container') || await page.$('body')
|
||||||
|
const boundingBox = await body.boundingBox()
|
||||||
|
|
||||||
|
const num = Math.round(boundingBox.height / pageHeight) || 1
|
||||||
|
|
||||||
|
if (num > 1) {
|
||||||
|
await page.setViewport({
|
||||||
|
width: boundingBox.width,
|
||||||
|
height: pageHeight + 100
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const img = []
|
||||||
|
for (let i = 1; i <= num; i++) {
|
||||||
|
const randData = {
|
||||||
|
type: 'jpeg',
|
||||||
|
quality: 90
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i != 1 && i == num) {
|
||||||
|
await page.setViewport({
|
||||||
|
width: boundingBox.width,
|
||||||
|
height: parseInt(boundingBox.height) - pageHeight * (num - 1)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i != 1 && i <= num) {
|
||||||
|
await page.evaluate(() => window.scrollBy(0, 7000))
|
||||||
|
}
|
||||||
|
|
||||||
|
let buff
|
||||||
|
if (num == 1) {
|
||||||
|
buff = await body.screenshot(randData)
|
||||||
|
} else {
|
||||||
|
buff = await page.screenshot(randData)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (num > 2) await common.sleep(200)
|
||||||
|
|
||||||
|
this.renderNum++
|
||||||
|
/** 计算图片大小 */
|
||||||
|
const kb = (buff.length / 1024).toFixed(2) + 'kb'
|
||||||
|
|
||||||
|
logger.mark(`[图片生成][${name}][${this.renderNum}次] ${kb}`)
|
||||||
|
|
||||||
|
img.push(segment.image(buff))
|
||||||
|
}
|
||||||
|
|
||||||
|
await page.close().catch((err) => logger.error(err))
|
||||||
|
|
||||||
|
if (num > 1) {
|
||||||
|
logger.mark(`[图片生成][${name}] 处理完成`)
|
||||||
|
}
|
||||||
|
return img
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(`图片生成失败:${name}:${error}`)
|
||||||
|
/** 关闭浏览器 */
|
||||||
|
if (this.browser) {
|
||||||
|
await this.browser.close().catch((err) => logger.error(err))
|
||||||
|
}
|
||||||
|
this.browser = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** 模板 */
|
/** 模板 */
|
||||||
dealTpl (name, data) {
|
dealTpl (name, data) {
|
||||||
let { tplFile, saveId = name } = data
|
let { tplFile, saveId = name } = data
|
||||||
|
|
|
@ -14,9 +14,6 @@
|
||||||
|#刻晴攻略|米游社西风攻略|
|
|#刻晴攻略|米游社西风攻略|
|
||||||
|#练度统计,#五星列表,#天赋列表|米游社角色详情列表|
|
|#练度统计,#五星列表,#天赋列表|米游社角色详情列表|
|
||||||
|#体力|原神体力查询|
|
|#体力|原神体力查询|
|
||||||
|#签到|米游社原神签到,自动签到|
|
|
||||||
|#开启、关闭签到|开启或关闭原神自动签到|
|
|
||||||
|#全部签到|签到全部ck|
|
|
||||||
|#原石、#原石七月|查询米游社原石札记|
|
|#原石、#原石七月|查询米游社原石札记|
|
||||||
|#原石统计|查询米游社原石札记,会自动保存数据|
|
|#原石统计|查询米游社原石札记,会自动保存数据|
|
||||||
|#2022年原石统计| 按年份查询保存的历史原石札记数据|
|
|#2022年原石统计| 按年份查询保存的历史原石札记数据|
|
||||||
|
|
|
@ -22,8 +22,8 @@
|
||||||
title: '#原石 #原石统计'
|
title: '#原石 #原石统计'
|
||||||
desc: 查询体力,需要绑定cookie
|
desc: 查询体力,需要绑定cookie
|
||||||
- icon: 打卡
|
- icon: 打卡
|
||||||
title: '#签到、删除cookie'
|
title: '#删除cookie'
|
||||||
desc: 米游社原神自动签到
|
desc: 删除米游社cookie
|
||||||
- icon: 统计
|
- icon: 统计
|
||||||
title: '#角色养成'
|
title: '#角色养成'
|
||||||
desc: 计算角色养成消耗素材
|
desc: 计算角色养成消耗素材
|
||||||
|
|
|
@ -44,86 +44,13 @@ export default class MysNews extends base {
|
||||||
|
|
||||||
const param = await this.newsDetail(postId)
|
const param = await this.newsDetail(postId)
|
||||||
|
|
||||||
const img = await this.rander(param)
|
const img = await this.render(param)
|
||||||
|
|
||||||
return await this.replyMsg(img, `原神${typeName}:${param.data.post.subject}`)
|
return await this.replyMsg(img, `原神${typeName}:${param.data.post.subject}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
async rander (param) {
|
async render (param) {
|
||||||
const pageHeight = 7000
|
return await puppeteer.screenshots(this.model, param);
|
||||||
|
|
||||||
await puppeteer.browserInit()
|
|
||||||
|
|
||||||
if (!puppeteer.browser) return false
|
|
||||||
|
|
||||||
const savePath = puppeteer.dealTpl('mysNews', param)
|
|
||||||
if (!savePath) return false
|
|
||||||
|
|
||||||
const page = await puppeteer.browser.newPage()
|
|
||||||
try {
|
|
||||||
await page.goto(`file://${_path}${lodash.trim(savePath, '.')}`, { timeout: 120000 })
|
|
||||||
const body = await page.$('#container') || await page.$('body')
|
|
||||||
const boundingBox = await body.boundingBox()
|
|
||||||
|
|
||||||
const num = Math.round(boundingBox.height / pageHeight) || 1
|
|
||||||
|
|
||||||
if (num > 1) {
|
|
||||||
await page.setViewport({
|
|
||||||
width: boundingBox.width,
|
|
||||||
height: pageHeight + 100
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const img = []
|
|
||||||
for (let i = 1; i <= num; i++) {
|
|
||||||
const randData = {
|
|
||||||
type: 'jpeg',
|
|
||||||
quality: 90
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i != 1 && i == num) {
|
|
||||||
await page.setViewport({
|
|
||||||
width: boundingBox.width,
|
|
||||||
height: parseInt(boundingBox.height) - pageHeight * (num - 1)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i != 1 && i <= num) {
|
|
||||||
await page.evaluate(() => window.scrollBy(0, 7000))
|
|
||||||
}
|
|
||||||
|
|
||||||
let buff
|
|
||||||
if (num == 1) {
|
|
||||||
buff = await body.screenshot(randData)
|
|
||||||
} else {
|
|
||||||
buff = await page.screenshot(randData)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (num > 2) await common.sleep(200)
|
|
||||||
|
|
||||||
puppeteer.renderNum++
|
|
||||||
/** 计算图片大小 */
|
|
||||||
const kb = (buff.length / 1024).toFixed(2) + 'kb'
|
|
||||||
|
|
||||||
logger.mark(`[图片生成][${this.model}][${puppeteer.renderNum}次] ${kb}`)
|
|
||||||
|
|
||||||
img.push(segment.image(buff))
|
|
||||||
}
|
|
||||||
|
|
||||||
await page.close().catch((err) => logger.error(err))
|
|
||||||
|
|
||||||
if (num > 1) {
|
|
||||||
logger.mark(`[图片生成][${this.model}] 处理完成`)
|
|
||||||
}
|
|
||||||
return img
|
|
||||||
} catch (error) {
|
|
||||||
logger.error(`图片生成失败:${this.model}:${error}`)
|
|
||||||
/** 关闭浏览器 */
|
|
||||||
if (puppeteer.browser) {
|
|
||||||
await puppeteer.browser.close().catch((err) => logger.error(err))
|
|
||||||
}
|
|
||||||
puppeteer.browser = false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async newsDetail (postId) {
|
async newsDetail (postId) {
|
||||||
|
@ -282,7 +209,7 @@ export default class MysNews extends base {
|
||||||
|
|
||||||
const param = await this.newsDetail(postId)
|
const param = await this.newsDetail(postId)
|
||||||
|
|
||||||
const img = await this.rander(param)
|
const img = await this.render(param)
|
||||||
|
|
||||||
return await this.replyMsg(img, `${param.data.post.subject}`)
|
return await this.replyMsg(img, `${param.data.post.subject}`)
|
||||||
}
|
}
|
||||||
|
@ -295,7 +222,7 @@ export default class MysNews extends base {
|
||||||
|
|
||||||
const param = await this.newsDetail(postId)
|
const param = await this.newsDetail(postId)
|
||||||
|
|
||||||
const img = await this.rander(param)
|
const img = await this.render(param)
|
||||||
|
|
||||||
return await this.replyMsg(img, `${param.data.post.subject}`)
|
return await this.replyMsg(img, `${param.data.post.subject}`)
|
||||||
}
|
}
|
||||||
|
@ -322,7 +249,7 @@ export default class MysNews extends base {
|
||||||
|
|
||||||
const param = await this.newsDetail(postId)
|
const param = await this.newsDetail(postId)
|
||||||
|
|
||||||
const img = await this.rander(param)
|
const img = await this.render(param)
|
||||||
|
|
||||||
if (img.length > 1) {
|
if (img.length > 1) {
|
||||||
img.push(segment.image(param.data.post.images[0] + '?x-oss-process=image//resize,s_600/quality,q_80/auto-orient,0/interlace,1/format,jpg'))
|
img.push(segment.image(param.data.post.images[0] + '?x-oss-process=image//resize,s_600/quality,q_80/auto-orient,0/interlace,1/format,jpg'))
|
||||||
|
@ -407,7 +334,7 @@ export default class MysNews extends base {
|
||||||
logger.mark(`[米游社${typeName}推送] ${param.data.post.subject}`)
|
logger.mark(`[米游社${typeName}推送] ${param.data.post.subject}`)
|
||||||
|
|
||||||
this[postId] = {
|
this[postId] = {
|
||||||
img: await this.rander(param),
|
img: await this.render(param),
|
||||||
title: param.data.post.subject
|
title: param.data.post.subject
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,8 +99,6 @@ export default class User extends base {
|
||||||
await this.e.reply(uidMsg.join('\n'))
|
await this.e.reply(uidMsg.join('\n'))
|
||||||
|
|
||||||
let msg = '【#体力】查询当前树脂'
|
let msg = '【#体力】查询当前树脂'
|
||||||
msg += '\n【#签到】米游社原神自动签到'
|
|
||||||
msg += '\n【#关闭签到】开启或关闭原神自动签到'
|
|
||||||
msg += '\n【#原石】查看原石札记'
|
msg += '\n【#原石】查看原石札记'
|
||||||
msg += '\n【#原石统计】原石统计数据'
|
msg += '\n【#原石统计】原石统计数据'
|
||||||
msg += '\n【#练度统计】技能统计列表'
|
msg += '\n【#练度统计】技能统计列表'
|
||||||
|
|
Loading…
Reference in New Issue