️ 优化

This commit is contained in:
yeyang
2024-04-12 19:38:27 +08:00
parent 432b108e27
commit eca49f2ba4
3 changed files with 102 additions and 102 deletions

View File

@@ -1,7 +1,6 @@
import { funApi, common, memes } from "../model/index.js"
import _ from "lodash"
import { Config } from "../components/index.js"
import { successImgs, faildsImgs } from "../constants/fun.js"
export class ThumbUp extends plugin {
constructor(e) {
@@ -24,67 +23,90 @@ export class ThumbUp extends plugin {
* @param e
*/
async thumbUp(e) {
let _do = "赞"
const DO_ZAN = "赞"
const DO_CHAO = "超"
let doType = DO_ZAN
let userId = e.user_id
let isSelf = true
if (e.msg.includes("超", "操", "草", "抄", "吵", "炒")) {
_do = "超"
// 使用数组和includes方法的正确用法
const forbiddenWords = [ "超", "操", "草", "抄", "吵", "炒" ]
if (forbiddenWords.some(word => e.msg.includes(word))) {
doType = DO_CHAO
}
if (e.at && e.msg.includes("他", "她", "它", "TA", "ta", "Ta")) {
const atWords = [ "他", "她", "它", "TA", "ta", "Ta" ]
if (e.at && atWords.some(word => e.msg.includes(word))) {
userId = e.at
isSelf = false
}
/** 判断是否为好友 */
let isFriend = await (e.bot ?? Bot).fl.get(userId)
let allowLikeByStrangers = Config.whole.Strangers_love
if (!isFriend && !allowLikeByStrangers) { return (e.message?.[0]?.text == "#全部赞我") ? false : e.reply(`不加好友不${_do}🙄`, true) }
if (!isFriend && !allowLikeByStrangers) {
return (e.message?.[0]?.text == "#全部赞我") ? false : e.reply(`不加好友不${doType}🙄`, true)
}
/** 执行点赞 */
let n = 0
let failsMsg = `今天已经${_do}过了,还搁这讨${_do}呢!!!`
let failsMsg = `今天已经${doType}过了,还搁这讨${doType}呢!!!`
let thumbUpApi = new funApi.ThumbUpApi(e) // 复用ThumbUpApi实例
for (let i = 0; i < 10; i++) {
let res = null
try {
res = await new funApi.ThumbUpApi(e).thumbUp(userId, 10)
res = await thumbUpApi.thumbUp(userId, 10)
} catch (error) {
logger.error(error)
return common.handleException(e, error)
}
logger.debug(`${e.logFnc}${userId}点赞`, res)
if (res.code) {
if (res.code == 1) {
failsMsg = `${_do}失败,请检查是否开启陌生人点赞或添加好友`
failsMsg = `${doType}失败,请检查是否开启陌生人点赞或添加好友`
} else {
if (_do == "超") {
failsMsg = res.msg.replace(/点赞/g, "超").replace("给", "超").replace("点", "").replace("个赞", "下")
if (doType == "超") {
failsMsg = generateFailMsg(doType, res.msg)
} else {
failsMsg = res.msg
}
}
break
continue
} else {
n += 10
}
}
let successMsg = `${isSelf ? "你" : userId}${_do}${n}下哦,记得回我~ ${isFriend ? "" : `(如${_do}失败请添加好友)`}`
let successMsg = `${isSelf ? "你" : userId}${doType}${n}下哦,记得回我~ ${isFriend ? "" : `(如${doType}失败请添加好友)`}`
const avatar = `https://q1.qlogo.cn/g?b=qq&s=100&nk=${userId}`
const successFn = _.sample([ "ganyu", "zan" ])
/** 判断点赞是否成功 */
let msg = n > 0
? [
`\n${successMsg}`,
segment.image((await memes[successFn](avatar)) ||
_.sample(successImgs) + userId)
]
: (e.message?.[0]?.text == "#全部赞我")
? []
: [
`\n${failsMsg}`,
segment.image((await memes.crawl(avatar)) ||
_.sample(faildsImgs) + userId)
]
let msg = (e.message?.[0]?.text == "#全部赞我")
? []
: await generateResponseMsg(n > 0, successMsg, failsMsg, avatar, successFn)
/** 回复 */
if (msg.length) { return e.reply(msg, true, { at: userId }) }
}
}
// 工具函数:生成失败消息
function generateFailMsg(doType, originalMsg) {
let failsMsg
if (doType === "超") {
failsMsg = originalMsg.replace(/点赞/g, "超").replace("给", "超").replace("点", "").replace("个赞", "下")
} else {
failsMsg = originalMsg
}
return failsMsg
}
// 工具函数:生成响应消息
async function generateResponseMsg(isSuccess, successMsg, failsMsg, avatar, successFn) {
if (isSuccess) {
const imageSegment = segment.image((await memes[successFn](avatar)))
return [ `\n${successMsg}`, imageSegment ]
} else {
const imageSegment = segment.image((await memes.crawl(avatar)))
return [ `\n${failsMsg}`, imageSegment ]
}
}

View File

@@ -1,21 +1,6 @@
/** 点赞成功回复的图片 */
export const successImgs = [
"https://xiaobai.klizi.cn/API/ce/xin.php?qq=",
"https://xiaobai.klizi.cn/API/ce/zan.php?qq="
]
/** 点赞失败回复的图片 */
export const faildsImgs = [ "https://xiaobai.klizi.cn/API/ce/paa.php?qq=" ]
export const heisiType = {
"白丝": { type: "baisi", page: 17 },
"黑丝": { type: "heisi", page: 43 },
"巨乳": { type: "juru", page: 8 },
"jk": { type: "jk", page: 6 },
"网红": { type: "mcn", page: 36 },
"美足": { type: "meizu", page: 9 }
}
export const xiurenTypeId = {
"秀人": {
id: 117,

View File

@@ -36,6 +36,12 @@ export const qs = (obj) => {
return res.slice(0, res.length - 1)
}
const mergeOptions = (defaultOptions, userOptions) => {
// 优化headers的合并逻辑确保安全性
const headers = { ...defaultOptions.headers, ...userOptions.headers }
return { ...defaultOptions, ...userOptions, headers }
}
export default new class {
/**
* 发送HTTP GET请求并返回响应
@@ -49,38 +55,12 @@ export default new class {
* @param {'buffer'|'json'|'text'|'arrayBuffer'|'formData'|'blob'}[options.statusCode] - 期望的返回数据如果设置了该值则返回响应数据的特定的方法如json()、text()等)
* @param {boolean} [options.origError] 出现错误是否返回原始错误
* @returns {Promise<Response|*>} - HTTP响应或响应数据
* @throws {Error} - 如果请求失败,则抛出错误,将`options.origError`设置为true将返回原始错误
* @throws {Error} - 如果请求失败,则抛出错误,将`options.origError`设置为true则抛出原始错误
*/
async get(url, options = {}) {
// 处理参数
if (options.params) {
url = url + "?" + qs(options.params)
}
logger.debug(`[Yenai-Plugin] GET请求${decodeURI(url)}`)
options.headers = {
"User-Agent": CHROME_UA,
...options.headers
}
if (!options.agent) options.agent = this.getAgent()
try {
let res = await fetch(url, options)
if (!options.closeCheckStatus) {
res = checkStatus(res)
}
if (options.statusCode) {
return res[options.statusCode]()
}
return res
} catch (err) {
if (options.origError) {
throw err
} else {
logger.error(err)
throw new RequestError(
`Get Error${err.message.match(/reason:(.*)/)?.[1] || err.message}`
)
}
}
options = mergeOptions({ method: "GET", url }, options)
options = this._prepareRequest(options)
return this._reques(options)
}
/**
@@ -96,20 +76,16 @@ export default new class {
* @param {'buffer'|'json'|'text'|'arrayBuffer'|'formData'|'blob'} [options.statusCode] - 期望的返回数据如果设置了该值则返回响应数据的特定的方法如json()、text()等)
* @param {boolean} [options.origError] 出现错误是否返回原始错误
* @returns {Promise<Response|*>} - HTTP响应或响应数据
* @throws {Error} - 如果请求失败,则抛出错误,将`options.origError`设置为true将返回原始错误
* @throws {Error} - 如果请求失败,则抛出错误,将`options.origError`设置为true则抛出原始错误
*/
async post(url, options = {}) {
options.method = "POST"
options.headers = {
"User-Agent": CHROME_UA,
"Content-Type": "application/json",
...options.headers
}
if (options.params) {
url = url + "?" + qs(options.params)
}
logger.debug(`[Yenai-Plugin] POST请求${decodeURI(url)}`)
options = mergeOptions({
method: "POST", headers: { "Content-Type": "application/json" }, url
}, options)
options = this._prepareRequest(options)
if (options.data) {
logger.debug("[Yenai-Plugin]POST request params data: ", options.data)
if (/json/.test(options.headers["Content-Type"])) {
options.body = JSON.stringify(options.data)
} else if (
@@ -121,26 +97,7 @@ export default new class {
}
delete options.data
}
if (!options.agent) options.agent = this.getAgent()
try {
let res = await fetch(url, options)
if (!options.closeCheckStatus) {
res = checkStatus(res)
}
if (options.statusCode) {
return res[options.statusCode]()
}
return res
} catch (err) {
if (options.origError) {
throw err
} else {
logger.error(err)
throw new RequestError(
`Get Error${err.message.match(/reason:(.*)/)?.[1] || err.message}`
)
}
}
return this._reques(options)
}
/**
@@ -230,4 +187,40 @@ export default new class {
}).catch(err => logger.error(err))
return segment.image(Request?.body ?? `${Plugin_Path}/resources/img/imgerror.png`, cache, timeout)
}
_prepareRequest(options) {
// 处理参数
if (options.params) {
options.url = `${options.url}?${qs(options.params)}`
}
logger.debug(`[Yenai-Plugin] ${options.method.toUpperCase()}请求:${decodeURI(options.url)}`)
options.headers = {
"User-Agent": options.headers && options.headers["User-Agent"] ? options.headers["User-Agent"] : CHROME_UA,
...options.headers
}
if (options.agent == undefined) options.agent = this.getAgent(options.cf)
return options
}
async _reques(options) {
try {
let res = await fetch(options.url, options)
if (!options.closeCheckStatus) {
res = checkStatus(res)
}
if (options.statusCode) {
return res[options.statusCode]()
}
return res
} catch (err) {
logger.error(err)
if (options.origError) throw err
throw new RequestError(
`${options.method.toUpperCase()} Error${err.message.match(/reason:(.*)/)?.[1] || err.message}`
)
}
}
}()