add:星铁角色素材

Signed-off-by: 小花花花儿 <860563585@qq.com>
This commit is contained in:
小花花花儿 2024-05-26 13:25:36 +00:00 committed by Gitee
parent 37241496ac
commit 4991af7dc6
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
1 changed files with 146 additions and 39 deletions

View File

@ -1,4 +1,3 @@
/** 导入plugin */
import plugin from '../../../lib/plugins/plugin.js' import plugin from '../../../lib/plugins/plugin.js'
import gsCfg from '../model/gsCfg.js' import gsCfg from '../model/gsCfg.js'
import common from '../../../lib/common/common.js' import common from '../../../lib/common/common.js'
@ -6,87 +5,92 @@ import fs from 'node:fs'
import fetch from 'node-fetch' import fetch from 'node-fetch'
export class material extends plugin { export class material extends plugin {
constructor () { constructor() {
super({ super({
name: '角色素材', name: "角色素材",
dsc: '角色养成突破素材来自米游社友人A', dsc: "角色养成突破素材",
event: 'message', event: "message",
priority: 500, priority: 500,
rule: [ rule: [
{ {
reg: '^#*(.*)(突破|材料|素材)$', reg: "^#?(星铁)?(.*)(突破|材料|素材|培养)$",
fnc: 'material' fnc: "material"
} }
] ]
}) })
this.path = './temp/material/友人A' this.path = "./temp/material/gs/友人A"
this.pathOther = './temp/material/other' this.pathOther = "./temp/material/gs/other"
this.url = 'https://bbs-api.mihoyo.com/post/wapi/getPostFullInCollection?&gids=2&order_type=2&collection_id=' this.srPath = "./temp/material/sr/小橙子啊"
this.srPathOther = "./temp/material/sr/other"
this.url = "https://bbs-api.mihoyo.com/post/wapi/getPostFullInCollection?&gids=2&order_type=2&collection_id="
this.collection_id = [428421, 1164644, 1362644] this.collection_id = [428421, 1164644, 1362644]
this.srCollection_id = [1998643, 2146693, 2279356]
this.special = ['雷电将军', '珊瑚宫心海', '菲谢尔', '托马', '八重神子', '九条裟罗', '辛焱', '神里绫华'] this.special = ["雷电将军", "珊瑚宫心海", "菲谢尔", "托马", "八重神子", "九条裟罗", "辛焱", "神里绫华"]
this.oss = '?x-oss-process=image//resize,s_1000/quality,q_80/auto-orient,0/interlace,1/format,jpg' this.oss = "?x-oss-process=image//resize,s_1000/quality,q_80/auto-orient,0/interlace,1/format,jpg"
} }
/** 初始化创建配置文件 */ /** 初始化创建配置文件 */
async init () { async init() {
for (let dir of ['./temp', './temp/material', this.path, this.pathOther]) { for (let dir of ["./temp", "./temp/material", "./temp/material/gs", "./temp/material/sr", this.path, this.pathOther, this.srPath, this.srPathOther]) {
if (!fs.existsSync(dir)) { if (!fs.existsSync(dir)) {
fs.mkdirSync(dir) fs.mkdirSync(dir)
} }
} }
} }
/** #刻晴攻略 */ /** #刻晴素材 *符玄素材 */
async material () { async material() {
let isUpdate = !!this.e.msg.includes('更新') let isUpdate = this.e.msg.includes("更新")
let role = gsCfg.getRole(this.e.msg, '突破|材料|素材|更新') let role = gsCfg.getRole(this.e.msg, "星铁|突破|材料|素材|更新")
if (!role) return false if (!role) return false
/** 主角特殊处理 */ if (["10000005", "10000007", "20000000", "8003", "8001"].includes(String(role.roleId))) {
if (['10000005', '10000007', '20000000'].includes(String(role.roleId))) { await this.e.reply("暂无主角素材")
await this.e.reply('暂无主角素材')
return return
} }
this.imgPath = `${this.path}/${role.name}.jpg` let pathSuffix = this.e.msg.includes("星铁") ? "sr" : ""
this.imgPath = `${this[pathSuffix + "Path"]}/${role.name}.jpg`
if (fs.existsSync(this.imgPath) && !isUpdate) { if (fs.existsSync(this.imgPath) && !isUpdate) {
await this.e.reply(segment.image(`file://${this.imgPath}`)) await this.e.reply(segment.image(`file://${this.imgPath}`))
return return
} }
if (await this.getImg(role.name)) { if (await this[`getImg${pathSuffix ? "Sr" : ""}`](role.name)) {
return await this.e.reply(segment.image(`file://${this.imgPath}`)) return await this.e.reply(segment.image(`file://${this.imgPath}`))
} }
this.imgPath = `${this.pathOther}/${role.name}.jpg` this.imgPath = `${this[pathSuffix + "PathOther"]}/${role.name}.jpg`
if (fs.existsSync(this.imgPath) && !isUpdate) { if (fs.existsSync(this.imgPath) && !isUpdate) {
await this.e.reply(segment.image(`file://${this.imgPath}`)) await this.e.reply(segment.image(`file://${this.imgPath}`))
return return
} }
if (await this.getImgOther(role.name)) { if (await this[`getImg${pathSuffix ? "OtherSr" : "Other"}`](role.name)) {
return await this.e.reply(segment.image(`file://${this.imgPath}`)) return await this.e.reply(segment.image(`file://${this.imgPath}`))
} }
if (await this.getImgOther2(role.name)) { if (await this[`getImg${pathSuffix ? "Other2Sr" : "Other2"}`](role.name)) {
return await this.e.reply(segment.image(`file://${this.imgPath}`)) return await this.e.reply(segment.image(`file://${this.imgPath}`))
} }
} }
/** 下载攻略图 */ /** 下载攻略图 */
async getImg (name) { async getImg(name) {
this.imgPath = `${this.path}/${name}.jpg`
let ret = await this.getData(this.collection_id[0]) let ret = await this.getData(this.collection_id[0])
if (!ret || ret.retcode !== 0) { if (!ret || ret.retcode !== 0) {
await this.e.reply('暂无素材数据,请稍后再试') await this.e.reply("暂无素材数据,请稍后再试")
logger.error(`米游社接口报错:${ret.message || '未知错误'}}`) logger.error(`米游社接口报错:${ret.message || "未知错误"}}`)
return false return false
} }
@ -116,12 +120,14 @@ export class material extends plugin {
return true return true
} }
async getImgOther (name) { async getImgOther(name) {
this.imgPath = `${this.pathOther}/${name}.jpg`
let ret = await this.getData(this.collection_id[1]) let ret = await this.getData(this.collection_id[1])
if (!ret || ret.retcode !== 0) { if (!ret || ret.retcode !== 0) {
await this.e.reply('暂无素材数据,请稍后再试') await this.e.reply("暂无素材数据,请稍后再试")
logger.error(`米游社接口报错:${ret.message || '未知错误'}}`) logger.error(`米游社接口报错:${ret.message || "未知错误"}}`)
return false return false
} }
@ -148,12 +154,14 @@ export class material extends plugin {
return true return true
} }
async getImgOther2 (name) { async getImgOther2(name) {
this.imgPath = `${this.pathOther}/${name}.jpg`
let ret = await this.getData(this.collection_id[2]) let ret = await this.getData(this.collection_id[2])
if (!ret || ret.retcode !== 0) { if (!ret || ret.retcode !== 0) {
await this.e.reply('暂无素材数据,请稍后再试') await this.e.reply("暂无素材数据,请稍后再试")
logger.error(`米游社接口报错:${ret.message || '未知错误'}}`) logger.error(`米游社接口报错:${ret.message || "未知错误"}}`)
return false return false
} }
@ -180,13 +188,112 @@ export class material extends plugin {
return true return true
} }
async getImgSr(name) {
this.imgPath = `${this.srPath}/${name}.jpg`
let ret = await this.getData(this.srCollection_id[0])
if (!ret || ret.retcode !== 0) {
await this.e.reply("暂无素材数据,请稍后再试")
logger.error(`米游社接口报错:${ret.message || "未知错误"}}`)
return false
}
let url
for (let val of ret.data.posts) {
if (val.post.subject.includes(name)) {
url = val.post.images[2]
break
}
}
if (!url) {
return false
}
logger.mark(`${this.e.logFnc} 下载${name}素材图`)
if (!await common.downFile(url + this.oss, this.imgPath)) {
return false
}
logger.mark(`${this.e.logFnc} 下载${name}素材成功`)
return true
}
async getImgOtherSr(name) {
this.imgPath = `${this.srPathOther}/${name}.jpg`
let ret = await this.getData(this.srCollection_id[1])
if (!ret || ret.retcode !== 0) {
await this.e.reply("暂无素材数据,请稍后再试")
logger.error(`米游社接口报错:${ret.message || "未知错误"}}`)
return false
}
let url;
for (let val of ret.data.posts) {
if (val.post.subject.includes(name)) {
url = val.post.images[0];
break;
}
}
if (!url) {
return false;
}
logger.mark(`${this.e.logFnc} 下载${name}素材图`);
if (!await common.downFile(url + this.oss, this.imgPath)) {
return false;
}
logger.mark(`${this.e.logFnc} 下载${name}素材成功`)
return true
}
async getImgOther2Sr(name) {
this.imgPath = `${this.srPathOther}/${name}.jpg`
let ret = await this.getData(this.srCollection_id[2])
if (!ret || ret.retcode !== 0) {
await this.e.reply("暂无素材数据,请稍后再试")
logger.error(`米游社接口报错:${ret.message || "未知错误"}}`)
return false
}
let url
for (let val of ret.data.posts) {
if (val.post.subject.includes(name)) {
url = val.image_list[0].url
break
}
}
if (!url) {
return false
}
logger.mark(`${this.e.logFnc} 下载${name}素材图`)
if (!await common.downFile(url + this.oss, this.imgPath)) {
return false
}
logger.mark(`${this.e.logFnc} 下载${name}素材成功`)
return true
}
/** 获取数据 */ /** 获取数据 */
async getData (collectionId) { async getData(collectionId) {
let response = await fetch(this.url + collectionId, { method: 'get' }) let response = await fetch(this.url + collectionId, { method: "get" })
if (!response.ok) { if (!response.ok) {
return false return false
} }
const res = await response.json() const res = await response.json()
return res return res
} }
} }