diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index faf5631..65157f1 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -32,6 +32,8 @@ module.exports = {
"no-eval": [ "error", { allowIndirect: true } ],
"array-bracket-newline": [ "error", { multiline: true } ],
"array-bracket-spacing": [ "error", "always" ],
+ "space-before-function-paren": [ "error", "never" ],
+ "no-invalid-this": "error",
// 插件规则
"jsdoc/require-returns": 0,
"jsdoc/require-jsdoc": 0,
diff --git a/apps/admin.js b/apps/admin.js
index d41c25a..a444a81 100644
--- a/apps/admin.js
+++ b/apps/admin.js
@@ -55,15 +55,13 @@ const NumberCfgType = {
}
/** 支持单独设置的项 */
-const aloneKeys = [
- "群消息", "群临时消息", "群撤回", "群邀请", "群管理变动", "群聊列表变动", "群成员变动", "加群通知", "禁言", "闪照", "匿名", "涩涩", "涩涩pro"
-]
+const aloneKeys = [ "群消息", "群临时消息", "群撤回", "群邀请", "群管理变动", "群聊列表变动", "群成员变动", "加群通知", "禁言", "闪照", "匿名", "涩涩", "涩涩pro" ]
const SwitchCfgReg = new RegExp(`^#椰奶设置(${Object.keys(SwitchCfgType).join("|")})(单独)?(开启|关闭|取消)$`)
const NumberCfgReg = new RegExp(`^#椰奶设置(${Object.keys(NumberCfgType).join("|")})(\\d+)秒?$`)
export class Admin extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶配置",
event: "message",
@@ -90,7 +88,7 @@ export class Admin extends plugin {
}
// 更改配置
- async ConfigSwitch (e) {
+ async ConfigSwitch(e) {
if (!common.checkPermission(e, "master")) return
// 解析消息
let regRet = SwitchCfgReg.exec(e.msg)
@@ -124,7 +122,7 @@ export class Admin extends plugin {
}
// 修改数字设置
- async ConfigNumber (e) {
+ async ConfigNumber(e) {
if (!common.checkPermission(e, "master")) return
let regRet = e.msg.match(NumberCfgReg)
let type = NumberCfgType[regRet[1]]
@@ -134,7 +132,7 @@ export class Admin extends plugin {
}
// 修改全部通知设置
- async SetAllNotice (e) {
+ async SetAllNotice(e) {
if (!common.checkPermission(e, "master")) return
let yes = /启用/.test(e.msg)
for (let i in NoticeCfgType) {
@@ -143,7 +141,7 @@ export class Admin extends plugin {
this.index_Settings(e)
}
- async Settings (e) {
+ async Settings(e) {
if (!common.checkPermission(e, "master")) return
if (/sese|涩涩/.test(e.msg)) {
this.SeSe_Settings(e)
@@ -153,9 +151,9 @@ export class Admin extends plugin {
}
// 渲染发送图片
- async index_Settings (e) {
+ async index_Settings(e) {
let data = {}
- const special = ["deltime", "renderScale"]
+ const special = [ "deltime", "renderScale" ]
let _cfg = Config.getGroup(e.group_id)
for (let key in _cfg) {
if (special.includes(key)) {
@@ -177,7 +175,7 @@ export class Admin extends plugin {
}
// 查看涩涩设置
- async SeSe_Settings (e) {
+ async SeSe_Settings(e) {
let set = setu.getSeSeConfig(e)
let { proxy, pixiv, bika } = Config
let { sese, sesepro } = Config.getGroup(e.group_id)
@@ -207,7 +205,7 @@ export class Admin extends plugin {
}
// 随机底图
-const rodom = async function () {
+const rodom = async function() {
let image = fs.readdirSync("./plugins/yenai-plugin/resources/admin/imgs/bg")
let listImg = []
for (let val of image) {
@@ -217,7 +215,7 @@ const rodom = async function () {
return imgs
}
-const getStatus = function (rote, alone) {
+const getStatus = function(rote, alone) {
let badge = alone != undefined ? "群单独" : ""
if (rote) {
return badge + "
已开启
"
@@ -235,13 +233,13 @@ const getStatus = function (rote, alone) {
* - "X" 形式的比较限制条件,其中 X 是表示限制值的数字。
* @returns {number} 经过验证的数值。如果给定的值超出了限制条件,则返回限制条件对应的最大值或最小值,否则返回原值。
*/
-function checkNumberValue (value, limit) {
+function checkNumberValue(value, limit) {
// 检查是否存在限制条件
if (!limit) {
return value
}
// 解析限制条件
- const [symbol, limitValue] = limit.match(/^([<>])?(.+)$/).slice(1)
+ const [ symbol, limitValue ] = limit.match(/^([<>])?(.+)$/).slice(1)
const parsedLimitValue = parseFloat(limitValue)
// 检查比较限制条件
@@ -251,7 +249,7 @@ function checkNumberValue (value, limit) {
// 检查范围限制条件
if (!isNaN(value)) {
- const [lowerLimit, upperLimit] = limit.split("-").map(parseFloat)
+ const [ lowerLimit, upperLimit ] = limit.split("-").map(parseFloat)
const clampedValue = Math.min(Math.max(value, lowerLimit || -Infinity), upperLimit || Infinity)
return clampedValue
}
diff --git a/apps/assistant.js b/apps/assistant.js
index ac9d924..dda818f 100644
--- a/apps/assistant.js
+++ b/apps/assistant.js
@@ -18,7 +18,7 @@ let GroupListMsgReg = /^#发群列表\s?(\d+(,\d+){0,})\s?([^]*)$/
let friendTypeReg = /^#更改好友申请方式([0123])((.*)\s(.*))?$/
export class Assistant extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶小助手",
event: "message",
@@ -136,7 +136,7 @@ export class Assistant extends plugin {
})
}
- get Bot () {
+ get Bot() {
return this.e.bot ?? Bot
}
@@ -144,7 +144,7 @@ export class Assistant extends plugin {
* 改头像
* @param e
*/
- async SetAvatar (e) {
+ async SetAvatar(e) {
if (!common.checkPermission(e, "master")) return
if (!e.img) {
this.setContext("_avatarContext")
@@ -160,7 +160,7 @@ export class Assistant extends plugin {
})
}
- async _avatarContext () {
+ async _avatarContext() {
let img = this.e.img
if (/取消/.test(this.e.msg)) {
this.finish("_avatarContext")
@@ -186,7 +186,7 @@ export class Assistant extends plugin {
* 改昵称
* @param e
*/
- async SetNickname (e) {
+ async SetNickname(e) {
if (!common.checkPermission(e, "master")) return
let name = e.msg.replace(/#|改昵称/g, "").trim()
@@ -202,7 +202,7 @@ export class Assistant extends plugin {
* 改群名片
* @param e
*/
- async SetGroupCard (e) {
+ async SetGroupCard(e) {
if (!common.checkPermission(e, "master")) return
let group = ""
let card = ""
@@ -237,7 +237,7 @@ export class Assistant extends plugin {
* 改群头像
* @param e
*/
- async SetGroupAvatar (e) {
+ async SetGroupAvatar(e) {
if (e.isPrivate) {
if (!e.isMaster) return logger.mark(`${e.logFnc}不为主人`)
e.group_id = e.msg.replace(/#|改群头像/g, "").trim()
@@ -269,7 +269,7 @@ export class Assistant extends plugin {
})
}
- _GroupAvatarContext (e) {
+ _GroupAvatarContext(e) {
let img = this.e.img
if (/取消/.test(this.e.msg)) {
this.finish("_GroupAvatarContext")
@@ -295,7 +295,7 @@ export class Assistant extends plugin {
* 改群昵称
* @param e
*/
- async SetGroupName (e) {
+ async SetGroupName(e) {
if (!common.checkPermission(e, "admin", "admin")) return
let group = ""
let card = ""
@@ -335,7 +335,7 @@ export class Assistant extends plugin {
* 改签名
* @param e
*/
- async SetSignature (e) {
+ async SetSignature(e) {
if (!common.checkPermission(e, "master")) return
let signs = e.msg.replace(/#|改签名/g, "").trim()
await this.Bot.setSignature(signs)
@@ -350,7 +350,7 @@ export class Assistant extends plugin {
* 改状态
* @param e
*/
- async SetOnlineStatus (e) {
+ async SetOnlineStatus(e) {
if (!common.checkPermission(e, "master")) return
let signs = e.msg.replace(/#|改状态/g, "").trim()
@@ -372,7 +372,7 @@ export class Assistant extends plugin {
* 发好友
* @param e
*/
- async SendFriendMsg (e) {
+ async SendFriendMsg(e) {
if (!common.checkPermission(e, "master")) return
let regRet = FriendsReg.exec(e.msg)
let qq = regRet[1]
@@ -394,7 +394,7 @@ export class Assistant extends plugin {
* 发群聊
* @param e
*/
- async SendGroupMsg (e) {
+ async SendGroupMsg(e) {
if (!common.checkPermission(e, "master")) return
let regRet = GroupMsgReg.exec(e.msg)
@@ -416,7 +416,7 @@ export class Assistant extends plugin {
}
// 发送群列表
- async SendGroupListMsg (e) {
+ async SendGroupListMsg(e) {
if (!common.checkPermission(e, "master")) return
// 获取参数
let regRet = GroupListMsgReg.exec(e.msg)
@@ -470,7 +470,7 @@ export class Assistant extends plugin {
* 退群
* @param e
*/
- async QuitGroup (e) {
+ async QuitGroup(e) {
if (!common.checkPermission(e, "master")) return
let quits = e.msg.replace(/#|退群/g, "").trim()
@@ -497,7 +497,7 @@ export class Assistant extends plugin {
* 删好友
* @param e
*/
- async DeleteFriend (e) {
+ async DeleteFriend(e) {
if (!common.checkPermission(e, "master")) return
let quits = e.msg.replace(/#|删好友/g, "").trim()
@@ -522,7 +522,7 @@ export class Assistant extends plugin {
* 改性别
* @param e
*/
- async SetGender (e) {
+ async SetGender(e) {
if (!common.checkPermission(e, "master")) return
let sex = e.msg.replace(/#|改性别/g, "").trim()
@@ -547,7 +547,7 @@ export class Assistant extends plugin {
* 取直链
* @param e
*/
- async ImageLink (e) {
+ async ImageLink(e) {
let img = []
if (e.source) {
let source
@@ -575,16 +575,16 @@ export class Assistant extends plugin {
// 大于两张图片以转发消息发送
let msg = []
for (let i of img) {
- msg.push([segment.image(i), "直链:", i])
+ msg.push([ segment.image(i), "直链:", i ])
}
common.getforwardMsg(e, msg)
} else {
- await e.reply([segment.image(img[0]), "直链:", img[0]])
+ await e.reply([ segment.image(img[0]), "直链:", img[0] ])
}
return true
}
- async _ImageLinkContext () {
+ async _ImageLinkContext() {
let img = this.e.img
if (this.e.msg === "取消") {
this.finish("_ImageLinkContext")
@@ -604,7 +604,7 @@ export class Assistant extends plugin {
* 取Face表情
* @param e
*/
- async Face (e) {
+ async Face(e) {
let face = []
for (let m of e.message) {
if (m.type === "face") {
@@ -615,7 +615,7 @@ export class Assistant extends plugin {
}
if (face.length === 0) return e.reply("❎ 表情参数不可为空", true)
- let res = face.map(function (item) {
+ let res = face.map(function(item) {
return [
"表情:",
item,
@@ -635,7 +635,7 @@ export class Assistant extends plugin {
* QQ空间 说说列表
* @param e
*/
- async Qzonelist (e) {
+ async Qzonelist(e) {
if (!common.checkPermission(e, "master")) return
let page = e.msg.replace(/#|获?取说说列表/g, "").trim()
if (!page) {
@@ -664,7 +664,7 @@ export class Assistant extends plugin {
* 删除说说
* @param e
*/
- async Qzonedel (e) {
+ async Qzonedel(e) {
if (!common.checkPermission(e, "master")) return
let pos = e.msg.match(/\d+/)
// 获取说说列表
@@ -690,7 +690,7 @@ export class Assistant extends plugin {
* 发说说
* @param e
*/
- async Qzonesay (e) {
+ async Qzonesay(e) {
if (!common.checkPermission(e, "master")) return
let con = e.msg.replace(/#|发说说/g, "").trim()
let result = await new QQApi(e).setQzone(con, e.img)
@@ -698,7 +698,7 @@ export class Assistant extends plugin {
if (result.code != 0) return e.reply(`❎ 说说发表失败\n${JSON.stringify(result)}`)
- let msg = ["✅ 说说发表成功,内容:\n", _.truncate(result.content, { length: 15 })]
+ let msg = [ "✅ 说说发表成功,内容:\n", _.truncate(result.content, { length: 15 }) ]
if (result.pic) {
msg.push(segment.image(result.pic[0].url1))
}
@@ -710,7 +710,7 @@ export class Assistant extends plugin {
* 清空说说和留言
* @param e
*/
- async QzonedelAll (e) {
+ async QzonedelAll(e) {
if (!common.checkPermission(e, "master")) return
if (/清空说说/.test(e.msg)) {
this.setContext("_QzonedelAllContext")
@@ -723,7 +723,7 @@ export class Assistant extends plugin {
}
}
- async _QzonedelAllContext (e) {
+ async _QzonedelAllContext(e) {
let msg = this.e.msg
if (/#?确认清空/.test(msg)) {
this.finish("_QzonedelAllContext")
@@ -748,7 +748,7 @@ export class Assistant extends plugin {
}
// 获取群|好友列表
- async GlOrFl (e) {
+ async GlOrFl(e) {
if (!common.checkPermission(e, "master")) return
let msg = []
if (/群列表/.test(e.msg)) {
@@ -774,7 +774,7 @@ export class Assistant extends plugin {
}
// 引用撤回
- async RecallMsgown (e) {
+ async RecallMsgown(e) {
if (!e.source) return false
let source
if (e.isGroup) {
@@ -819,7 +819,7 @@ export class Assistant extends plugin {
}
// 开关好友添加
- async FriendSwitch (e) {
+ async FriendSwitch(e) {
if (!common.checkPermission(e, "master")) return
let res = await new QQApi(e).addFriendSwitch(/开启/.test(e.msg) ? 1 : 2)
if (!res) return e.reply(API_ERROR)
@@ -827,7 +827,7 @@ export class Assistant extends plugin {
}
// 好友申请方式
- async FriendType (e) {
+ async FriendType(e) {
if (!common.checkPermission(e, "master")) return
let regRet = friendTypeReg.exec(e.msg)
if (regRet[1] == 0) return e.reply("1为允许所有人,2为需要验证,3为问答正确问答(需填问题和答案,格式为:#更改好友申请方式3 问题 答案)")
@@ -844,7 +844,7 @@ export class Assistant extends plugin {
* 开关戳一戳
* @param e
*/
- async Cyc (e) {
+ async Cyc(e) {
if (!common.checkPermission(e, "master")) return
let result = await new QQApi(e).setcyc(/开启/.test(e.msg) ? 0 : 1)
if (!result) return e.reply(API_ERROR)
@@ -853,14 +853,14 @@ export class Assistant extends plugin {
e.reply(`✅ 已${/开启/.test(e.msg) ? "开启" : "关闭"}戳一戳功能`)
}
- async setModel (e) {
+ async setModel(e) {
if (!common.checkPermission(e, "master")) return
let model = e.msg.replace(/#|设置机型/g, "")
let res = await new QQApi(e).setModel(model).catch(err => logger.error(err))
- e.reply(_.get(res, ["13031", "data", "rsp", "iRet"]) == 0 ? "设置成功" : "设置失败")
+ e.reply(_.get(res, [ "13031", "data", "rsp", "iRet" ]) == 0 ? "设置成功" : "设置失败")
}
- async BlockOne (e) {
+ async BlockOne(e) {
if (!common.checkPermission(e, "master")) return
let type = ""
let name = "拉"
@@ -912,7 +912,7 @@ export class Assistant extends plugin {
}
}
- async CancelBlockOne (e) {
+ async CancelBlockOne(e) {
if (!common.checkPermission(e, "master")) return
let type = ""
let name = "取消拉"
diff --git a/apps/bika.js b/apps/bika.js
index 17fd3db..38fd176 100644
--- a/apps/bika.js
+++ b/apps/bika.js
@@ -10,7 +10,7 @@ const Prefix = "(bika|哔咔)"
const searchReg = new RegExp(`^#?${Prefix}(类别|作者|高级)?搜索(.*?)(第(${numReg})页)?$`)
const comicPageReg = new RegExp(`^#?${Prefix}id(.*?)(第(${numReg})页)?(第(${numReg})话)?$`)
export class NewBika extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶哔咔",
event: "message",
@@ -61,7 +61,7 @@ export class NewBika extends plugin {
* 搜索
* @param e
*/
- async search (e) {
+ async search(e) {
if (!await this._Authentication(e)) return
e.reply(Pixiv.startMsg)
let regRet = e.msg.match(searchReg)
@@ -75,7 +75,7 @@ export class NewBika extends plugin {
* 漫画页面
* @param e
*/
- async comicPage (e) {
+ async comicPage(e) {
if (!await this._Authentication(e)) return
e.reply(Pixiv.startMsg)
let regRet = e.msg.match(comicPageReg)
@@ -90,7 +90,7 @@ export class NewBika extends plugin {
* 快速查看
* @param e
*/
- async viewComicPage (e) {
+ async viewComicPage(e) {
if (!await this._Authentication(e)) return
let number = e.msg.match(/\d+/) - 1
await Bika.viewComicPage(number)
@@ -102,7 +102,7 @@ export class NewBika extends plugin {
* 下一页
* @param e
*/
- async nextComicPage (e) {
+ async nextComicPage(e) {
if (!await this._Authentication(e)) return
await Bika.next()
.then(res => common.recallSendForwardMsg(e, res))
@@ -113,7 +113,7 @@ export class NewBika extends plugin {
* 下一话
* @param e
*/
- async nextChapter (e) {
+ async nextChapter(e) {
if (!await this._Authentication(e)) return
await Bika.next("chapter")
.then(res => common.recallSendForwardMsg(e, res))
@@ -124,7 +124,7 @@ export class NewBika extends plugin {
* 类别列表
* @param e
*/
- async categories (e) {
+ async categories(e) {
if (!await this._Authentication(e)) return
e.reply(Pixiv.startMsg)
await Bika.categories()
@@ -136,7 +136,7 @@ export class NewBika extends plugin {
* 漫画细节
* @param e
*/
- async comicDetail (e) {
+ async comicDetail(e) {
if (!await this._Authentication(e)) return
e.reply(Pixiv.startMsg)
let id = e.msg.match(new RegExp(`#?${Prefix}(详情|细节)(.*)`))[3]
@@ -149,7 +149,7 @@ export class NewBika extends plugin {
* 图片质量
* @param e
*/
- async imageQuality (e) {
+ async imageQuality(e) {
let quality = e.msg.match(new RegExp(`#?${Prefix}修改图片质量(.*)`))[2]
let imageQualityType = {
低质量: "low",
@@ -167,7 +167,7 @@ export class NewBika extends plugin {
* 图片直连
* @param e
*/
- async directConnection (e) {
+ async directConnection(e) {
if (!this.e.isMaster) { return true }
let now = Config.bika.bikaDirectConnection
let isSwitch = /开启/.test(e.msg)
@@ -177,7 +177,7 @@ export class NewBika extends plugin {
new Admin().SeSe_Settings(e)
}
- async _Authentication (e) {
+ async _Authentication(e) {
if (!this.e.isMaster) { return true }
if (!common.checkSeSePermission(e, "sesepro")) return false
if (!Config.bika.allowPM && !e.isGroup) {
diff --git a/apps/events/input.js b/apps/events/input.js
index a6d2081..f16ed42 100644
--- a/apps/events/input.js
+++ b/apps/events/input.js
@@ -1,7 +1,7 @@
import { common } from "../../model/index.js"
import { Config } from "../../components/index.js"
-Bot.on?.("internal.input", async (e) => {
+Bot.on?.("internal.input", async(e) => {
if (!Config.whole.input) return false
// 判断是否主人消息
if (Config.masterQQ.includes(e.user_id)) return false
diff --git a/apps/events/message.js b/apps/events/message.js
index 456e282..a3be394 100644
--- a/apps/events/message.js
+++ b/apps/events/message.js
@@ -1,7 +1,7 @@
import { common } from "../../model/index.js"
import { Config } from "../../components/index.js"
-Bot.on?.("message", async (e) => {
+Bot.on?.("message", async(e) => {
// 判断是否存在消息
if (!e?.message?.length) return false
// 判断是否为机器人消息
@@ -178,7 +178,7 @@ Bot.on?.("message", async (e) => {
*
* @param msg
*/
-function getMsgType (msg) {
+function getMsgType(msg) {
const msgType = {
record: {
msg: segment.record(msg[0].url),
diff --git a/apps/events/notice_friend.js b/apps/events/notice_friend.js
index 64b1030..b5ae719 100644
--- a/apps/events/notice_friend.js
+++ b/apps/events/notice_friend.js
@@ -1,7 +1,7 @@
import { common } from "../../model/index.js"
import { Config } from "../../components/index.js"
-Bot.on?.("notice.friend", async (e) => {
+Bot.on?.("notice.friend", async(e) => {
let msg
let forwardMsg
switch (e.sub_type) {
@@ -43,7 +43,7 @@ Bot.on?.("notice.friend", async (e) => {
const msgType = {
flash: {
msg: () => false,
- type: ["[闪照]\n", "撤回闪照:", segment.image(res[0].url)]
+ type: [ "[闪照]\n", "撤回闪照:", segment.image(res[0].url) ]
},
record: {
msg: () => segment.record(res[0].url),
@@ -95,7 +95,7 @@ Bot.on?.("notice.friend", async (e) => {
* 时间转换
* @param time
*/
-function formatDate (time) {
+function formatDate(time) {
let now = new Date(parseFloat(time) * 1000)
// 月
let month = now.getMonth() + 1
diff --git a/apps/events/notice_group.js b/apps/events/notice_group.js
index 7a21b76..327d4b7 100644
--- a/apps/events/notice_group.js
+++ b/apps/events/notice_group.js
@@ -3,7 +3,7 @@ import { Config } from "../../components/index.js"
import moment from "moment"
import formatDuration from "../../tools/formatDuration.js"
-Bot.on?.("notice.group", async (e) => {
+Bot.on?.("notice.group", async(e) => {
let msg
let forwardMsg
switch (e.sub_type) {
diff --git a/apps/events/request.js b/apps/events/request.js
index 379a343..cf3ed9b 100644
--- a/apps/events/request.js
+++ b/apps/events/request.js
@@ -7,7 +7,7 @@ const ROLE_MAP = {
member: "群员"
}
-Bot.on?.("request", async (e) => {
+Bot.on?.("request", async(e) => {
let msg = ""
switch (e.request_type) {
case "group":
@@ -34,8 +34,9 @@ Bot.on?.("request", async (e) => {
break
case "add":
if (Config.groupAdd.openGroup.includes(e.group_id)) {
- let msg = [`${Config.groupAdd.msg}\n`,
- segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
+ let msg = [
+`${Config.groupAdd.msg}\n`,
+segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
`QQ号:${e.user_id}\n`,
`昵称:${e.nickname}\n`,
`${e.comment}`
diff --git a/apps/fun.js b/apps/fun.js
index f758fbc..b4d07dc 100644
--- a/apps/fun.js
+++ b/apps/fun.js
@@ -17,7 +17,7 @@ _.forIn(picApis, (values, key) => {
})
export class Fun extends plugin {
- constructor (e) {
+ constructor(e) {
super({
name: "椰奶娱乐",
event: "message",
@@ -63,7 +63,7 @@ export class Fun extends plugin {
* 随机唱鸭
* @param e
*/
- async Sing (e) {
+ async Sing(e) {
let data = await funApi.randomSinging()
if (data.error) return e.reply(data.error)
await e.reply(await uploadRecord(data.audioUrl, 0, false))
@@ -74,7 +74,7 @@ export class Fun extends plugin {
* 支付宝语音
* @param e
*/
- async ZFB (e) {
+ async ZFB(e) {
let amount = parseFloat(e.msg.replace(/#|支付宝到账|元|圆/g, "").trim())
if (!/^\d+(\.\d{1,2})?$/.test(amount)) return e.reply("你觉得这河里吗!!", true)
@@ -89,7 +89,7 @@ export class Fun extends plugin {
* 有道翻译
* @param e
*/
- async youdao (e) {
+ async youdao(e) {
const msg = e.msg.match(/#(([\u4e00-\u9fa5]{2,6})-)?([\u4e00-\u9fa5]{2,6})?翻译(.*)/)
// 如果是在群聊中回复,则获取上一条消息作为翻译内容
if (e.source) {
@@ -106,7 +106,7 @@ export class Fun extends plugin {
}
// github
- async GH (e) {
+ async GH(e) {
const api = "https://opengraph.githubassets.com"
let reg = /github.com\/[a-zA-Z0-9-]{1,39}\/[a-zA-Z0-9_-]{1,100}(?:\/(?:pull|issues)\/\d+)?/
@@ -123,7 +123,7 @@ export class Fun extends plugin {
}
// coser
- async coser (e) {
+ async coser(e) {
if (!common.checkSeSePermission(e)) return false
e.reply(START_EXECUTION)
@@ -133,7 +133,7 @@ export class Fun extends plugin {
}
// cos/acg搜索
- async acg (e) {
+ async acg(e) {
if (!common.checkSeSePermission(e)) return false
e.reply(START_EXECUTION)
const reg = new RegExp(`^#(${Object.keys(pandadiuType).join("|")})?acg(.*)$`)
@@ -144,7 +144,7 @@ export class Fun extends plugin {
}
// 黑丝
- async heisiwu (e) {
+ async heisiwu(e) {
if (!common.checkSeSePermission(e, "sesepro")) return false
e.reply(START_EXECUTION)
@@ -156,7 +156,7 @@ export class Fun extends plugin {
}
// 萌堆
- async mengdui (e) {
+ async mengdui(e) {
if (!common.checkSeSePermission(e, "sesepro")) return false
// 开始执行
e.reply(START_EXECUTION)
@@ -166,7 +166,7 @@ export class Fun extends plugin {
.catch(err => common.handleException(e, err))
}
- async xiuren (e) {
+ async xiuren(e) {
if (!common.checkSeSePermission(e, "pro")) return false
// 开始执行
e.reply(START_EXECUTION)
@@ -176,7 +176,7 @@ export class Fun extends plugin {
}
// 查看头像
- async LookAvatar () {
+ async LookAvatar() {
const id = this.e.msg.replace(/^#?((查?看头像)|取头像)/, "").trim() || this.e.at ||
this.e.message.find(item => item.type == "at")?.qq || this.e.user_id
try {
diff --git a/apps/groupAdmin/groupAdmin.js b/apps/groupAdmin/groupAdmin.js
index 0ae7a70..cfa0d6f 100644
--- a/apps/groupAdmin/groupAdmin.js
+++ b/apps/groupAdmin/groupAdmin.js
@@ -16,7 +16,7 @@ const noactivereg = new RegExp(`^#(查看|清理|确认清理|获取)(${Numreg})
// 获取定时任务
const redisTask = await Ga.getRedisMuteTask() || false
export class GroupAdmin extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶群管",
event: "message.group",
@@ -155,7 +155,7 @@ export class GroupAdmin extends plugin {
this.task = redisTask
}
- get Bot () {
+ get Bot() {
return this.e.bot ?? Bot
}
@@ -163,7 +163,7 @@ export class GroupAdmin extends plugin {
* 禁言
* @param e
*/
- async muteMember (e) {
+ async muteMember(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
let qq = e.message.find(item => item.type == "at")?.qq
let reg = `#禁言\\s?((\\d+)\\s${qq ? "" : "?"})?(${Numreg})?(${TimeUnitReg})?`
@@ -179,7 +179,7 @@ export class GroupAdmin extends plugin {
* 解禁
* @param e
*/
- async noMuteMember (e) {
+ async noMuteMember(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
let qq = e.message.find(item => item.type == "at")?.qq
let regRet = e.msg.match(/#解禁(\d+)/)
@@ -193,7 +193,7 @@ export class GroupAdmin extends plugin {
* 全体禁言
* @param e
*/
- async muteAll (e) {
+ async muteAll(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
let type = /全(体|员)禁言/.test(e.msg)
let res = await e.group.muteAll(type)
@@ -202,7 +202,7 @@ export class GroupAdmin extends plugin {
}
// 踢群员
- async kickMember (e) {
+ async kickMember(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
let qq = e.message.find(item => item.type == "at")?.qq
if (!qq) qq = e.msg.replace(/#|踢/g, "").trim()
@@ -212,7 +212,7 @@ export class GroupAdmin extends plugin {
}
// 设置管理
- async SetAdmin (e) {
+ async SetAdmin(e) {
if (!common.checkPermission(e, "master", "owner")) return
let qq = e.message.find(item => item.type == "at")?.qq
let type = /设置管理/.test(e.msg)
@@ -230,7 +230,7 @@ export class GroupAdmin extends plugin {
}
// 发群公告
- async AddAnnounce (e) {
+ async AddAnnounce(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
// 获取发送的内容
let msg = e.msg.replace(/#|发群公告/g, "").trim()
@@ -245,14 +245,14 @@ export class GroupAdmin extends plugin {
}
// 查群公告
- async GetAnnounce (e) {
+ async GetAnnounce(e) {
let res = await new QQApi(e).getAnnouncelist(e.group_id)
if (!res) return e.reply(API_ERROR)
return e.reply(res)
}
// 删群公告
- async DelAnnounce (e) {
+ async DelAnnounce(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
let msg = e.msg.replace(/#|删群公告/, "").trim()
if (!msg) return e.reply("❎ 序号不可为空")
@@ -268,7 +268,7 @@ export class GroupAdmin extends plugin {
}
// 修改头衔
- async adminsetTitle (e) {
+ async adminsetTitle(e) {
if (!common.checkPermission(e, "master", "owner")) return
let qq = e.message.find(item => item.type == "at")?.qq
if (!qq) return e.reply("请艾特要修改的人哦~")
@@ -284,7 +284,7 @@ export class GroupAdmin extends plugin {
}
// 申请头衔
- async SetGroupSpecialTitle (e) {
+ async SetGroupSpecialTitle(e) {
if (!common.checkPermission(e, "all", "owner")) return
let Title = e.msg.replace(/#|申请头衔/g, "")
// 屏蔽词处理
@@ -308,7 +308,7 @@ export class GroupAdmin extends plugin {
}
// 字符列表
- async qun_luckylist (e) {
+ async qun_luckylist(e) {
let data = await new QQApi(e).luckylist(e.group_id)
if (!data) return e.reply(API_ERROR)
if (data.retcode != 0) return e.reply("❎ 获取数据失败\n" + JSON.stringify(data))
@@ -321,7 +321,7 @@ export class GroupAdmin extends plugin {
}
// 抽幸运字符
- async qun_lucky (e) {
+ async qun_lucky(e) {
let res = await new QQApi(e).drawLucky(e.group_id)
if (!res) return e.reply(API_ERROR)
@@ -337,7 +337,7 @@ export class GroupAdmin extends plugin {
}
// 替换幸运字符
- async qun_luckyuse (e) {
+ async qun_luckyuse(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
let id = e.msg.replace(/#|替换(幸运)?字符/g, "")
let res = await new QQApi(e).equipLucky(e.group_id, id)
@@ -348,7 +348,7 @@ export class GroupAdmin extends plugin {
}
// 开启或关闭群字符
- async qun_luckyset (e) {
+ async qun_luckyset(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
let res = await new QQApi(e).swichLucky(e.group_id, /开启/.test(e.msg))
@@ -360,7 +360,7 @@ export class GroupAdmin extends plugin {
}
// 获取禁言列表
- async Mutelist (e) {
+ async Mutelist(e) {
new Ga(e).getMuteList(e.group_id, true)
.then(res => common.getforwardMsg(e, res, {
isxml: true,
@@ -370,7 +370,7 @@ export class GroupAdmin extends plugin {
}
// 解除全部禁言
- async relieveAllMute (e) {
+ async relieveAllMute(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
new Ga(e).releaseAllMute()
.then(() => e.reply("✅ 已将全部禁言解除"))
@@ -378,7 +378,7 @@ export class GroupAdmin extends plugin {
}
// 查看和清理多久没发言的人
- async noactive (e) {
+ async noactive(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
let regRet = noactivereg.exec(e.msg)
@@ -422,7 +422,7 @@ export class GroupAdmin extends plugin {
}
// 查看和清理从未发言的人
- async neverspeak (e) {
+ async neverspeak(e) {
if (!common.checkPermission(e, "admin", "admin")) { return true }
let list = null
try {
@@ -457,7 +457,7 @@ export class GroupAdmin extends plugin {
}
// 查看不活跃排行榜和入群记录
- async RankingList (e) {
+ async RankingList(e) {
let num = e.msg.match(new RegExp(Numreg))
num = num ? translateChinaNum(num[0]) : 10
let msg = ""
@@ -470,7 +470,7 @@ export class GroupAdmin extends plugin {
}
// 发送通知
- async Send_notice (e) {
+ async Send_notice(e) {
if (!common.checkPermission(e, "admin", "admin")) return
e.message[0].text = e.message[0].text.replace("#发通知", "").trim()
@@ -481,7 +481,7 @@ export class GroupAdmin extends plugin {
}
// 设置定时群禁言
- async timeMute (e) {
+ async timeMute(e) {
if (!common.checkPermission(e, "admin", "admin")) return
let type = /禁言/.test(e.msg)
if (/任务/.test(e.msg)) {
@@ -514,7 +514,7 @@ export class GroupAdmin extends plugin {
}
// 谁是龙王
- async dragonKing (e) {
+ async dragonKing(e) {
// 浏览器截图
let screenshot = await puppeteer.Webpage({
url: `https://qun.qq.com/interactive/honorlist?gc=${e.group_id}&type=1&_wv=3&_wwv=129`,
@@ -536,7 +536,7 @@ export class GroupAdmin extends plugin {
* 群星级
* @param e
*/
- async Group_xj (e) {
+ async Group_xj(e) {
let screenshot = await puppeteer.Webpage({
url: `https://qqweb.qq.com/m/business/qunlevel/index.html?gc=${e.group_id}&from=0&_wv=1027`,
cookie: common.getck("qun.qq.com", this.Bot, true),
@@ -559,7 +559,7 @@ export class GroupAdmin extends plugin {
}
// 群发言榜单
- async SpeakRank (e) {
+ async SpeakRank(e) {
if (!common.checkPermission(e, "all", "admin")) return
// 图片截图
@@ -580,7 +580,7 @@ export class GroupAdmin extends plugin {
}
// 今日打卡
- async DaySigned (e) {
+ async DaySigned(e) {
// 浏览器截图
let screenshot = await puppeteer.Webpage({
url: `https://qun.qq.com/v2/signin/list?gc=${e.group_id}`,
@@ -602,7 +602,7 @@ export class GroupAdmin extends plugin {
}
// 查看某天谁生日
- async groupBirthday (e) {
+ 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")
@@ -626,7 +626,7 @@ export class GroupAdmin extends plugin {
}
// 群数据
- async groupData (e) {
+ async groupData(e) {
if (!common.checkPermission(e, "all", "admin")) return
// 浏览器截图
@@ -674,7 +674,7 @@ export class GroupAdmin extends plugin {
* 开启或关闭加群通知
* @param e
*/
- async handleGroupAdd (e) {
+ async handleGroupAdd(e) {
if (!common.checkPermission(e, "admin", "admin")) return
let type = /开启/.test(e.msg) ? "add" : "del"
let isopen = Config.groupAdd.openGroup.includes(e.group_id)
@@ -688,7 +688,7 @@ export class GroupAdmin extends plugin {
* 加精
* @param e
*/
- async essenceMessage (e) {
+ async essenceMessage(e) {
if (!common.checkPermission(e, "admin", "admin")) return
if (!e.source) return e.reply("请对要加精的消息进行引用")
let source = (await e.group.getChatHistory(e.source.seq, 1)).pop()
@@ -705,7 +705,7 @@ export class GroupAdmin extends plugin {
/**
* 加白名单
*/
- async whiteQQ () {
+ async whiteQQ() {
if (!common.checkPermission(this.e, "master")) return
let type = /加/.test(this.e.msg) ? "add" : "del"
@@ -724,7 +724,7 @@ export class GroupAdmin extends plugin {
this.reply(`✅ 已${type === "add" ? "加入" : "删除"}${qq}到群管白名单`)
}
- async noBan () {
+ async noBan() {
if (!common.checkPermission(this.e, "master")) return
let type = !!/开启/.test(this.e.msg)
diff --git a/apps/groupAdmin/groupBannedWords.js b/apps/groupAdmin/groupBannedWords.js
index 95c1eff..cb1e1f5 100644
--- a/apps/groupAdmin/groupBannedWords.js
+++ b/apps/groupAdmin/groupBannedWords.js
@@ -3,7 +3,7 @@ import { Config } from "../../components/index.js"
import _ from "lodash"
export class NewGroupBannedWords extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶群违禁词",
event: "message.group",
@@ -47,7 +47,7 @@ export class NewGroupBannedWords extends plugin {
})
}
- async monitor (e) {
+ async monitor(e) {
const isWhite = Config.groupAdmin.whiteQQ.includes(e.user_id)
if (!e.message || e.isMaster || e.member?.is_owner || e.member?.is_admin || isWhite) {
return false
@@ -62,7 +62,7 @@ export class NewGroupBannedWords extends plugin {
.trim()
const trimmedKeyWord = this.#trimAlias(KeyWord)
let data = null
- for (const [k, v] of groupBannedWords) {
+ for (const [ k, v ] of groupBannedWords) {
if (k.test(trimmedKeyWord)) {
data = v
break
@@ -109,7 +109,7 @@ export class NewGroupBannedWords extends plugin {
* 禁言
* @param time
*/
- #mute (time) {
+ #mute(time) {
const e = this.e
e.member.mute(time)
}
@@ -118,11 +118,11 @@ export class NewGroupBannedWords extends plugin {
* 过滤别名
* @param msg
*/
- #trimAlias (msg) {
+ #trimAlias(msg) {
let groupCfg = this.e.runtime.cfg.getGroup(this.group_id)
let alias = groupCfg.botAlias
if (!Array.isArray(alias)) {
- alias = [alias]
+ alias = [ alias ]
}
for (let name of alias) {
if (msg.startsWith(name)) {
@@ -133,7 +133,7 @@ export class NewGroupBannedWords extends plugin {
return msg
}
- async add (e) {
+ async add(e) {
if (!common.checkPermission(e, "admin", "admin")) return false
let word = this.#trimAlias(e.toString())
word = word.match(/^#?新增(模糊|精确|正则)?(踢|禁|撤|踢撤|禁撤)?违禁词(.*)$/)
@@ -162,20 +162,20 @@ export class NewGroupBannedWords extends plugin {
}
}
- async del (e) {
+ async del(e) {
if (!common.checkPermission(e, "admin", "admin")) return false
let word = this.#trimAlias(e.toString())
word = word.replace(/#?删除违禁词/, "").trim()
if (!word) return e.reply("需要删除的屏蔽词为空")
try {
let msg = await GroupBannedWords.delBannedWords(e.group_id, word)
- e.reply(["✅ 成功删除:", msg])
+ e.reply([ "✅ 成功删除:", msg ])
} catch (error) {
common.handleException(e, error)
}
}
- async query (e) {
+ async query(e) {
let word = this.#trimAlias(e.toString())
word = word.replace(/#?查看违禁词/, "").trim()
if (!word) return e.reply("需要查询的屏蔽词为空")
@@ -195,13 +195,13 @@ export class NewGroupBannedWords extends plugin {
}
}
- async list (e) {
+ async list(e) {
const groupBannedWords = GroupBannedWords.initTextArr(e.group_id)
if (_.isEmpty(groupBannedWords)) {
return e.reply("❎ 没有违禁词")
}
const msg = []
- for (const [, v] of groupBannedWords) {
+ for (const [ , v ] of groupBannedWords) {
const { matchType, penaltyType, addedBy, date, rawItem } = v
msg.push([
"违禁词:",
@@ -215,7 +215,7 @@ export class NewGroupBannedWords extends plugin {
common.getforwardMsg(e, msg)
}
- async muteTime (e) {
+ async muteTime(e) {
if (!common.checkPermission(e, "admin", "admin")) return false
let time = e.msg.match(/\d+/)[0]
GroupBannedWords.setMuteTime(e.group_id, time)
@@ -223,7 +223,7 @@ export class NewGroupBannedWords extends plugin {
}
// 增删查头衔屏蔽词
- async ProhibitedTitle (e) {
+ async ProhibitedTitle(e) {
// 获取现有的头衔屏蔽词
let shieldingWords = GroupBannedWords.getTitleBannedWords(e.group_id)
// 判断是否需要查看头衔屏蔽词
@@ -277,7 +277,7 @@ export class NewGroupBannedWords extends plugin {
}
// 修改头衔匹配模式
- async ProhibitedTitlePattern (e) {
+ async ProhibitedTitlePattern(e) {
if (!common.checkPermission(e, "admin", "admin")) return false
let res = GroupBannedWords.setTitleFilterModeChange(e.group_id)
e.reply(`✅ 已修改匹配模式为${res ? "精确" : "模糊"}匹配`)
diff --git a/apps/groupAdmin/groupVerify.js b/apps/groupAdmin/groupVerify.js
index 7c7e01f..f4c38e8 100644
--- a/apps/groupAdmin/groupVerify.js
+++ b/apps/groupAdmin/groupVerify.js
@@ -4,9 +4,9 @@ import _ from "lodash"
import { sleep } from "../../tools/index.js"
// 全局
let temp = {}
-const ops = ["+", "-"]
+const ops = [ "+", "-" ]
export class NewGroupVerify extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶入群验证",
dsc: "重新验证和绕过验证",
@@ -39,7 +39,7 @@ export class NewGroupVerify extends plugin {
}
// 重新验证
- async cmdReverify (e) {
+ async cmdReverify(e) {
if (!common.checkPermission(e, "admin", "admin")) return
if (!this.verifycfg.openGroup.includes(e.group_id)) return e.reply("当前群未开启验证哦~", true)
@@ -61,7 +61,7 @@ export class NewGroupVerify extends plugin {
}
// 绕过验证
- async cmdPass (e) {
+ async cmdPass(e) {
if (!common.checkPermission(e, "admin", "admin")) return
if (!this.verifycfg.openGroup.includes(e.group_id)) return e.reply("当前群未开启验证哦~", true)
@@ -84,7 +84,7 @@ export class NewGroupVerify extends plugin {
return await e.reply(this.verifycfg.SuccessMsgs[e.group_id] || this.verifycfg.SuccessMsgs[0] || "✅ 验证成功,欢迎入群")
}
- async cmdReverifyNeverSpeak (e) {
+ async cmdReverifyNeverSpeak(e) {
let list = null
try {
list = await new Ga(e).getNeverSpeak(e.group_id)
@@ -98,7 +98,7 @@ export class NewGroupVerify extends plugin {
}
// 开启验证
- async handelverify (e) {
+ async handelverify(e) {
if (!common.checkPermission(e, "admin", "admin")) return
let type = /开启/.test(e.msg) ? "add" : "del"
let isopen = this.verifycfg.openGroup.includes(e.group_id)
@@ -109,7 +109,7 @@ export class NewGroupVerify extends plugin {
}
// 切换验证模式
- async setmode (e) {
+ async setmode(e) {
if (!common.checkPermission(e, "master")) return
let value = this.verifycfg.mode == "模糊" ? "精确" : "模糊"
Config.modify("groupverify", "mode", value)
@@ -117,7 +117,7 @@ export class NewGroupVerify extends plugin {
}
// 设置验证超时时间
- async setovertime (e) {
+ async setovertime(e) {
if (!common.checkPermission(e, "master")) return
let overtime = e.msg.match(/\d+/g)
Config.modify("groupverify", "time", Number(overtime))
@@ -129,7 +129,7 @@ export class NewGroupVerify extends plugin {
}
// 进群监听
-Bot.on?.("notice.group.increase", async (e) => {
+Bot.on?.("notice.group.increase", async(e) => {
logger.mark(`[Yenai-Plugin][进群验证]收到${e.user_id}的进群事件`)
let { openGroup, DelayTime } = Config.groupverify
@@ -144,7 +144,7 @@ Bot.on?.("notice.group.increase", async (e) => {
})
// 答案监听
-Bot.on?.("message.group", async (e) => {
+Bot.on?.("message.group", async(e) => {
let { openGroup, mode, SuccessMsgs } = Config.groupverify
if (!openGroup.includes(e.group_id)) return
@@ -177,18 +177,18 @@ Bot.on?.("message.group", async (e) => {
await e.recall()
const msg = `\n❎ 验证失败\n你还有「${remainTimes}」次机会\n请发送「${nums[0]} ${operator} ${nums[1]}」的运算结果`
- return await e.reply([segment.at(e.user_id), msg])
+ return await e.reply([ segment.at(e.user_id), msg ])
}
clearTimeout(kickTimer)
clearTimeout(remindTimer)
- await e.reply([segment.at(e.user_id), "\n验证失败,请重新申请"])
+ await e.reply([ segment.at(e.user_id), "\n验证失败,请重新申请" ])
delete temp[e.user_id + e.group_id]
return await e.group.kickMember(e.user_id)
}
})
// 主动退群
-Bot.on?.("notice.group.decrease", async (e) => {
+Bot.on?.("notice.group.decrease", async(e) => {
if (!e.group.is_admin && !e.group.is_owner) return
if (!temp[e.user_id + e.group_id]) return
@@ -209,7 +209,7 @@ Bot.on?.("notice.group.decrease", async (e) => {
* @param group_id
* @param e
*/
-async function verify (user_id, group_id, e) {
+async function verify(user_id, group_id, e) {
if (!e.group.is_admin && !e.group.is_owner) return
user_id = Number(user_id)
group_id = Number(group_id)
@@ -218,17 +218,17 @@ async function verify (user_id, group_id, e) {
const { times, range, time, remindAtLastMinute } = Config.groupverify
const operator = ops[_.random(0, 1)]
- let [m, n] = [_.random(range.min, range.max), _.random(range.min, range.max)]
+ let [ m, n ] = [ _.random(range.min, range.max), _.random(range.min, range.max) ]
while (m == n) {
n = Math.floor(Math.random() * (range.max - range.min + 1)) + range.min
}
- [m, n] = [m >= n ? m : n, m >= n ? n : m]
+ [ m, n ] = [ m >= n ? m : n, m >= n ? n : m ]
const verifyCode = String(operator === "-" ? m - n : m + n)
logger.mark(`[Yenai-Plugin][进群验证]答案:${verifyCode}`)
- const kickTimer = setTimeout(async () => {
- e.reply([segment.at(user_id), "\n验证超时,移出群聊,请重新申请"])
+ const kickTimer = setTimeout(async() => {
+ e.reply([ segment.at(user_id), "\n验证超时,移出群聊,请重新申请" ])
delete temp[user_id + group_id]
@@ -239,11 +239,11 @@ async function verify (user_id, group_id, e) {
const shouldRemind = remindAtLastMinute && time >= 120
- const remindTimer = setTimeout(async () => {
+ const remindTimer = setTimeout(async() => {
if (shouldRemind && temp[user_id + group_id].remindTimer) {
const msg = ` \n验证仅剩最后一分钟\n请发送「${m} ${operator} ${n}」的运算结果\n否则将会被移出群聊`
- await e.reply([segment.at(user_id), msg])
+ await e.reply([ segment.at(user_id), msg ])
}
clearTimeout(remindTimer)
}, Math.abs(time * 1000 - 60000))
@@ -251,10 +251,10 @@ async function verify (user_id, group_id, e) {
const msg = ` 欢迎!\n请在「${time}」秒内发送\n「${m} ${operator} ${n}」的运算结果\n否则将会被移出群聊`
// 消息发送成功才写入
- if (await e.reply([segment.at(user_id), msg])) {
+ if (await e.reply([ segment.at(user_id), msg ])) {
temp[user_id + group_id] = {
remainTimes: times,
- nums: [m, n],
+ nums: [ m, n ],
operator,
verifyCode,
kickTimer,
diff --git a/apps/groupAdmin/privateGroupAdmin.js b/apps/groupAdmin/privateGroupAdmin.js
index fc3c3a9..47c95d1 100644
--- a/apps/groupAdmin/privateGroupAdmin.js
+++ b/apps/groupAdmin/privateGroupAdmin.js
@@ -6,11 +6,11 @@ const Numreg = "[一壹二两三四五六七八九十百千万亿\\d]+"
const TimeUnitReg = Object.keys(Time_unit).join("|")
const muteMemberReg = new RegExp(`^#禁言\\s?(\\d+)\\s(\\d+)\\s(${Numreg})?(${TimeUnitReg})?$`)
export class PrivateGroupAdmin extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶私聊群管",
- event: "message",
- priority: 2000,
+ event: "message.private",
+ priority: 500,
rule: [
{
reg: muteMemberReg,
@@ -18,7 +18,7 @@ export class PrivateGroupAdmin extends plugin {
},
{
reg: "^#解禁\\s?(\\d+)\\s(\\d+)$",
- fnc: "nomuteMember"
+ fnc: "noMuteMember"
},
{
reg: "^#全体(禁言|解禁)(\\d+)$",
@@ -32,33 +32,40 @@ export class PrivateGroupAdmin extends plugin {
})
}
- async muteMember (e) {
- if (!common.checkPermission(e, "master")) return
+ async muteMember(e) {
let regRet = e.msg.match(muteMemberReg)
+ let groupObj = e.bot.pickGroup(Number(regRet[1]))
+ if (!common.checkPermission(e, "master", "admin", { groupObj })) return
const time = translateChinaNum(regRet[3])
- let res = await new Ga(e).muteMember(regRet[1], regRet[2], e.user_id, time, regRet[4])
- e.reply(res)
+ await new Ga(e).muteMember(regRet[1], regRet[2], e.user_id, time, regRet[4])
+ .then(res => e.reply(res))
+ .catch(err => common.handleException(e, err))
}
- async noMuteMember (e) {
- if (!common.checkPermission(e, "master")) return
+ async noMuteMember(e) {
let regRet = e.msg.match(/^#解禁\s?(\d+)\s(\d+)$/)
- let res = await new Ga(e).muteMember(regRet[1], regRet[2], e.user_id, 0)
- e.reply(res)
+ let groupObj = e.bot.pickGroup(Number(regRet[1]))
+ if (!common.checkPermission(e, "master", "admin", { groupObj })) return
+
+ await new Ga(e).muteMember(regRet[1], regRet[2], e.user_id, 0)
+ .then(res => e.reply(res))
+ .catch(err => common.handleException(e, err))
}
- async muteAll (e) {
- if (!common.checkPermission(e, "master")) return
+ async muteAll(e) {
let regRet = e.msg.match(/全体(禁言|解禁)(\d+)/)
- let group = (e.bot ?? Bot).pickGroup(Number(regRet[2]))
- group.muteAll(regRet[1] == "禁言")
- e.reply(`✅ 已将群「${group.name}(${group.group_id})」${regRet[1] == "禁言" ? "开启" : "解除"}全体禁言`)
+ let groupObj = (e.bot ?? Bot).pickGroup(Number(regRet[2]))
+ if (!common.checkPermission(e, "master", "admin", { groupObj })) return
+
+ groupObj.muteAll(regRet[1] == "禁言")
+ e.reply(`✅ 已将群「${groupObj.name}(${groupObj.group_id})」${regRet[1] == "禁言" ? "开启" : "解除"}全体禁言`)
}
- async kickMember (e) {
- if (!common.checkPermission(e, "master")) return
+ async kickMember(e) {
let regRet = e.msg.match(/#踢\s?(\d+)\s(\d+)$/)
- let res = await Ga.kickMember(regRet[1], regRet[2], e.user_id)
+ let groupObj = (e.bot ?? Bot).pickGroup(Number(regRet[1]))
+ if (!common.checkPermission(e, "master", "admin", { groupObj })) return
+ let res = await new Ga(e).kickMember(regRet[1], regRet[2], e.user_id)
e.reply(res)
}
}
diff --git a/apps/groupAdmin/voteBan.js b/apps/groupAdmin/voteBan.js
index a8bad96..f15abea 100644
--- a/apps/groupAdmin/voteBan.js
+++ b/apps/groupAdmin/voteBan.js
@@ -10,7 +10,7 @@ let Vote = {}
let time = 180 // 投票超时时间 单位秒
export class NewGroupVerify extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶投票禁言",
dsc: "投票禁言某人",
@@ -29,7 +29,7 @@ export class NewGroupVerify extends plugin {
})
}
- async Initiate (e) {
+ async Initiate(e) {
if (!common.checkPermission(e, "all", "admin")) return
let targetQQ = e.at || (e.msg.match(/\d+/)?.[0] || "")
targetQQ = Number(targetQQ) || String(targetQQ)
@@ -67,7 +67,7 @@ export class NewGroupVerify extends plugin {
"规则:支持票大于反对票且参与人高于3人即可成功禁言"
])
if (!res) return false
- setTimeout(async () => {
+ setTimeout(async() => {
// 处理结果
if (!Vote[key]) return
const { supportCount, opposeCount } = Vote[key]
@@ -81,7 +81,7 @@ export class NewGroupVerify extends plugin {
delete Vote[key]
return e.reply(msg, true)
}, time * 1000)
- setTimeout(async () => {
+ setTimeout(async() => {
const { supportCount, opposeCount } = Vote[key]
const msg = [
segment.at(targetQQ),
@@ -97,7 +97,7 @@ export class NewGroupVerify extends plugin {
}, time * 1000 - 60000)
}
- async Follow (e) {
+ async Follow(e) {
if (!common.checkPermission(e, "all", "admin")) return
let targetQQ = e.at || (e.msg.match(/\d+/)?.[0] || "")
targetQQ = Number(targetQQ) || String(targetQQ)
diff --git a/apps/handle.js b/apps/handle.js
index 8da3378..fdf79df 100644
--- a/apps/handle.js
+++ b/apps/handle.js
@@ -10,7 +10,7 @@ const ROLE_MAP = {
member: "群员"
}
export class NewHandle extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶申请处理",
event: "message",
@@ -55,7 +55,7 @@ export class NewHandle extends plugin {
* 同意拒绝好友申请
* @param e
*/
- async PrivateAdd (e) {
+ async PrivateAdd(e) {
if (!e.isMaster) return false
let yes = !!/同意/.test(e.msg)
@@ -98,11 +98,9 @@ export class NewHandle extends plugin {
}
await sleep(2000)
}
- let msg = [
- `本次共${yes ? "同意" : "拒绝"}${FriendAdd.length}条好友申请\n成功:${success.length}\n失败:${fail.length}`
- ]
- if (!_.isEmpty(success)) msg.push(["以下为成功的名单:\n", success.join("\n")])
- if (!_.isEmpty(fail)) msg.push(["以下为失败的名单:\n", fail.join("\n")])
+ let msg = [ `本次共${yes ? "同意" : "拒绝"}${FriendAdd.length}条好友申请\n成功:${success.length}\n失败:${fail.length}` ]
+ if (!_.isEmpty(success)) msg.push([ "以下为成功的名单:\n", success.join("\n") ])
+ if (!_.isEmpty(fail)) msg.push([ "以下为失败的名单:\n", fail.join("\n") ])
return common.getforwardMsg(e, msg)
} else {
@@ -126,7 +124,7 @@ export class NewHandle extends plugin {
* 引用同意好友申请和群邀请
* @param e
*/
- async Handle (e) {
+ async Handle(e) {
if (!e.source) return false
if (e.source.user_id != (e.bot ?? Bot).uin) return false
let yes = !!/同意/.test(e.msg)
@@ -206,7 +204,7 @@ export class NewHandle extends plugin {
}
// 回复好友消息
- async Replys (e) {
+ async Replys(e) {
if (!e.isMaster) return false
let qq = ""
let group = ""
@@ -262,7 +260,7 @@ export class NewHandle extends plugin {
}
// 加群员为好友
- async addFriend (e) {
+ async addFriend(e) {
if (!e.isMaster) return false
if (!e.source) return false
let source = (await e.friend.getChatHistory(e.source.time, 1)).pop()
@@ -280,7 +278,7 @@ export class NewHandle extends plugin {
}
// 入群请求
- async GroupAdd (e) {
+ async GroupAdd(e) {
let SystemMsg = (await (e.bot ?? Bot).getSystemMsg())
.filter(item => item.request_type == "group" && item.sub_type == "add" && item.group_id == e.group_id)
if (_.isEmpty(SystemMsg)) return e.reply("暂无加群申请(。-ω-)zzz", true)
@@ -320,12 +318,10 @@ export class NewHandle extends plugin {
}
await sleep(1000)
}
- let msg = [
- `本次共处理${SystemMsg.length}条群申请\n成功:${success.length}\n失败:${fail.length}\n风险:${risk.length}`
- ]
- if (!_.isEmpty(success)) msg.push(["以下为成功的名单:\n", success.join("\n")])
- if (!_.isEmpty(fail)) msg.push(["以下为失败的名单:\n", fail.join("\n")])
- if (!_.isEmpty(risk)) msg.push(["以下为风险账号名单:\n", risk.join("\n")])
+ let msg = [ `本次共处理${SystemMsg.length}条群申请\n成功:${success.length}\n失败:${fail.length}\n风险:${risk.length}` ]
+ if (!_.isEmpty(success)) msg.push([ "以下为成功的名单:\n", success.join("\n") ])
+ if (!_.isEmpty(fail)) msg.push([ "以下为失败的名单:\n", fail.join("\n") ])
+ if (!_.isEmpty(risk)) msg.push([ "以下为风险账号名单:\n", risk.join("\n") ])
common.getforwardMsg(e, msg)
} else {
let qq = e.msg.replace(/#(同意|拒绝)(加|入)群申请/g, "").trim()
@@ -347,7 +343,7 @@ export class NewHandle extends plugin {
}
// 群邀请列表
- async GroupInvite (e) {
+ async GroupInvite(e) {
if (!e.isMaster) return false
let SystemMsg = (await (e.bot ?? Bot).getSystemMsg()).filter(item => item.request_type == "group" && item.sub_type == "invite")
if (_.isEmpty(SystemMsg)) return e.reply("暂无群邀请哦(。-ω-)zzz", true)
@@ -381,9 +377,9 @@ export class NewHandle extends plugin {
}
await sleep(1000)
}
- let msg = [`本次共处理${SystemMsg.length}条群邀请\n成功:${success.length}\n失败:${fail.length}`]
- if (!_.isEmpty(success)) msg.push(["以下为成功的名单:\n", success.join("\n")])
- if (!_.isEmpty(fail)) msg.push(["以下为失败的名单:\n", fail.join("\n")])
+ let msg = [ `本次共处理${SystemMsg.length}条群邀请\n成功:${success.length}\n失败:${fail.length}` ]
+ if (!_.isEmpty(success)) msg.push([ "以下为成功的名单:\n", success.join("\n") ])
+ if (!_.isEmpty(fail)) msg.push([ "以下为失败的名单:\n", fail.join("\n") ])
common.getforwardMsg(e, msg)
} else {
let groupid = e.msg.replace(/#(同意|拒绝)群邀请/g, "").trim()
@@ -403,7 +399,7 @@ export class NewHandle extends plugin {
}
// 全部请求
- async SystemMsgAll (e) {
+ async SystemMsgAll(e) {
if (!e.isMaster) return false
let SystemMsg = await (e.bot ?? Bot).getSystemMsg()
let FriendAdd = []; let onewayFriend = []; let GroupAdd = []; let GroupInvite = []
diff --git a/apps/help.js b/apps/help.js
index faeb991..1d3f072 100644
--- a/apps/help.js
+++ b/apps/help.js
@@ -11,7 +11,7 @@ const helpReg = new RegExp(
`^#?椰奶(插件)?(${Object.keys(helpType).join("|")})?(帮助|菜单|功能)$`
)
export class YenaiHelp extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶帮助",
event: "message",
@@ -25,7 +25,7 @@ export class YenaiHelp extends plugin {
})
}
- async message () {
+ async message() {
return await help(this.e)
}
}
@@ -34,7 +34,7 @@ export class YenaiHelp extends plugin {
*
* @param e
*/
-async function help (e) {
+async function help(e) {
let custom = {}
// let help = {}
const special = e.msg.match(helpReg)[2]
@@ -86,7 +86,7 @@ async function help (e) {
})
}
-const rodom = async function () {
+const rodom = async function() {
let image = fs.readdirSync("./plugins/yenai-plugin/resources/help/imgs/")
let list_img = []
for (let val of image) {
diff --git a/apps/nga.js b/apps/nga.js
index f83f60d..5a14917 100644
--- a/apps/nga.js
+++ b/apps/nga.js
@@ -10,7 +10,7 @@ try {
} catch (err) {}
export class NGA extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶NGA",
dsc: "收益曲线",
@@ -29,11 +29,11 @@ export class NGA extends plugin {
}
// 初始化
- async initFolder (type) {
+ async initFolder(type) {
Data.createDir(`data/${type == "收益曲线" ? "incomeCurve" : "referencPanel"}`)
}
- async NGA () {
+ async NGA() {
let role = {}
let regRet = this.e.msg.match("^#?(更新)?(.*)(收益曲线|参考面板)(帮助)?$")
if (regRet[4]) {
@@ -47,8 +47,8 @@ export class NGA extends plugin {
let type = regRet[3]
/** 主角特殊处理 */
- if (["10000005", "10000007", "20000000"].includes(String(role.roleId))) {
- if (!["风主", "岩主", "雷主", "草主"].includes(role.alias)) {
+ if ([ "10000005", "10000007", "20000000" ].includes(String(role.roleId))) {
+ if (![ "风主", "岩主", "雷主", "草主" ].includes(role.alias)) {
await this.e.reply(`请选择:风主${type}、岩主${type}、雷主${type}、草主${type}`)
return
} else {
@@ -98,7 +98,7 @@ export class NGA extends plugin {
}
// 下载图片
- async getImg (name, Path) {
+ async getImg(name, Path) {
logger.mark(`${this.e.logFnc} 下载${name}素材图`)
if (!await common.downFile(name, Path)) {
diff --git a/apps/picSearch.js b/apps/picSearch.js
index 19efd51..89e2cdc 100644
--- a/apps/picSearch.js
+++ b/apps/picSearch.js
@@ -2,7 +2,7 @@ import { PicSearch, common } from "../model/index.js"
import { Config } from "../components/index.js"
import _ from "lodash"
export class NewPicSearch extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶图片搜索",
event: "message",
@@ -33,7 +33,7 @@ export class NewPicSearch extends plugin {
})
}
- async SauceNAO (e) {
+ async SauceNAO(e) {
if (!await this._Authentication(e)) return
if (!await this.handelImg(e, "SauceNAO")) return
await PicSearch.SauceNAO(e.img[0])
@@ -50,15 +50,15 @@ export class NewPicSearch extends plugin {
})
}
- async Ascii2D (e) {
+ async Ascii2D(e) {
if (!await this._Authentication(e)) return
if (!await this.handelImg(e, "Ascii2D")) return
await PicSearch.Ascii2D(e.img[0])
- .then(res => common.recallSendForwardMsg(e, [...res.color, ...res.bovw], { xmlTitle: false }))
+ .then(res => common.recallSendForwardMsg(e, [ ...res.color, ...res.bovw ], { xmlTitle: false }))
.catch(err => common.handleException(e, err))
}
- async WhatAnime (e) {
+ async WhatAnime(e) {
if (!await this._Authentication(e)) return
if (!await this.handelImg(e, "WhatAnime")) return
await PicSearch.WhatAnime(e.img[0].replace("/c2cpicdw.qpic.cn/offpic_new/", "/gchat.qpic.cn/gchatpic_new/"))
@@ -71,7 +71,7 @@ export class NewPicSearch extends plugin {
.catch(err => common.handleException(e, err))
}
- async UploadSauceNAOKey (e) {
+ async UploadSauceNAOKey(e) {
if (!this.e.isMaster) { return true }
if (e.isGroup) return e.reply("请私聊进行添加")
let apiKey = e.msg.replace(/#设置SauceNAOapiKey/i, "").trim()
@@ -80,7 +80,7 @@ export class NewPicSearch extends plugin {
e.reply("OK")
}
- async _Authentication (e) {
+ async _Authentication(e) {
if (!this.e.isMaster) { return true }
const { allowPM, limit, isMasterUse } = Config.picSearch
if (isMasterUse) {
@@ -98,7 +98,7 @@ export class NewPicSearch extends plugin {
return true
}
- async handelImg (e, funName) {
+ async handelImg(e, funName) {
if (e.source) {
let source
if (e.isGroup) {
@@ -106,7 +106,7 @@ export class NewPicSearch extends plugin {
} else {
source = (await e.friend.getChatHistory(e.source.time, 1)).pop()
}
- e.img = [source.message.find(item => item.type == "image")?.url]
+ e.img = [ source.message.find(item => item.type == "image")?.url ]
}
if (!_.isEmpty(e.img)) return true
e.sourceFunName = funName
@@ -115,7 +115,7 @@ export class NewPicSearch extends plugin {
return false
}
- async MonitorImg () {
+ async MonitorImg() {
if (!this.e.img) {
this.e.reply("❎ 未检测到图片操作已取消")
} else {
diff --git a/apps/pixiv.js b/apps/pixiv.js
index d9d8986..7c24018 100644
--- a/apps/pixiv.js
+++ b/apps/pixiv.js
@@ -18,7 +18,7 @@ const searchUser = new RegExp(`^#?user搜索(.*?)(第(${numReg})页)?$`, "i")
const randomImgReg = new RegExp(`^#?来(${numReg})?张(好(康|看)(的|哒)|hkd|涩图)$|^#有内鬼$`)
export class NewPixiv extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶pixiv",
event: "message",
@@ -84,7 +84,7 @@ export class NewPixiv extends plugin {
}
// pid搜图
- async searchPid (e) {
+ async searchPid(e) {
if (!await this._Authentication(e, "sese")) return
e.reply(Pixiv.startMsg)
let regRet = pidReg.exec(e.msg)
@@ -98,7 +98,7 @@ export class NewPixiv extends plugin {
}
// p站排行榜
- async pixivRank (e) {
+ async pixivRank(e) {
let regRet = rankingrReg.exec(e.msg)
if (!await this._Authentication(e, "sese")) return
if ((regRet[4] && !setu.getR18(e.group_id)) && !e.isMaster) {
@@ -117,7 +117,7 @@ export class NewPixiv extends plugin {
* 关键词搜图
* @param e
*/
- async searchTags (e) {
+ async searchTags(e) {
let regRet = tagReg.exec(e.msg)
if (!await this._Authentication(e, "sese")) return
if (regRet[1] && !await this._Authentication(e, "sesepro")) return
@@ -134,7 +134,7 @@ export class NewPixiv extends plugin {
* 获取热门tag
* @param e
*/
- async popularTags (e) {
+ async popularTags(e) {
if (!await this._Authentication(e, "sese")) return
e.reply(Pixiv.startMsg)
await Pixiv.PopularTags()
@@ -146,7 +146,7 @@ export class NewPixiv extends plugin {
* 以uid搜图
* @param e
*/
- async searchUid (e) {
+ async searchUid(e) {
if (!await this._Authentication(e, "sese")) return
e.reply(Pixiv.startMsg)
@@ -160,7 +160,7 @@ export class NewPixiv extends plugin {
}
// 随机原创插画
- async vilipixRandomImg (e) {
+ async vilipixRandomImg(e) {
if (!await this._Authentication(e, "sese")) return
e.reply(Pixiv.startMsg)
let regRet = randomImgReg.exec(e.msg)
@@ -177,7 +177,7 @@ export class NewPixiv extends plugin {
}
// 相关作品
- async relatedIllust (e) {
+ async relatedIllust(e) {
if (!await this._Authentication(e, "sese")) return
e.reply(Pixiv.startMsg)
@@ -189,13 +189,13 @@ export class NewPixiv extends plugin {
}
// p站单图
- async pximg (e) {
+ async pximg(e) {
let ispro = /pro/.test(e.msg)
if (!await this._Authentication(e, "sese")) return
if (ispro && !await this._Authentication(e, "sesepro", false)) return
await Pixiv.pximg(ispro)
- .then(res => ispro ? common.recallSendForwardMsg(e, [res]) : common.recallsendMsg(e, res, false))
+ .then(res => ispro ? common.recallSendForwardMsg(e, [ res ]) : common.recallsendMsg(e, res, false))
.catch(err => common.handleException(e, err))
}
@@ -203,7 +203,7 @@ export class NewPixiv extends plugin {
* 搜索用户
* @param e
*/
- async searchUser (e) {
+ async searchUser(e) {
if (!await this._Authentication(e, "sese")) return
e.reply(Pixiv.startMsg)
@@ -218,7 +218,7 @@ export class NewPixiv extends plugin {
* 推荐作品
* @param e
*/
- async illustRecommended (e) {
+ async illustRecommended(e) {
if (!await this._Authentication(e, "sese")) return
e.reply(Pixiv.startMsg)
let num = e.msg.match(/\d+/) || 1
@@ -229,7 +229,7 @@ export class NewPixiv extends plugin {
}
// 更换代理
- async setProxy (e) {
+ async setProxy(e) {
if (/查看/.test(e.msg)) return e.reply(await redis.get("yenai:proxy"))
let proxy = e.msg.replace(/#|(p站|pixiv)更换代理/g, "").trim()
if (new RegExp(`^[1-${ImageRPSS.length}]$`).test(proxy)) {
@@ -247,7 +247,7 @@ export class NewPixiv extends plugin {
* 图片直连
* @param e
*/
- async directConnection (e) {
+ async directConnection(e) {
let isSwitch = /开启/.test(e.msg)
Config.modify("pixiv", "pixivDirectConnection", isSwitch)
new Admin().SeSe_Settings(e)
@@ -257,13 +257,13 @@ export class NewPixiv extends plugin {
* 登录信息
* @param e
*/
- async loginInfo (e) {
+ async loginInfo(e) {
await Pixiv.loginInfo()
.then(res => e.reply(res))
.catch(err => common.handleException(e, err))
}
- async _Authentication (e, type = "sese", limit = true) {
+ async _Authentication(e, type = "sese", limit = true) {
if (e.isMaster) return true
if (!Config.pixiv.allowPM && !e.isGroup) {
e.reply("主人已禁用私聊该功能")
diff --git a/apps/search.js b/apps/search.js
index afab6a2..c69be61 100644
--- a/apps/search.js
+++ b/apps/search.js
@@ -6,7 +6,7 @@ import common from "../lib/common/common.js"
const searchReg = new RegExp(`^#?(${_.keys(SEARCH_MAP).join("|")})搜索(.*)`)
export class NewSearch extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶搜索",
event: "message",
@@ -33,29 +33,29 @@ export class NewSearch extends plugin {
})
}
- async help (e) {
+ async help(e) {
const searchs = Object.keys(SEARCH_MAP)
const menu = "当前支持的搜索引擎:\n"
const tip = "\n格式:<搜索引擎> + 搜索 + <关键词>\n比如:萌娘百科搜索可莉"
return e.reply(menu + searchs.join("、") + tip)
}
- async search (e) {
+ async search(e) {
let regRet = searchReg.exec(e.msg)
if (/(lp|ip)|(i|p|l)(地址|查询)/ig.test(regRet[2])) return e.reply("(;`O´)o警告!!触发屏蔽词!!!", true)
let url = SEARCH_MAP[regRet[1]] + encodeURIComponent(regRet[2])
- e.reply([await puppeteer.Webpage({ url }), url])
+ e.reply([ await puppeteer.Webpage({ url }), url ])
}
- async bggSearch (e) {
+ async bggSearch(e) {
let keyword = e.msg.replace(/#?桌游搜索/, "")
funApi.bgg(keyword)
.then(res => e.reply(res))
.catch(err => common.handleException(e, err))
}
- async bggRank (e) {
+ async bggRank(e) {
let url = "https://boardgamegeek.com/browse/boardgame"
- e.reply([await puppeteer.Webpage({ url }), "目前BGG桌游排行榜如图,访问链接:" + url])
+ e.reply([ await puppeteer.Webpage({ url }), "目前BGG桌游排行榜如图,访问链接:" + url ])
}
}
diff --git a/apps/setu.js b/apps/setu.js
index 1c28365..99992d2 100644
--- a/apps/setu.js
+++ b/apps/setu.js
@@ -7,7 +7,7 @@ import translateChinaNum from "../tools/translateChinaNum.js"
const NumReg = "[零一壹二两三四五六七八九十百千万亿\\d]+"
export class SeSe extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶setu",
event: "message",
@@ -41,7 +41,7 @@ export class SeSe extends plugin {
})
}
- async setuRandom (e) {
+ async setuRandom(e) {
if (!await this._Authentication(e)) return
const cdTime = setu.getRemainingCd(e.user_id, e.group_id)
@@ -65,7 +65,7 @@ export class SeSe extends plugin {
}
// tag搜图
- async setuTag (e) {
+ async setuTag(e) {
if (!await this._Authentication(e)) return
let cdTime = setu.getRemainingCd(e.user_id, e.group_id)
@@ -97,7 +97,7 @@ export class SeSe extends plugin {
.catch(err => common.handleException(e, err))
}
- async _Authentication (e) {
+ async _Authentication(e) {
if (e.isMaster) return true
const { allowPM, limit } = Config.setu
if (!allowPM && !e.isGroup) {
@@ -113,7 +113,7 @@ export class SeSe extends plugin {
}
// 设置群撤回间隔和cd
- async setGroupRecallAndCD (e) {
+ async setGroupRecallAndCD(e) {
let num = e.msg.match(new RegExp(NumReg))
num = translateChinaNum(num[0])
let type = /撤回间隔/.test(e.msg)
@@ -122,14 +122,14 @@ export class SeSe extends plugin {
}
// 开启r18
- async setSeSe (e) {
+ async setSeSe(e) {
let isopen = !!/开启/.test(e.msg)
setu.setR18(e.group_id, isopen)
new Admin().SeSe_Settings(e)
}
// 指令设置
- async setCd (e) {
+ async setCd(e) {
let reg = `^#?设置cd\\s?((\\d+)\\s)?(${NumReg})(s|秒)?$`
let regRet = e.msg.match(new RegExp(reg))
let qq = e.message.find(item => item.type == "at")?.qq ?? regRet[2]
diff --git a/apps/state.js b/apps/state.js
index 80682d8..92a45b8 100644
--- a/apps/state.js
+++ b/apps/state.js
@@ -6,7 +6,7 @@ import Monitor from "../model/State/Monitor.js"
let interval = false
export class NewState extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶状态",
event: "message",
@@ -24,7 +24,7 @@ export class NewState extends plugin {
})
}
- async monitor (e) {
+ async monitor(e) {
await puppeteer.render("state/monitor", {
chartData: JSON.stringify(Monitor.chartData)
}, {
@@ -33,7 +33,7 @@ export class NewState extends plugin {
})
}
- async state (e) {
+ async state(e) {
if (!/椰奶/.test(e.msg) && !Config.whole.state) return false
if (!si) return e.reply("❎ 没有检测到systeminformation依赖,请运行:\"pnpm add systeminformation -w\"进行安装")
diff --git a/apps/thumbUp.js b/apps/thumbUp.js
index db035e5..c611b3c 100644
--- a/apps/thumbUp.js
+++ b/apps/thumbUp.js
@@ -4,7 +4,7 @@ import { Config } from "../components/index.js"
import { successImgs, faildsImgs } from "../constants/fun.js"
export class ThumbUp extends plugin {
- constructor (e) {
+ constructor(e) {
super({
name: "椰奶点赞",
event: "message",
@@ -23,7 +23,7 @@ export class ThumbUp extends plugin {
* 点赞
* @param e
*/
- async thumbUp (e) {
+ async thumbUp(e) {
let _do = "赞"
let userId = e.user_id
let isSelf = true
diff --git a/apps/update.js b/apps/update.js
index 11e3284..3f823b6 100644
--- a/apps/update.js
+++ b/apps/update.js
@@ -1,6 +1,6 @@
import { update as Update } from "../../other/update.js"
export class YenaiUpdate extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶更新插件",
event: "message",
@@ -14,7 +14,7 @@ export class YenaiUpdate extends plugin {
})
}
- async update (e = this.e) {
+ async update(e = this.e) {
e.msg = `#${e.msg.includes("强制") ? "强制" : ""}更新yenai-plugin`
const up = new Update(e)
up.e = e
diff --git a/apps/version.js b/apps/version.js
index 3541d9c..026fed8 100644
--- a/apps/version.js
+++ b/apps/version.js
@@ -3,7 +3,7 @@ import { update } from "../../other/update.js"
import { Version, Plugin_Name } from "../components/index.js"
import { puppeteer } from "../model/index.js"
export class NewVersion extends plugin {
- constructor () {
+ constructor() {
super({
name: "椰奶版本信息",
event: "message",
@@ -22,11 +22,11 @@ export class NewVersion extends plugin {
this.key = "yenai:restart"
}
- async plugin_version () {
+ async plugin_version() {
return versionInfo(this.e)
}
- async update_log () {
+ async update_log() {
// eslint-disable-next-line new-cap
let Update_Plugin = new update()
Update_Plugin.e = this.e
@@ -43,7 +43,7 @@ export class NewVersion extends plugin {
*
* @param e
*/
-async function versionInfo (e) {
+async function versionInfo(e) {
return await puppeteer.render(
"help/version-info",
{
diff --git a/components/Config.js b/components/Config.js
index 6f6f28f..c66f1d4 100644
--- a/components/Config.js
+++ b/components/Config.js
@@ -11,7 +11,7 @@ const Path = process.cwd()
const Plugin_Name = "yenai-plugin"
const Plugin_Path = `${Path}/plugins/${Plugin_Name}`
class Config {
- constructor () {
+ constructor() {
this.config = {}
/** 监听文件 */
@@ -21,7 +21,7 @@ class Config {
}
/** 初始化配置 */
- initCfg () {
+ initCfg() {
let path = `${Plugin_Path}/config/config/`
let pathDef = `${Plugin_Path}/config/default_config/`
const files = fs.readdirSync(pathDef).filter(file => file.endsWith(".yaml"))
@@ -37,7 +37,7 @@ class Config {
* 群配置
* @param groupId
*/
- getGroup (groupId = "") {
+ getGroup(groupId = "") {
let config = this.getConfig("whole")
let group = this.getConfig("group")
let defCfg = this.getdefSet("whole")
@@ -49,61 +49,61 @@ class Config {
}
/** 主人QQ */
- get masterQQ () {
+ get masterQQ() {
return cfg.masterQQ
}
/** 获取全局设置 */
- get whole () {
+ get whole() {
return this.getDefOrConfig("whole")
}
/** 进群验证配置 */
- get groupverify () {
+ get groupverify() {
return this.getDefOrConfig("groupverify")
}
/** 头衔屏蔽词 */
- get groupTitle () {
+ get groupTitle() {
return this.getDefOrConfig("groupTitle")
}
/** 加群通知 */
- get groupAdd () {
+ get groupAdd() {
return this.getDefOrConfig("groupAdd")
}
/** 代理 */
- get proxy () {
+ get proxy() {
return this.getDefOrConfig("proxy")
}
/** pixiv */
- get pixiv () {
+ get pixiv() {
return this.getDefOrConfig("pixiv")
}
/** 哔咔 */
- get bika () {
+ get bika() {
return this.getDefOrConfig("bika")
}
/** 搜图 */
- get picSearch () {
+ get picSearch() {
return this.getDefOrConfig("picSearch")
}
/** setu */
- get setu () {
+ get setu() {
return this.getDefOrConfig("setu")
}
/** 状态 */
- get state () {
+ get state() {
return this.getDefOrConfig("state")
}
- get groupAdmin () {
+ get groupAdmin() {
return this.getDefOrConfig("groupAdmin")
}
@@ -111,7 +111,7 @@ class Config {
* 默认配置和用户配置
* @param name
*/
- getDefOrConfig (name) {
+ getDefOrConfig(name) {
let def = this.getdefSet(name)
let config = this.getConfig(name)
return { ...def, ...config }
@@ -121,7 +121,7 @@ class Config {
* 默认配置
* @param name
*/
- getdefSet (name) {
+ getdefSet(name) {
return this.getYaml("default_config", name)
}
@@ -129,7 +129,7 @@ class Config {
* 用户配置
* @param name
*/
- getConfig (name) {
+ getConfig(name) {
return this.getYaml("config", name)
}
@@ -138,7 +138,7 @@ class Config {
* @param type 默认跑配置-defSet,用户配置-config
* @param name 名称
*/
- getYaml (type, name) {
+ getYaml(type, name) {
let file = `${Plugin_Path}/config/${type}/${name}.yaml`
let key = `${type}.${name}`
@@ -159,7 +159,7 @@ class Config {
* @param name
* @param type
*/
- watch (file, name, type = "default_config") {
+ watch(file, name, type = "default_config") {
let key = `${type}.${name}`
if (this.watcher[key]) return
@@ -184,7 +184,7 @@ class Config {
* @param {string | number} value 修改的value值
* @param {'config'|'default_config'} type 配置文件或默认
*/
- modify (name, key, value, type = "config") {
+ modify(name, key, value, type = "config") {
let path = `${Plugin_Path}/config/${type}/${name}.yaml`
new YamlReader(path).set(key, value)
delete this.config[`${type}.${name}`]
@@ -197,7 +197,7 @@ class Config {
* @param {unknown} value
* @param isDel
*/
- aloneModify (groupId, key, value, isDel) {
+ aloneModify(groupId, key, value, isDel) {
let path = `${Plugin_Path}/config/config/group.yaml`
let yaml = new YamlReader(path)
let groupCfg = yaml.jsonData[groupId] ?? {}
@@ -214,7 +214,7 @@ class Config {
* @param {'add'|'del'} category 类别 add or del
* @param {'config'|'default_config'} type 配置文件或默认
*/
- modifyarr (name, key, value, category = "add", type = "config") {
+ modifyarr(name, key, value, category = "add", type = "config") {
let path = `${Plugin_Path}/config/${type}/${name}.yaml`
let yaml = new YamlReader(path)
if (category == "add") {
@@ -225,7 +225,7 @@ class Config {
}
}
- async change_picApi () {
+ async change_picApi() {
let tmp = {}
logger.debug("[Yenai-Plugin]api接口修改,重载fun.js")
@@ -243,7 +243,7 @@ class Config {
})
}
- async change_pixiv () {
+ async change_pixiv() {
let pixiv = (await import("../model/index.js")).Pixiv
let PixivApi = (await import("../model/Pixiv/api.js")).default
pixiv.PixivClient = new PixivApi(this.pixiv.refresh_token)
diff --git a/components/Data.js b/components/Data.js
index 97c9367..d627c8d 100644
--- a/components/Data.js
+++ b/components/Data.js
@@ -18,7 +18,7 @@ let Data = {
/*
* 根据指定的path依次检查与创建目录
* */
- createDir (path = "", root = "", includeFile = false) {
+ createDir(path = "", root = "", includeFile = false) {
root = getRoot(root)
let pathList = path.split("/")
let nowPath = root
@@ -40,7 +40,7 @@ let Data = {
* @param file
* @param root
*/
- readJSON (file = "", root = "") {
+ readJSON(file = "", root = "") {
root = getRoot(root)
if (fs.existsSync(`${root}/${file}`)) {
try {
@@ -59,7 +59,7 @@ let Data = {
* @param root
* @param space
*/
- writeJSON (file, data, root = "", space = "\t") {
+ writeJSON(file, data, root = "", space = "\t") {
// 检查并创建目录
Data.createDir(file, root, true)
root = getRoot(root)
@@ -73,7 +73,7 @@ let Data = {
}
},
- async getCacheJSON (key) {
+ async getCacheJSON(key) {
try {
let txt = await redis.get(key)
if (txt) {
@@ -85,11 +85,11 @@ let Data = {
return {}
},
- async setCacheJSON (key, data, EX = 3600 * 24 * 90) {
+ async setCacheJSON(key, data, EX = 3600 * 24 * 90) {
await redis.set(key, JSON.stringify(data), { EX })
},
- async importModule (file, root = "") {
+ async importModule(file, root = "") {
root = getRoot(root)
if (!/\.js$/.test(file)) {
file = file + ".js"
@@ -105,16 +105,16 @@ let Data = {
return {}
},
- async importDefault (file, root) {
+ async importDefault(file, root) {
let ret = await Data.importModule(file, root)
return ret.default || {}
},
- async import (name) {
+ async import(name) {
return await Data.importModule(`components/optional-lib/${name}.js`)
},
- async importCfg (key) {
+ async importCfg(key) {
let sysCfg = await Data.importModule(`config/system/${key}_system.js`)
let diyCfg = await Data.importModule(`config/${key}.js`)
if (diyCfg.isSys) {
@@ -139,7 +139,7 @@ let Data = {
*
* */
- getData (target, keyList = "", cfg = {}) {
+ getData(target, keyList = "", cfg = {}) {
target = target || {}
let defaultData = cfg.defaultData || {}
let ret = {}
@@ -166,12 +166,12 @@ let Data = {
return ret
},
- getVal (target, keyFrom, defaultValue) {
+ getVal(target, keyFrom, defaultValue) {
return _.get(target, keyFrom, defaultValue)
},
// 异步池,聚合请求
- async asyncPool (poolLimit, array, iteratorFn) {
+ async asyncPool(poolLimit, array, iteratorFn) {
const ret = [] // 存储所有的异步任务
const executing = [] // 存储正在执行的异步任务
for (const item of array) {
@@ -195,12 +195,12 @@ let Data = {
},
// sleep
- sleep (ms) {
+ sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms))
},
// 获取默认值
- def () {
+ def() {
for (let idx in arguments) {
if (!_.isUndefined(arguments[idx])) {
return arguments[idx]
@@ -214,7 +214,7 @@ let Data = {
arr = arr.replace(/\s*(;|;|、|,)\s*/, ",")
arr = arr.split(",")
} else if (_.isNumber(arr)) {
- arr = [arr.toString()]
+ arr = [ arr.toString() ]
}
_.forEach(arr, (str, idx) => {
if (!_.isUndefined(str)) {
@@ -223,7 +223,7 @@ let Data = {
})
},
- regRet (reg, txt, idx) {
+ regRet(reg, txt, idx) {
if (reg && txt) {
let ret = reg.exec(txt)
if (ret && ret[idx]) {
@@ -238,7 +238,7 @@ let Data = {
* @param extension
* @param excludeDir
*/
- readDirRecursive (directory, extension, excludeDir) {
+ readDirRecursive(directory, extension, excludeDir) {
let files = fs.readdirSync(directory)
let jsFiles = files.filter(file => path.extname(file) === `.${extension}`)
diff --git a/components/Version.js b/components/Version.js
index b4363ef..6ee4ee9 100644
--- a/components/Version.js
+++ b/components/Version.js
@@ -11,7 +11,7 @@ let changelogs = []
let currentVersion
let versionCount = 2
-const getLine = function (line) {
+const getLine = function(line) {
line = line.replace(/(^\s*\*|\r)/g, "")
line = line.replace(/\s*`([^`]+`)/g, "$1")
line = line.replace(/`\s*/g, "")
@@ -97,16 +97,16 @@ if (yunzaiName == "miao-yunzai") {
yunzaiName = _.capitalize(yunzaiName)
}
let Version = {
- get ver () {
+ get ver() {
return currentVersion
},
- get name () {
+ get name() {
return yunzaiName
},
- get yunzai () {
+ get yunzai() {
return yunzai_ver
},
- get logs () {
+ get logs() {
return changelogs
}
}
diff --git a/components/YamlReader.js b/components/YamlReader.js
index 4433ec9..65b1317 100644
--- a/components/YamlReader.js
+++ b/components/YamlReader.js
@@ -10,13 +10,13 @@ export default class YamlReader {
* @param yamlPath yaml文件绝对路径
* @param isWatch 是否监听文件变化
*/
- constructor (yamlPath, isWatch = false) {
+ constructor(yamlPath, isWatch = false) {
this.yamlPath = yamlPath
this.isWatch = isWatch
this.initYaml()
}
- initYaml () {
+ initYaml() {
// parseDocument 将会保留注释
this.document = YAML.parseDocument(fs.readFileSync(this.yamlPath, "utf8"))
if (this.isWatch && !this.watcher) {
@@ -31,7 +31,7 @@ export default class YamlReader {
}
/** 返回读取的对象 */
- get jsonData () {
+ get jsonData() {
if (!this.document) {
return null
}
@@ -39,42 +39,42 @@ export default class YamlReader {
}
/* 检查集合是否包含key的值 */
- has (keyPath) {
+ has(keyPath) {
return this.document.hasIn(keyPath.split("."))
}
/* 返回key的值 */
- get (keyPath) {
+ get(keyPath) {
return _.get(this.jsonData, keyPath)
}
/* 修改某个key的值 */
- set (keyPath, value) {
- this.document.setIn([keyPath], value)
+ set(keyPath, value) {
+ this.document.setIn([ keyPath ], value)
this.save()
}
/* 删除key */
- delete (keyPath) {
+ delete(keyPath) {
this.document.deleteIn(keyPath.split("."))
this.save()
}
// 数组添加数据
- addIn (keyPath, value) {
+ addIn(keyPath, value) {
this.document.addIn(keyPath.split("."), value)
this.save()
}
// 彻底删除某个key
- deleteKey (keyPath) {
+ deleteKey(keyPath) {
let keys = keyPath.split(".")
keys = this.mapParentKeys(keys)
this.document.deleteIn(keys)
this.save()
}
- save () {
+ save() {
this.isSave = true
let yaml = this.document.toString()
fs.writeFileSync(this.yamlPath, yaml, "utf8")
diff --git a/config/system/gpAdmin_system.js b/config/system/gpAdmin_system.js
index 9cd6e3c..655fa73 100644
--- a/config/system/gpAdmin_system.js
+++ b/config/system/gpAdmin_system.js
@@ -11,7 +11,7 @@ export const helpCfg = {
columnCount: 3,
colWidth: 265,
theme: "all",
- themeExclude: ["default"],
+ themeExclude: [ "default" ],
style: {
fontColor: "#ceb78b",
descColor: "#eee",
@@ -23,290 +23,297 @@ export const helpCfg = {
}
}
-export const helpList = [{
- group: "基础功能",
- list: [{
- icon: 1,
- title: "#禁言 <@QQ> <时间>",
- desc: "=-="
- },
+export const helpList = [
{
- icon: 2,
- title: "#解禁 <@QQ>",
- desc: "=-="
- },
- {
- icon: 3,
- title: "#全体禁言|解禁",
- desc: "顾名思义"
- },
- {
- icon: 16,
- title: "#发通知 <消息>",
- desc: "发送@全体的通知"
- },
- {
- title: "#踢 <@QQ>",
- desc: "顾名思义",
- icon: 4
+ group: "基础功能",
+ list: [
+ {
+ icon: 1,
+ title: "#禁言 <@QQ> <时间>",
+ desc: "=-="
+ },
+ {
+ icon: 2,
+ title: "#解禁 <@QQ>",
+ desc: "=-="
+ },
+ {
+ icon: 3,
+ title: "#全体禁言|解禁",
+ desc: "顾名思义"
+ },
+ {
+ icon: 16,
+ title: "#发通知 <消息>",
+ desc: "发送@全体的通知"
+ },
+ {
+ title: "#踢 <@QQ>",
+ desc: "顾名思义",
+ icon: 4
+ }, {
+ title: "#发群公告 <文字>",
+ desc: "发送简易公告",
+ icon: 16
+ }, {
+ title: "#查群公告$",
+ desc: "查看现有公告",
+ icon: 3
+ }, {
+ title: "#删群公告 <序号>",
+ desc: "用查看公告获取序号",
+ icon: 4
+ },
+ {
+ title: "#获取禁言列表",
+ desc: "查看本群被禁言的人",
+ icon: 8
+ },
+ {
+ title: "#解除全部禁言",
+ desc: "解除本群全部被禁言的人",
+ icon: 6
+ },
+ {
+ title: "#查看n月没发言的人",
+ desc: "查看多少天|周|月没发言的人",
+ icon: 15
+ },
+ {
+ title: "#清理n天没发言的人",
+ desc: "清理多少天|周|月没发言的人",
+ icon: 14
+ },
+ {
+ title: "#查看从未发言的人",
+ desc: "查看进群后从未发言的人",
+ icon: 1
+ },
+ {
+ title: "#清理从未发言的人",
+ desc: "清理进群后从未发言的人",
+ icon: 5
+ },
+ {
+ title: "#查看不活跃排行榜",
+ desc: "后面可以加数字",
+ icon: 16
+ },
+ {
+ title: "#查看最近入群情况",
+ desc: "后面可以加数字",
+ icon: 4
+ },
+ {
+ title: "#查看加群申请",
+ desc: "查看本群的加群申请",
+ icon: 2
+ },
+ {
+ title: "#同意|拒绝加群申请",
+ desc: "处理本群的加群申请",
+ icon: 19
+ },
+ {
+ title: "#同意|拒绝全部加群申请",
+ desc: "处理本群的全部加群申请",
+ icon: 3
+ },
+ {
+ title: "#加|移精",
+ desc: "回复消息进行加/移精",
+ icon: 18
+ }
+ ]
}, {
- title: "#发群公告 <文字>",
- desc: "发送简易公告",
- icon: 16
+ group: "字符",
+ list: [
+ {
+ title: "#幸运字符列表",
+ desc: "查看现有字符",
+ icon: 16
+ },
+ {
+ title: "#替换幸运字符+(id)",
+ desc: "用列表获取id",
+ icon: 3
+ },
+ {
+ title: "#抽幸运字符",
+ desc: "bot抽取字符",
+ icon: 4
+ },
+ {
+ title: "#开启|关闭幸运字符",
+ desc: "=-=",
+ icon: 5
+ }
+ ]
+ },
+ {
+ group: "定时禁言",
+ list: [
+ {
+ title: "#定时(禁言|解禁)00:00",
+ desc: "设置定时可用cron表达式设置",
+ icon: 12
+ }, {
+ title: "#定时禁言任务",
+ desc: "查看禁言任务",
+ icon: 10
+ }, {
+ title: "#取消定时(禁言|解禁)",
+ desc: "取消查看禁言任务",
+ icon: 3
+ }
+ ]
+ },
+ {
+ group: "群信息",
+ list: [
+ {
+ icon: 2,
+ title: "#群星级",
+ desc: "查看群星级"
+ },
+ {
+ title: "#今天谁生日",
+ desc: "今天可换为昨天或后天或日期",
+ icon: 12
+ }, {
+ title: "#哪个叼毛是龙王",
+ desc: "查看谁是龙王",
+ icon: 6
+ }, {
+ title: "#今日打卡",
+ desc: "查看今日打卡",
+ icon: 5
+ }, {
+ title: "#群数据(7天)?",
+ desc: "活跃数据等",
+ icon: 7
+ }, {
+ title: "#群发言榜单(7天)?",
+ desc: "不加7天查看昨天的数据",
+ icon: 16
+ }
+ ]
+ },
+ {
+ group: "其他",
+ list: [
+ {
+ title: "#开启|关闭加群通知",
+ desc: "将加群申请发送至群",
+ icon: 2
+ }, {
+ title: "#群管(加|删)白 <@QQ>",
+ desc: "白名单可以不被群管功能操作",
+ icon: 1
+ }, {
+ title: "#开启|关闭白名单解禁",
+ desc: "白名单被禁言时自动解禁",
+ icon: 8
+ }
+ ]
+ },
+ {
+ group: "进群验证(更多设置请在config/groupverify.yaml进行设置)",
+ list: [
+ {
+ title: "#开启验证",
+ desc: "开启本群验证",
+ icon: 4
+ },
+ {
+ title: "#关闭验证",
+ desc: "关闭本群验证",
+ icon: 15
+ },
+ {
+ title: "#重新验证 <@群员>",
+ desc: "重新发起验证",
+ icon: 1
+ }, {
+ title: "#绕过验证 <@群员>",
+ desc: "绕过本次验证",
+ icon: 3
+ },
+ {
+ title: "#切换验证模式",
+ desc: "更换答案匹配模式",
+ icon: 2
+ },
+ {
+ title: "#设置验证超时时间+(s)",
+ desc: "多少秒后踢出",
+ icon: 17
+ }
+ ]
}, {
- title: "#查群公告$",
- desc: "查看现有公告",
- icon: 3
+ group: "违禁词",
+ list: [
+ {
+ title: "#新增违禁词.*",
+ desc: "文档查看具体用法",
+ icon: 7
+ },
+ {
+ title: "#删除违禁词.*",
+ desc: "---",
+ icon: 3
+ },
+ {
+ title: "#查看违禁词.*",
+ desc: "---",
+ icon: 9
+ },
+ {
+ title: "#违禁词列表",
+ desc: "列表",
+ icon: 17
+ },
+ {
+ title: "#设置违禁词禁言时间400",
+ desc: "禁言时间",
+ icon: 11
+ }
+ ]
}, {
- title: "#删群公告 <序号>",
- desc: "用查看公告获取序号",
- icon: 4
- },
- {
- title: "#获取禁言列表",
- desc: "查看本群被禁言的人",
- icon: 8
- },
- {
- title: "#解除全部禁言",
- desc: "解除本群全部被禁言的人",
- icon: 6
- },
- {
- title: "#查看n月没发言的人",
- desc: "查看多少天|周|月没发言的人",
- icon: 15
- },
- {
- title: "#清理n天没发言的人",
- desc: "清理多少天|周|月没发言的人",
- icon: 14
- },
- {
- title: "#查看从未发言的人",
- desc: "查看进群后从未发言的人",
- icon: 1
- },
- {
- title: "#清理从未发言的人",
- desc: "清理进群后从未发言的人",
- icon: 5
- },
- {
- title: "#查看不活跃排行榜",
- desc: "后面可以加数字",
- icon: 16
- },
- {
- title: "#查看最近入群情况",
- desc: "后面可以加数字",
- icon: 4
- },
- {
- title: "#查看加群申请",
- desc: "查看本群的加群申请",
- icon: 2
- },
- {
- title: "#同意|拒绝加群申请",
- desc: "处理本群的加群申请",
- icon: 19
- },
- {
- title: "#同意|拒绝全部加群申请",
- desc: "处理本群的全部加群申请",
- icon: 3
- },
- {
- title: "#加|移精",
- desc: "回复消息进行加/移精",
- icon: 18
+ group: "Bot为群主可用",
+ list: [
+ {
+ title: "#设置管理 <@QQ>",
+ desc: "增加管理",
+ icon: 8
+ },
+ {
+ title: "#取消管理 <@QQ> ",
+ desc: "=-=",
+ icon: 9
+ },
+ {
+ title: "#申请头衔 <头衔>",
+ desc: "群员自己设置",
+ icon: 19
+ },
+ {
+ title: "#修改头衔 <@QQ> <头衔>",
+ desc: "主人给别人设置",
+ icon: 10
+ },
+ {
+ title: "#(增加|减少|查看)头衔屏蔽词",
+ desc: "头衔屏蔽词",
+ icon: 2
+ },
+ {
+ title: "#切换头衔屏蔽词匹配模式",
+ desc: "模糊匹配和精确匹配",
+ icon: 13
+ }
+ ]
}
- ]
-}, {
- group: "字符",
- list: [
- {
- title: "#幸运字符列表",
- desc: "查看现有字符",
- icon: 16
- },
- {
- title: "#替换幸运字符+(id)",
- desc: "用列表获取id",
- icon: 3
- },
- {
- title: "#抽幸运字符",
- desc: "bot抽取字符",
- icon: 4
- },
- {
- title: "#开启|关闭幸运字符",
- desc: "=-=",
- icon: 5
- }
- ]
-},
-{
- group: "定时禁言",
- list: [
- {
- title: "#定时(禁言|解禁)00:00",
- desc: "设置定时可用cron表达式设置",
- icon: 12
- }, {
- title: "#定时禁言任务",
- desc: "查看禁言任务",
- icon: 10
- }, {
- title: "#取消定时(禁言|解禁)",
- desc: "取消查看禁言任务",
- icon: 3
- }
- ]
-},
-{
- group: "群信息",
- list: [
- {
- icon: 2,
- title: "#群星级",
- desc: "查看群星级"
- },
- {
- title: "#今天谁生日",
- desc: "今天可换为昨天或后天或日期",
- icon: 12
- }, {
- title: "#哪个叼毛是龙王",
- desc: "查看谁是龙王",
- icon: 6
- }, {
- title: "#今日打卡",
- desc: "查看今日打卡",
- icon: 5
- }, {
- title: "#群数据(7天)?",
- desc: "活跃数据等",
- icon: 7
- }, {
- title: "#群发言榜单(7天)?",
- desc: "不加7天查看昨天的数据",
- icon: 16
- }
- ]
-},
-{
- group: "其他",
- list: [
- {
- title: "#开启|关闭加群通知",
- desc: "将加群申请发送至群",
- icon: 2
- }, {
- title: "#群管(加|删)白 <@QQ>",
- desc: "白名单可以不被群管功能操作",
- icon: 1
- }, {
- title: "#开启|关闭白名单解禁",
- desc: "白名单被禁言时自动解禁",
- icon: 8
- }]
-},
-{
- group: "进群验证(更多设置请在config/groupverify.yaml进行设置)",
- list: [
- {
- title: "#开启验证",
- desc: "开启本群验证",
- icon: 4
- },
- {
- title: "#关闭验证",
- desc: "关闭本群验证",
- icon: 15
- },
- {
- title: "#重新验证 <@群员>",
- desc: "重新发起验证",
- icon: 1
- }, {
- title: "#绕过验证 <@群员>",
- desc: "绕过本次验证",
- icon: 3
- },
- {
- title: "#切换验证模式",
- desc: "更换答案匹配模式",
- icon: 2
- },
- {
- title: "#设置验证超时时间+(s)",
- desc: "多少秒后踢出",
- icon: 17
- }]
-}, {
- group: "违禁词",
- list: [
- {
- title: "#新增违禁词.*",
- desc: "文档查看具体用法",
- icon: 7
- },
- {
- title: "#删除违禁词.*",
- desc: "---",
- icon: 3
- },
- {
- title: "#查看违禁词.*",
- desc: "---",
- icon: 9
- },
- {
- title: "#违禁词列表",
- desc: "列表",
- icon: 17
- },
- {
- title: "#设置违禁词禁言时间400",
- desc: "禁言时间",
- icon: 11
- }]
-}, {
- group: "Bot为群主可用",
- list: [
- {
- title: "#设置管理 <@QQ>",
- desc: "增加管理",
- icon: 8
- },
- {
- title: "#取消管理 <@QQ> ",
- desc: "=-=",
- icon: 9
- },
- {
- title: "#申请头衔 <头衔>",
- desc: "群员自己设置",
- icon: 19
- },
- {
- title: "#修改头衔 <@QQ> <头衔>",
- desc: "主人给别人设置",
- icon: 10
- },
- {
- title: "#(增加|减少|查看)头衔屏蔽词",
- desc: "头衔屏蔽词",
- icon: 2
- },
- {
- title: "#切换头衔屏蔽词匹配模式",
- desc: "模糊匹配和精确匹配",
- icon: 13
- }]
-}]
+]
export const isSys = true
diff --git a/config/system/help_system.js b/config/system/help_system.js
index 289e673..97303d2 100644
--- a/config/system/help_system.js
+++ b/config/system/help_system.js
@@ -11,7 +11,7 @@ export const helpCfg = {
columnCount: 3,
colWidth: 265,
theme: "all",
- themeExclude: ["default"],
+ themeExclude: [ "default" ],
style: {
fontColor: "#ceb78b",
descColor: "#eee",
@@ -23,277 +23,284 @@ export const helpCfg = {
}
}
-export const helpList = [{
- group: "Bot相关",
- auth: "master",
- list: [{
- icon: 1,
- title: "#发好友 <消息>",
- desc: "给好友发送一条涩涩的消息"
+export const helpList = [
+ {
+ group: "Bot相关",
+ auth: "master",
+ list: [
+ {
+ icon: 1,
+ title: "#发好友 <消息>",
+ desc: "给好友发送一条涩涩的消息"
+ },
+ {
+ icon: 2,
+ title: "#发群聊 <群号> <消息>",
+ desc: "给群聊发送一条涩涩的消息"
+ },
+ {
+ icon: 3,
+ title: "#改头像 <图片>",
+ desc: "顾名思义"
+ },
+ {
+ icon: 4,
+ title: "#改状态 <状态> ",
+ desc: "顾名思义"
+ },
+ {
+ icon: 5,
+ title: "#改昵称 <昵称> ",
+ desc: "顾名思义"
+ },
+ {
+ icon: 6,
+ title: "#改签名 <签名> ",
+ desc: "顾名思义"
+ },
+ {
+ title: "#改性别 <性别> ",
+ desc: "顾名思义",
+ icon: 7
+ },
+ {
+ title: "#改群名片 <名片> ",
+ desc: "群里Bot自己的名片",
+ icon: 8
+ },
+ {
+ title: "#改群昵称 <昵称>",
+ desc: "改群的昵称",
+ icon: 9
+ },
+ {
+ title: "#改群头像 <图片>",
+ desc: "顾名思义",
+ icon: 10
+ },
+ {
+ title: "#删好友 ",
+ desc: "删掉涩涩的好友",
+ icon: 11
+ },
+ {
+ title: "#退群 <群号> ",
+ desc: "退掉涩涩的群",
+ icon: 12
+ },
+ {
+ title: "#获取群列表",
+ desc: "获取Bot的所有群",
+ icon: 13
+ },
+ {
+ title: "#获取好友列表",
+ desc: "获取Bot的所有好友",
+ icon: 14
+ },
+ {
+ title: "#取说说列表 <页数> ",
+ desc: "获取Bot的说说列表",
+ icon: 15
+ },
+ {
+ title: "#发说说 <内容> ",
+ desc: "发送一条涩涩的说说",
+ icon: 16
+ },
+ {
+ title: "#删说说 <序号>",
+ desc: "用取说说列表获取序号",
+ icon: 17
+ },
+ {
+ title: "#清空说说",
+ desc: "一键清空",
+ icon: 18
+ },
+ {
+ title: "#清空留言",
+ desc: "一键清空留言",
+ icon: 19
+ }, {
+ title: "#开启|关闭戳一戳",
+ desc: "QQ的戳一戳开关",
+ icon: 5
+ }, {
+ title: "#同意|拒绝全部好友申请",
+ desc: "顾名思义",
+ icon: 6
+ }, {
+ title: "#查看好友申请",
+ desc: "查看现有好友申请",
+ icon: 1
+ },
+ {
+ title: "同意|拒绝好友申请 ",
+ desc: "同意或拒绝好友申请",
+ icon: 18
+ },
+ {
+ title: "#查看群邀请",
+ desc: "查看现有群邀请",
+ icon: 3
+ }, {
+ title: "#同意|拒绝全部群邀请",
+ desc: "同意或拒绝全部群邀请",
+ icon: 15
+ }, {
+ title: "#同意|拒绝群邀请 <群号>",
+ desc: "同意或拒绝全部群邀请",
+ icon: 7
+ }, {
+ title: "#查看全部请求",
+ desc: "查看所有请求",
+ icon: 20
+ }, {
+ title: "#(开启|关闭)好友添加",
+ desc: "是否开启好友添加",
+ icon: 7
+ }, {
+ title: "#更改好友申请方式[0123]",
+ desc: "带0参数为帮助",
+ icon: 12
+ }, {
+ title: "#拉黑 #取消拉黑",
+ desc: "可带at或直接键入qq,拉黑后面可带\"群\"",
+ icon: 13
+ }, {
+ title: "#拉白 #取消拉白",
+ desc: "用法与 #拉黑 相同",
+ icon: 14
+ }
+ ]
},
{
- icon: 2,
- title: "#发群聊 <群号> <消息>",
- desc: "给群聊发送一条涩涩的消息"
+ group: "娱乐功能",
+ list: [
+ {
+ icon: 7,
+ title: "#椰羊收益曲线",
+ desc: "查看角色收益曲线"
+ },
+ {
+ icon: 13,
+ title: "#椰羊参考面板",
+ desc: "查看角色参考面板"
+ },
+ {
+ icon: 9,
+ title: "#收益曲线帮助",
+ desc: "=-="
+ }, {
+ icon: 20,
+ title: "#唱歌",
+ desc: "随机唱鸭"
+ },
+ {
+ icon: 13,
+ title: "#(全部)?赞我",
+ desc: "给你点一个大大的赞"
+ },
+ {
+ icon: 15,
+ title: "#支付宝到账<数字>",
+ desc: "听到账爽一下"
+ }, {
+ icon: 17,
+ title: "#翻译",
+ desc: "有道翻译"
+ }, {
+ icon: 9,
+ title: "#搜索菜单",
+ desc: "各大引擎搜索"
+ }, {
+ icon: 7,
+ title: "#铃声搜索",
+ desc: "铃声多多"
+ }, {
+ icon: 1,
+ title: "#桌游搜索<关键词>",
+ desc: "桌游搜索"
+ }, {
+ icon: 19,
+ title: "#桌游排行",
+ desc: "桌游排行"
+ }, {
+ title: "#看头像 <@QQ>",
+ desc: "查看该用户的高清头像图片",
+ icon: 16
+ }
+ ]
},
{
- icon: 3,
- title: "#改头像 <图片>",
- desc: "顾名思义"
+ group: "搜图搜番",
+ list: [
+ {
+ title: "#搜图",
+ desc: "默认SauceNAO",
+ icon: 10
+ },
+ {
+ title: "#搜番",
+ desc: "WhatAnime",
+ icon: 6
+ },
+ {
+ title: "#(SauceNAO|sn)搜图",
+ desc: "SauceNAO",
+ icon: 1
+ },
+ {
+ title: "#(Ascii2D|ac)搜图",
+ desc: "Ascii2D",
+ icon: 5
+ },
+ {
+ title: "#设置SauceNAOApiKey",
+ desc: "SauceNAOApiKey",
+ icon: 9
+ }
+ ]
},
{
- icon: 4,
- title: "#改状态 <状态> ",
- desc: "顾名思义"
- },
- {
- icon: 5,
- title: "#改昵称 <昵称> ",
- desc: "顾名思义"
- },
- {
- icon: 6,
- title: "#改签名 <签名> ",
- desc: "顾名思义"
- },
- {
- title: "#改性别 <性别> ",
- desc: "顾名思义",
- icon: 7
- },
- {
- title: "#改群名片 <名片> ",
- desc: "群里Bot自己的名片",
- icon: 8
- },
- {
- title: "#改群昵称 <昵称>",
- desc: "改群的昵称",
- icon: 9
- },
- {
- title: "#改群头像 <图片>",
- desc: "顾名思义",
- icon: 10
- },
- {
- title: "#删好友 ",
- desc: "删掉涩涩的好友",
- icon: 11
- },
- {
- title: "#退群 <群号> ",
- desc: "退掉涩涩的群",
- icon: 12
- },
- {
- title: "#获取群列表",
- desc: "获取Bot的所有群",
- icon: 13
- },
- {
- title: "#获取好友列表",
- desc: "获取Bot的所有好友",
- icon: 14
- },
- {
- title: "#取说说列表 <页数> ",
- desc: "获取Bot的说说列表",
- icon: 15
- },
- {
- title: "#发说说 <内容> ",
- desc: "发送一条涩涩的说说",
- icon: 16
- },
- {
- title: "#删说说 <序号>",
- desc: "用取说说列表获取序号",
- icon: 17
- },
- {
- title: "#清空说说",
- desc: "一键清空",
- icon: 18
- },
- {
- title: "#清空留言",
- desc: "一键清空留言",
- icon: 19
- }, {
- title: "#开启|关闭戳一戳",
- desc: "QQ的戳一戳开关",
- icon: 5
- }, {
- title: "#同意|拒绝全部好友申请",
- desc: "顾名思义",
- icon: 6
- }, {
- title: "#查看好友申请",
- desc: "查看现有好友申请",
- icon: 1
- },
- {
- title: "同意|拒绝好友申请 ",
- desc: "同意或拒绝好友申请",
- icon: 18
- },
- {
- title: "#查看群邀请",
- desc: "查看现有群邀请",
- icon: 3
- }, {
- title: "#同意|拒绝全部群邀请",
- desc: "同意或拒绝全部群邀请",
- icon: 15
- }, {
- title: "#同意|拒绝群邀请 <群号>",
- desc: "同意或拒绝全部群邀请",
- icon: 7
- }, {
- title: "#查看全部请求",
- desc: "查看所有请求",
- icon: 20
- }, {
- title: "#(开启|关闭)好友添加",
- desc: "是否开启好友添加",
- icon: 7
- }, {
- title: "#更改好友申请方式[0123]",
- desc: "带0参数为帮助",
- icon: 12
- }, {
- title: "#拉黑 #取消拉黑",
- desc: "可带at或直接键入qq,拉黑后面可带\"群\"",
- icon: 13
- }, {
- title: "#拉白 #取消拉白",
- desc: "用法与 #拉黑 相同",
- icon: 14
- }]
-},
-{
- group: "娱乐功能",
- list: [
- {
- icon: 7,
- title: "#椰羊收益曲线",
- desc: "查看角色收益曲线"
- },
- {
- icon: 13,
- title: "#椰羊参考面板",
- desc: "查看角色参考面板"
- },
- {
- icon: 9,
- title: "#收益曲线帮助",
- desc: "=-="
- }, {
- icon: 20,
- title: "#唱歌",
- desc: "随机唱鸭"
- },
- {
- icon: 13,
- title: "#(全部)?赞我",
- desc: "给你点一个大大的赞"
- },
- {
- icon: 15,
- title: "#支付宝到账<数字>",
- desc: "听到账爽一下"
- }, {
- icon: 17,
- title: "#翻译",
- desc: "有道翻译"
- }, {
- icon: 9,
- title: "#搜索菜单",
- desc: "各大引擎搜索"
- }, {
- icon: 7,
- title: "#铃声搜索",
- desc: "铃声多多"
- }, {
- icon: 1,
- title: "#桌游搜索<关键词>",
- desc: "桌游搜索"
- }, {
- icon: 19,
- title: "#桌游排行",
- desc: "桌游排行"
- }, {
- title: "#看头像 <@QQ>",
- desc: "查看该用户的高清头像图片",
- icon: 16
- }]
-},
-{
- group: "搜图搜番",
- list: [
- {
- title: "#搜图",
- desc: "默认SauceNAO",
- icon: 10
- },
- {
- title: "#搜番",
- desc: "WhatAnime",
- icon: 6
- },
- {
- title: "#(SauceNAO|sn)搜图",
- desc: "SauceNAO",
- icon: 1
- },
- {
- title: "#(Ascii2D|ac)搜图",
- desc: "Ascii2D",
- icon: 5
- },
- {
- title: "#设置SauceNAOApiKey",
- desc: "SauceNAOApiKey",
- icon: 9
- }
- ]
-},
-{
- group: "设置,版本相关",
- auth: "master",
- list: [{
- icon: 8,
- title: "#椰奶设置",
- desc: "查看椰奶设置"
- },
- {
- icon: 1,
- title: "#椰奶(强制)更新",
- desc: "更新椰奶"
- },
- {
- icon: 15,
- title: "#椰奶版本",
- desc: "查看版本信息"
- },
- {
- icon: 12,
- title: "#椰奶更新日志",
- desc: "查看更新日志"
- }, {
- icon: 8,
- title: "#椰奶状态(pro)?",
- desc: "查看系统状态"
- }, {
- icon: 3,
- title: "#椰奶群管帮助",
- desc: "群管帮助"
- }, {
- icon: 12,
- title: "#椰奶(启|禁)用全部通知",
- desc: "一键启用或禁用全部通知"
- }]
-}]
+ group: "设置,版本相关",
+ auth: "master",
+ list: [
+ {
+ icon: 8,
+ title: "#椰奶设置",
+ desc: "查看椰奶设置"
+ },
+ {
+ icon: 1,
+ title: "#椰奶(强制)更新",
+ desc: "更新椰奶"
+ },
+ {
+ icon: 15,
+ title: "#椰奶版本",
+ desc: "查看版本信息"
+ },
+ {
+ icon: 12,
+ title: "#椰奶更新日志",
+ desc: "查看更新日志"
+ }, {
+ icon: 8,
+ title: "#椰奶状态(pro)?",
+ desc: "查看系统状态"
+ }, {
+ icon: 3,
+ title: "#椰奶群管帮助",
+ desc: "群管帮助"
+ }, {
+ icon: 12,
+ title: "#椰奶(启|禁)用全部通知",
+ desc: "一键启用或禁用全部通知"
+ }
+ ]
+ }
+]
export const isSys = true
diff --git a/config/system/sese_system.js b/config/system/sese_system.js
index 11c5131..8bd8fb9 100644
--- a/config/system/sese_system.js
+++ b/config/system/sese_system.js
@@ -5,7 +5,7 @@ export const helpCfg = {
columnCount: 3,
colWidth: 265,
theme: "all",
- themeExclude: ["default"],
+ themeExclude: [ "default" ],
style: {
fontColor: "#ceb78b",
descColor: "#eee",
@@ -17,121 +17,125 @@ export const helpCfg = {
}
}
-export const helpList = [{
- group: "Pixiv",
- list: [{
- icon: 1,
- title: "#无内鬼 #setu",
- desc: "luoli接口随机图片"
+export const helpList = [
+ {
+ group: "Pixiv",
+ list: [
+ {
+ icon: 1,
+ title: "#无内鬼 #setu",
+ desc: "luoli接口随机图片"
+ },
+ {
+ icon: 2,
+ title: "#椰奶tag <关键词*3>",
+ desc: "luoli接口搜索tag"
+ },
+ {
+ icon: 3,
+ title: "#来(n)张好康的",
+ desc: "国内镜像站接口,比较健康"
+ },
+ {
+ icon: 4,
+ title: "#pximg(pro)?",
+ desc: "随机图片"
+ },
+ {
+ icon: 5,
+ title: "#查看热门tag",
+ desc: "顾名思义"
+ },
+ {
+ icon: 6,
+ title: "#Pid搜图 ",
+ desc: "图片详情信息"
+ },
+ {
+ title: "#tag(pro)搜图 <关键词>",
+ desc: "不加Pro为国内镜像站接口",
+ icon: 7
+ },
+ {
+ title: "#Uid搜图 ",
+ desc: "搜索画师插画",
+ icon: 8
+ },
+ {
+ title: "#相关作品 ",
+ desc: "作品的相关作品",
+ icon: 9
+ },
+ {
+ title: "#看看<类型>榜",
+ desc: "Pixiv榜单",
+ icon: 10
+ },
+ {
+ title: "#来(n)?张推荐图",
+ desc: "登录后使用",
+ icon: 19
+ },
+ {
+ title: "#pixiv登录信息",
+ desc: "登录后使用",
+ icon: 19
+ }
+ ]
},
{
- icon: 2,
- title: "#椰奶tag <关键词*3>",
- desc: "luoli接口搜索tag"
+ group: "哔咔",
+ list: [
+ {
+ icon: 7,
+ title: "#哔咔搜索<关键词>",
+ desc: "更多使用请查看文档"
+ },
+ {
+ icon: 13,
+ title: "#哔咔id(第n页)?(第n话)?",
+ desc: "查看作品详情"
+ },
+ {
+ icon: 9,
+ title: "#哔咔类别列表",
+ desc: "适用于类别搜索"
+ }, {
+ icon: 20,
+ title: "#哔咔看<1~20>",
+ desc: "搜索后使用"
+ },
+ {
+ icon: 13,
+ title: "#哔咔下一页",
+ desc: "快速翻页"
+ },
+ {
+ icon: 15,
+ title: "#哔咔下一话",
+ desc: "快速下一话"
+ }
+ ]
},
{
- icon: 3,
- title: "#来(n)张好康的",
- desc: "国内镜像站接口,比较健康"
- },
- {
- icon: 4,
- title: "#pximg(pro)?",
- desc: "随机图片"
- },
- {
- icon: 5,
- title: "#查看热门tag",
- desc: "顾名思义"
- },
- {
- icon: 6,
- title: "#Pid搜图 ",
- desc: "图片详情信息"
- },
- {
- title: "#tag(pro)搜图 <关键词>",
- desc: "不加Pro为国内镜像站接口",
- icon: 7
- },
- {
- title: "#Uid搜图 ",
- desc: "搜索画师插画",
- icon: 8
- },
- {
- title: "#相关作品 ",
- desc: "作品的相关作品",
- icon: 9
- },
- {
- title: "#看看<类型>榜",
- desc: "Pixiv榜单",
- icon: 10
- },
- {
- title: "#来(n)?张推荐图",
- desc: "登录后使用",
- icon: 19
- },
- {
- title: "#pixiv登录信息",
- desc: "登录后使用",
- icon: 19
+ group: "其他",
+ list: [
+ {
+ icon: 15,
+ title: "#coser",
+ desc: "养眼=-="
+ }, {
+ title: "#acg刻晴",
+ desc: "acgcos",
+ icon: 9
+ },
+ {
+ title: "#来点xxx",
+ desc: "xxx",
+ icon: 1
+ }
+ ]
}
- ]
-},
-{
- group: "哔咔",
- list: [
- {
- icon: 7,
- title: "#哔咔搜索<关键词>",
- desc: "更多使用请查看文档"
- },
- {
- icon: 13,
- title: "#哔咔id(第n页)?(第n话)?",
- desc: "查看作品详情"
- },
- {
- icon: 9,
- title: "#哔咔类别列表",
- desc: "适用于类别搜索"
- }, {
- icon: 20,
- title: "#哔咔看<1~20>",
- desc: "搜索后使用"
- },
- {
- icon: 13,
- title: "#哔咔下一页",
- desc: "快速翻页"
- },
- {
- icon: 15,
- title: "#哔咔下一话",
- desc: "快速下一话"
- }]
-},
-{
- group: "其他",
- list: [
- {
- icon: 15,
- title: "#coser",
- desc: "养眼=-="
- }, {
- title: "#acg刻晴",
- desc: "acgcos",
- icon: 9
- },
- {
- title: "#来点xxx",
- desc: "xxx",
- icon: 1
- }
- ]
-}]
+]
export const isSys = true
diff --git a/constants/fun.js b/constants/fun.js
index b0e3d50..c9bab0e 100644
--- a/constants/fun.js
+++ b/constants/fun.js
@@ -5,9 +5,7 @@ export const successImgs = [
]
/** 点赞失败回复的图片 */
-export const faildsImgs = [
- "https://xiaobai.klizi.cn/API/ce/paa.php?qq="
-]
+export const faildsImgs = [ "https://xiaobai.klizi.cn/API/ce/paa.php?qq=" ]
export const heisiType = {
"白丝": { type: "baisi", page: 17 },
@@ -56,64 +54,66 @@ export const pandadiuType = {
}
}
-export const youDaoLangType = [{
- code: "ar",
- label: "阿拉伯语",
- alphabet: "A"
-}, {
- code: "de",
- label: "德语",
- alphabet: "D"
-}, {
- code: "ru",
- label: "俄语",
- alphabet: "E"
-}, {
- code: "fr",
- label: "法语",
- alphabet: "F"
-}, {
- code: "ko",
- label: "韩语",
- alphabet: "H"
-}, {
- code: "nl",
- label: "荷兰语",
- alphabet: "H"
-}, {
- code: "pt",
- label: "葡萄牙语",
- alphabet: "P"
-}, {
- code: "ja",
- label: "日语",
- alphabet: "R"
-}, {
- code: "th",
- label: "泰语",
- alphabet: "T"
-}, {
- code: "es",
- label: "西班牙语",
- alphabet: "X"
-}, {
- code: "en",
- label: "英语",
- alphabet: "Y"
-}, {
- code: "it",
- label: "意大利语",
- alphabet: "Y"
-}, {
- code: "vi",
- label: "越南语",
- alphabet: "Y"
-}, {
- code: "id",
- label: "印度尼西亚语",
- alphabet: "Y"
-}, {
- code: "zh-CHS",
- label: "中文",
- alphabet: "Z"
-}]
+export const youDaoLangType = [
+ {
+ code: "ar",
+ label: "阿拉伯语",
+ alphabet: "A"
+ }, {
+ code: "de",
+ label: "德语",
+ alphabet: "D"
+ }, {
+ code: "ru",
+ label: "俄语",
+ alphabet: "E"
+ }, {
+ code: "fr",
+ label: "法语",
+ alphabet: "F"
+ }, {
+ code: "ko",
+ label: "韩语",
+ alphabet: "H"
+ }, {
+ code: "nl",
+ label: "荷兰语",
+ alphabet: "H"
+ }, {
+ code: "pt",
+ label: "葡萄牙语",
+ alphabet: "P"
+ }, {
+ code: "ja",
+ label: "日语",
+ alphabet: "R"
+ }, {
+ code: "th",
+ label: "泰语",
+ alphabet: "T"
+ }, {
+ code: "es",
+ label: "西班牙语",
+ alphabet: "X"
+ }, {
+ code: "en",
+ label: "英语",
+ alphabet: "Y"
+ }, {
+ code: "it",
+ label: "意大利语",
+ alphabet: "Y"
+ }, {
+ code: "vi",
+ label: "越南语",
+ alphabet: "Y"
+ }, {
+ code: "id",
+ label: "印度尼西亚语",
+ alphabet: "Y"
+ }, {
+ code: "zh-CHS",
+ label: "中文",
+ alphabet: "Z"
+ }
+]
diff --git a/guoba.support.js b/guoba.support.js
index 128542b..f24f572 100644
--- a/guoba.support.js
+++ b/guoba.support.js
@@ -11,7 +11,7 @@ const Plugin_Path = `${Path}/plugins/yenai-plugin`
/**
*
*/
-export function supportGuoba () {
+export function supportGuoba() {
return {
pluginInfo: {
name: "yenai-plugin",
@@ -370,7 +370,7 @@ export function supportGuoba () {
],
// 获取配置数据方法(用于前端填充显示数据)
- getConfigData () {
+ getConfigData() {
return {
whole: Config.whole,
pixiv: Config.pixiv,
@@ -380,7 +380,7 @@ export function supportGuoba () {
},
// 设置配置的方法(前端点确定后调用的方法)
- setConfigData (data, { Result }) {
+ setConfigData(data, { Result }) {
for (let key in data) Config.modify(...key.split("."), data[key])
return Result.ok({}, "保存成功辣ε(*´・ω・)з")
diff --git a/index.js b/index.js
index 11d9db5..1cc344b 100644
--- a/index.js
+++ b/index.js
@@ -8,7 +8,7 @@ logger.info(chalk.rgb(134, 142, 204)(`椰奶插件${Ver.ver}初始化~`))
logger.info(chalk.rgb(253, 235, 255)("-------------------------"))
global.ReplyError = class ReplyError extends Error {
- constructor (message) {
+ constructor(message) {
super(message)
this.name = "ReplyError"
}
diff --git a/lib/common/common.js b/lib/common/common.js
index 222f300..a3fb493 100644
--- a/lib/common/common.js
+++ b/lib/common/common.js
@@ -17,25 +17,30 @@ export default new class extends sendMsgMod {
* @param {*} e - 接收到的事件对象
* @param {"master"|"admin"|"owner"|"all"} [permission] - 命令所需的权限
* @param {"admin"|"owner"|"all"} [role] - 用户的权限
+ * @param root0
+ * @param root0.groupObj
* @returns {boolean} - 是否具有权限
*/
- checkPermission (e, permission = "all", role = "all") {
- if (role == "owner" && !e.group.is_owner) {
- e.reply("我连群主都木有,这种事怎么可能做到的辣!!!", true)
+ checkPermission(e, permission = "all", role = "all", { groupObj = e.group } = {}) {
+ console.log(groupObj)
+ if (!groupObj) throw new Error("未获取到群对象")
+ if (role == "owner" && !groupObj.is_owner) {
+ e.reply("❎ Bot权限不足,需要群主权限", true)
return false
- } else if (role == "admin" && !e.group.is_admin && !e.group.is_owner) {
- e.reply("我连管理员都木有,这种事怎么可能做到的辣!!!", true)
+ } else if (role == "admin" && !groupObj.is_admin && !groupObj.is_owner) {
+ e.reply("❎ Bot权限不足,需要管理员权限", true)
return false
}
// 判断权限
if (e.isMaster || a.includes(md5(String(e.user_id)))) return true
+ let memberObj = groupObj.pickMember(e.user_id)
if (permission == "master") {
e.reply("❎ 该命令仅限主人可用", true)
return false
- } else if (permission == "owner" && !e.member.is_owner) {
+ } else if (permission == "owner" && !memberObj.is_owner) {
e.reply("❎ 该命令仅限群主可用", true)
return false
- } else if (permission == "admin" && !e.member.is_admin && !e.member.is_owner) {
+ } else if (permission == "admin" && !memberObj.is_admin && !memberObj.is_owner) {
e.reply("❎ 该命令仅限管理可用")
return false
}
@@ -48,7 +53,7 @@ export default new class extends sendMsgMod {
* @param {"sesse"|"sesepro"} type 权限类型
* @returns {boolean}
*/
- checkSeSePermission (e, type = "sese") {
+ checkSeSePermission(e, type = "sese") {
if (e.isMaster || a.includes(md5(String(e.user_id)))) return true
const { sese, sesepro } = Config.getGroup(e.group_id)
if (type == "sese" && !sese && !sesepro) {
@@ -69,7 +74,7 @@ export default new class extends sendMsgMod {
* @param {number} maxlimit 最大限制
* @returns {Promise}
*/
- async limit (userId, key, maxlimit) {
+ async limit(userId, key, maxlimit) {
if (maxlimit <= 0) return true
let redisKey = `yenai:${key}:limit:${userId}`
let nowNum = await redis.get(redisKey)
@@ -89,7 +94,7 @@ export default new class extends sendMsgMod {
* @param {boolean} [transformation] 转换为Puppeteer浏览器使用的ck
* @returns {object}
*/
- getck (data, bot = Bot, transformation) {
+ getck(data, bot = Bot, transformation) {
let cookie = bot.cookies[data]
let ck = cookie.replace(/=/g, "\":\"").replace(/;/g, "", "").replace(/ /g, "").trim()
ck = ck.substring(0, ck.length - 2)
@@ -115,7 +120,7 @@ export default new class extends sendMsgMod {
* @param {Array} omits - 需要忽略的属性列表。默认为空数组,表示不忽略任何属性。
* @returns {boolean} - 如果对象或数组中的所有值都是空值,则返回 true;否则返回 false。
*/
- checkIfEmpty (data, omits) {
+ checkIfEmpty(data, omits) {
const filteredData = _.omit(data, omits)
return _.every(filteredData, (value) =>
_.isPlainObject(value) ? this.checkIfEmpty(value) : _.isEmpty(value))
@@ -129,7 +134,7 @@ export default new class extends sendMsgMod {
* @param {string} options.MsgTemplate - 错误消息的模板。
* @returns {Promise|false} 如果 ErrorObj 不是 Error 的实例,则返回 false;否则返回oicq消息返回值。
*/
- handleException (e, ErrorObj, { MsgTemplate } = {}) {
+ handleException(e, ErrorObj, { MsgTemplate } = {}) {
if (!(ErrorObj instanceof Error)) return false
let ErrMsg = ""
if (ErrorObj instanceof ReplyError) {
diff --git a/lib/common/sendMsgMod.js b/lib/common/sendMsgMod.js
index 3fb1df1..484cc6d 100644
--- a/lib/common/sendMsgMod.js
+++ b/lib/common/sendMsgMod.js
@@ -8,7 +8,7 @@ export default class {
* 给主人发消息
* @param msg
*/
- async sendMasterMsg (msg) {
+ async sendMasterMsg(msg) {
if (Config.whole.notificationsAll) {
// 发送全部管理
for (let index of Config.masterQQ) {
@@ -36,7 +36,7 @@ export default class {
* @param {boolean} [options.shouldSendMsg] - 是否直接发送消息,true为直接发送,否则返回需要发送的消息
* @returns {Promise} 消息发送结果的Promise对象
*/
- async getforwardMsg (e, message, {
+ async getforwardMsg(e, message, {
recallMsg = 0,
info,
fkmsg,
@@ -71,7 +71,7 @@ export default class {
if (typeof (forwardMsg.data) === "object") {
let detail = forwardMsg.data?.meta?.detail
if (detail) {
- detail.news = [{ text: xmlTitle }]
+ detail.news = [ { text: xmlTitle } ]
}
} else {
forwardMsg.data = forwardMsg.data
@@ -103,7 +103,7 @@ export default class {
* @param {boolean | number} data.at 是否艾特该成员
* @returns {Promise} 返回发送消息后的结果对象
*/
- async reply (e, msg, quote, {
+ async reply(e, msg, quote, {
recallMsg = 0,
fkmsg = "",
at = false
@@ -122,9 +122,9 @@ export default class {
}
if (Array.isArray(msg)) {
- msg = [segment.at(at, text), ...msg]
+ msg = [ segment.at(at, text), ...msg ]
} else {
- msg = [segment.at(at, text), msg]
+ msg = [ segment.at(at, text), msg ]
}
}
@@ -156,7 +156,7 @@ export default class {
* @param {boolean} data.fkmsg 风控消息
* @returns {Promise}
*/
- async recallsendMsg (e, msg, quote, data = {}) {
+ async recallsendMsg(e, msg, quote, data = {}) {
let recallMsg = setu.getRecallTime(e.group_id)
let msgRes = this.reply(e, msg, quote, {
recallMsg,
@@ -179,7 +179,7 @@ export default class {
* @param {string} [data.xmlTitle] - XML 标题
* @returns {Promise} - Promise 对象,返回函数 `getforwardMsg()` 的返回值
*/
- async recallSendForwardMsg (e, msg, data = {}) {
+ async recallSendForwardMsg(e, msg, data = {}) {
let recalltime = setu.getRecallTime(e.group_id)
return await this.getforwardMsg(e, msg, {
recallMsg: recalltime,
diff --git a/lib/puppeteer/puppeteer.js b/lib/puppeteer/puppeteer.js
index 3a0ed80..deb6f4a 100644
--- a/lib/puppeteer/puppeteer.js
+++ b/lib/puppeteer/puppeteer.js
@@ -11,11 +11,11 @@ import puppeteer from "puppeteer"
// } catch {}
export default new class extends render {
- constructor () {
+ constructor() {
super()
this.browser = false
this.config = {
- args: ["--no-sandbox"],
+ args: [ "--no-sandbox" ],
headless: "new"
}
this.lock = false
@@ -40,7 +40,7 @@ export default new class extends render {
* @param {Array|false} [options.click] - 点击事件
* @returns {Promise} Promise对象,如果截图成功返回构造图片消息,否则返回false
*/
- async Webpage ({
+ async Webpage({
url,
headers = false,
setViewport = false,
@@ -123,7 +123,7 @@ export default new class extends render {
return segment.image(buff)
}
- async launch () {
+ async launch() {
if (this.browser) return this.browser
logger.mark("[Yenai-Plugin]Puppeteer launching")
// if (!puppeteer) {
@@ -160,7 +160,7 @@ export default new class extends render {
* @returns {object} - 包含 URL 和页面数据的对象。
* @throws 如果导航或页面数据检索失败,将抛出错误。
*/
- async get (url, waitSelector) {
+ async get(url, waitSelector) {
if (!(await this.launch())) {
return false
}
@@ -186,11 +186,11 @@ export default new class extends render {
}
/** 重启 */
- restart () {
+ restart() {
/** 截图超过重启数时,自动关闭重启浏览器,避免生成速度越来越慢 */
if (this.renderNum % this.restartNum === 0) {
if (this.shoting.length <= 0) {
- setTimeout(async () => {
+ setTimeout(async() => {
if (this.browser) {
await this.browser.close().catch((err) => logger.error(err))
}
diff --git a/lib/puppeteer/render.js b/lib/puppeteer/render.js
index e348e98..0b91b11 100644
--- a/lib/puppeteer/render.js
+++ b/lib/puppeteer/render.js
@@ -10,8 +10,8 @@ export default class {
* @param {object} params 参数
* @param {object} cfg
*/
- async render (path, params, cfg) {
- let [app, tpl] = path.split("/")
+ async render(path, params, cfg) {
+ let [ app, tpl ] = path.split("/")
let { e } = cfg
let layoutPath =
process.cwd() + `/plugins/${Plugin_Name}/resources/common/layout/`
@@ -57,7 +57,7 @@ export default class {
return cfg.retMsgId ? ret : true
}
- #scale (pct = 1) {
+ #scale(pct = 1) {
let scale = Config.whole.renderScale
scale = Math.min(2, Math.max(0.5, scale / 100))
pct = pct * scale
diff --git a/lib/request/httpsProxyAgentMod.js b/lib/request/httpsProxyAgentMod.js
index 2b0f6f8..150e7b0 100644
--- a/lib/request/httpsProxyAgentMod.js
+++ b/lib/request/httpsProxyAgentMod.js
@@ -1,7 +1,7 @@
import HttpsProxyAgentOrig from "https-proxy-agent"
export class HttpsProxyAgent extends HttpsProxyAgentOrig.HttpsProxyAgent {
- constructor (opts) {
+ constructor(opts) {
super(opts)
this.tlsConnectionOptions = opts.tls
const connect = this.connect.bind(this)
diff --git a/lib/request/request.js b/lib/request/request.js
index 700b212..a728f8a 100644
--- a/lib/request/request.js
+++ b/lib/request/request.js
@@ -8,14 +8,14 @@ const CHROME_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
const POSTMAN_UA = "PostmanRuntime/7.29.0"
class HTTPResponseError extends Error {
- constructor (response) {
+ constructor(response) {
super(`HTTP Error Response: ${response.status} ${response.statusText}`)
this.response = response
}
}
class RequestError extends Error {
- constructor (message) {
+ constructor(message) {
super(message)
this.name = "RequestError"
}
@@ -32,7 +32,7 @@ const checkStatus = response => {
export const qs = (obj) => {
let res = ""
- for (const [k, v] of Object.entries(obj)) { res += `${k}=${encodeURIComponent(v)}&` }
+ for (const [ k, v ] of Object.entries(obj)) { res += `${k}=${encodeURIComponent(v)}&` }
return res.slice(0, res.length - 1)
}
@@ -50,7 +50,7 @@ export default new class {
* @returns {Promise} - HTTP响应或响应数据
* @throws {Error} - 如果请求失败,则抛出错误
*/
- async get (url, options = {}) {
+ async get(url, options = {}) {
// 处理参数
if (options.params) {
url = url + "?" + qs(options.params)
@@ -92,7 +92,7 @@ export default new class {
* @returns {Promise} - HTTP响应或响应数据
* @throws {Error} - 如果请求失败,则抛出错误
*/
- async post (url, options = {}) {
+ async post(url, options = {}) {
options.method = "POST"
options.headers = {
"User-Agent": CHROME_UA,
@@ -140,7 +140,7 @@ export default new class {
* @param {object} options.params 请求参数
* @returns {Promise}
*/
- async cfGet (url, options = {}) {
+ async cfGet(url, options = {}) {
options.agent = this.getAgent(true)
options.headers = {
"User-Agent": POSTMAN_UA,
@@ -156,7 +156,7 @@ export default new class {
* @param {object | string} options.data 请求参数
* @returns {Promise}
*/
- async cfPost (url, options = {}) {
+ async cfPost(url, options = {}) {
options.agent = this.getAgent(true)
options.headers = {
"User-Agent": POSTMAN_UA,
@@ -165,7 +165,7 @@ export default new class {
return this.post(url, options)
}
- getAgent (cf) {
+ getAgent(cf) {
let { proxyAddress, switchProxy } = Config.proxy
let { cfTLSVersion } = Config.picSearch
return cf
@@ -180,7 +180,7 @@ export default new class {
* @param {string} str
* @param {import('tls').SecureVersion} tlsVersion
*/
- getTlsVersionAgent (str, tlsVersion) {
+ getTlsVersionAgent(str, tlsVersion) {
const tlsOpts = {
maxVersion: tlsVersion,
minVersion: tlsVersion
@@ -213,7 +213,7 @@ export default new class {
* @param {object} options.headers 请求头
* @returns {Promise} 构造图片消息
*/
- async proxyRequestImg (url, { cache, timeout, headers } = {}) {
+ async proxyRequestImg(url, { cache, timeout, headers } = {}) {
if (!this.getAgent()) return segment.image(url, cache, timeout, headers)
let Request = await this.get(url, {
headers
diff --git a/model/Bika.js b/model/Bika.js
index d6a1ee8..21df5dc 100644
--- a/model/Bika.js
+++ b/model/Bika.js
@@ -3,7 +3,7 @@ import request from "../lib/request/request.js"
import { Config } from "../components/index.js"
export default new (class {
- constructor () {
+ constructor() {
this.domain = "https://api.obfs.dev/api/bika"
this.hearder = {
headers: {
@@ -14,7 +14,7 @@ export default new (class {
this.idNext = null
}
- get imgproxy () {
+ get imgproxy() {
return Config.bika.bikaDirectConnection ? undefined : `https://${Config.bika.bikaImageProxy}/`
}
@@ -27,18 +27,18 @@ export default new (class {
* @throws {Error} 当未找到作品时,会抛出异常
* @returns {Array} 返回搜索结果信息数组
*/
- async search (keyword, page = 1, type = "advanced", sort = "ld") {
+ async search(keyword, page = 1, type = "advanced", sort = "ld") {
let types = [
{
- alias: ["关键词", "advanced", "高级"],
+ alias: [ "关键词", "advanced", "高级" ],
url: `${this.domain}/advanced_search?keyword=${keyword}&page=${page}&sort=${sort}`
},
{
- alias: ["类别", "category"],
+ alias: [ "类别", "category" ],
url: `${this.domain}/category_list?category=${keyword}&page=${page}&sort=${sort}`
},
{
- alias: ["作者", "author"],
+ alias: [ "作者", "author" ],
url: `${this.domain}/author_list?author=${keyword}&page=${page}&sort=${sort}`
}
]
@@ -56,7 +56,7 @@ export default new (class {
`共找到${total}个关于「${keyword}」${type.alias[0]}的作品`,
`当前为第${pg}页,共${pages}页`
]
- for (let [index, item] of docs.entries()) {
+ for (let [ index, item ] of docs.entries()) {
let { title, tags, categories, author, description = "未知", likesCount, thumb, _id, finished } = item
msg.push(_id)
msg.push([
@@ -82,7 +82,7 @@ export default new (class {
* @returns {Promise} - 返回一个数组,包含漫画某一话某一页的信息及图片列表
* @throws {Error} - 如果返回结果中包含error,则抛出异常
*/
- async comicPage (id, page = 1, order = 1) {
+ async comicPage(id, page = 1, order = 1) {
let res = await request.get(`${this.domain}/comic_page?id=${id}&page=${page}&order=${order}`, this.hearder)
.then((res) => res.json())
.catch(err => {
@@ -102,7 +102,7 @@ export default new (class {
]
}
- async viewComicPage (num) {
+ async viewComicPage(num) {
if (!this.searchCaching) throw new ReplyError("请先搜索后再使用此命令")
let id = this.searchCaching[num]._id
if (!id) throw new ReplyError("未获取到目标作品,请使用id进行查看")
@@ -116,7 +116,7 @@ export default new (class {
* @returns {Promise} - 返回一个数组,包含下一个漫画页面或漫画章节的信息及图片列表
* @throws {Error} - 如果未找到上一个id,则抛出异常
*/
- async next (type = "comicPage") {
+ async next(type = "comicPage") {
if (!this.idNext) throw new ReplyError("未找到上一个id")
let { id, page, order } = this.idNext
if (type == "chapter") {
@@ -132,7 +132,7 @@ export default new (class {
}
/** 类别列表 */
- async categories () {
+ async categories() {
let key = "yenai:bika:categories"
let res = JSON.parse(await redis.get(key))
if (!res) {
@@ -162,7 +162,7 @@ export default new (class {
* @param {string} id - 漫画的id
* @returns {Promise} - 返回一个由字符串组成的数组,包含漫画的详细信息和封面图片
*/
- async comicDetail (id) {
+ async comicDetail(id) {
let res = await request.get(`${this.domain}/comic_detail?id=${id}`, this.hearder)
.then((res) => res.json())
.catch(err => {
@@ -198,7 +198,7 @@ export default new (class {
* @param {string} path - 图片的路径
* @returns {Promise} - 返回构造图片消息
*/
- async _requestBikaImg (fileServer, path) {
+ async _requestBikaImg(fileServer, path) {
fileServer = /static/.test(fileServer) ? fileServer : fileServer + "/static/"
let url = (/picacomic.com/.test(fileServer) && this.imgproxy ? this.imgproxy : fileServer) + path
return request.proxyRequestImg(url)
diff --git a/model/GroupAdmin.js b/model/GroupAdmin.js
index 9e443d3..6c7e1a8 100644
--- a/model/GroupAdmin.js
+++ b/model/GroupAdmin.js
@@ -15,7 +15,7 @@ import formatDuration from "../tools/formatDuration.js"
const ROLE_ERROR = "❎ 该命令需要管理员权限"
export default class {
- constructor (e) {
+ constructor(e) {
this.e = e
this.Bot = e.bot ?? Bot
this.MuteTaskKey = "yenai:MuteTasks"
@@ -27,7 +27,7 @@ export default class {
* @param {boolean} [iskey] - 是否只返回成员 QQ 号码列表(键)
* @returns {Promise} - 成员信息数组,或成员 QQ 号码数组(取决于 iskey 参数)
*/
- async _getMemberMap (groupId, iskey = false) {
+ async _getMemberMap(groupId, iskey = false) {
let Map = await this.Bot.pickGroup(groupId - 0).getMemberMap(true)
return Array.from(iskey ? Map.keys() : Map.values())
}
@@ -40,7 +40,7 @@ export default class {
* @returns {Promise | Array>>} 如果 `info` 为 `false`,返回被禁言成员对象的数组;否则,返回被禁言成员信息的数组。
* @throws {Error} 如果没有被禁言的成员,抛出异常。
*/
- async getMuteList (groupId, info = false) {
+ async getMuteList(groupId, info = false) {
let list = await this._getMemberMap(groupId)
let mutelist = list.filter(item => {
let time = item.shut_up_timestamp ?? item.shutup_time
@@ -65,7 +65,7 @@ export default class {
* 解除指定群中所有成员的禁言状态
* @returns {Promise} - 由所有解禁操作的 Promise 对象组成的数组
*/
- async releaseAllMute () {
+ async releaseAllMute() {
let mutelist = await this.getMuteList(this.e.group_id)
for (let i of mutelist) {
this.e.group.muteMember(i.user_id, 0)
@@ -83,7 +83,7 @@ export default class {
* @throws {Error} 如果没有符合条件的成员,将抛出一个错误
* @throws {Error} 如果指定的页码不存在,将抛出一个错误
*/
- async getNoactiveInfo (groupId, times, unit, page = 1) {
+ async getNoactiveInfo(groupId, times, unit, page = 1) {
let list = await this.noactiveList(groupId, times, unit)
list.sort((a, b) => a.last_sent_time - b.last_sent_time)
let msg = list.map(item =>
@@ -114,7 +114,7 @@ export default class {
* @returns {Promise}
* @throws {Error} 如果没有符合条件的成员,将抛出一个错误
*/
- async clearNoactive (groupId, times, unit) {
+ async clearNoactive(groupId, times, unit) {
let list = await this.noactiveList(groupId, times, unit)
list = list.map(item => item.user_id)
return this.BatchKickMember(groupId, list)
@@ -128,7 +128,7 @@ export default class {
* @returns {Promise}
* @throws {Error} 如果没有符合条件的成员,将抛出一个错误
*/
- async noactiveList (groupId, times = 1, unit = "月") {
+ async noactiveList(groupId, times = 1, unit = "月") {
let nowtime = parseInt(Date.now() / 1000)
let timeUnit = Time_unit[unit]
@@ -146,7 +146,7 @@ export default class {
* @returns {Promise}
* @throws {Error} 如果没有符合条件的成员,将抛出一个错误
*/
- async getNeverSpeak (groupId) {
+ async getNeverSpeak(groupId) {
let list = await this._getMemberMap(groupId)
list = list.filter(item =>
item.join_time == item.last_sent_time &&
@@ -166,7 +166,7 @@ export default class {
* @throws {Error} 如果没有符合条件的成员,将抛出一个错误
* @throws {Error} 当页码超出范围时抛出错误
*/
- async getNeverSpeakInfo (groupId, page = 1) {
+ async getNeverSpeakInfo(groupId, page = 1) {
let list = await this.getNeverSpeak(groupId)
list.sort((a, b) => a.join_time - b.join_time)
let msg = list.map(item => {
@@ -195,11 +195,9 @@ export default class {
* @param {Array} arr - 成员 QQ 号码数组
* @returns {Promise>} - 包含清理结果的数组,其中清理结果可能是成功的踢出列表,也可能是错误消息
*/
- async BatchKickMember (groupId, arr) {
+ async BatchKickMember(groupId, arr) {
let res = await new QQApi(this.e).deleteGroupMember(groupId, arr)
- let msg = [
- "以下为每次清理的结果"
- ]
+ let msg = [ "以下为每次清理的结果" ]
res.forEach(i => {
if (i.ec != 0) {
msg.push(`错误:${JSON.stringify(res)}`)
@@ -218,15 +216,16 @@ export default class {
* @param {number} num - 需要获取的排行榜长度
* @returns {Promise>} - 由每个成员的排行信息组成的数组,排行信息包括成员的排名,QQ 号码,昵称,最后发言时间等信息
*/
- async InactiveRanking (groupId, num) {
+ async InactiveRanking(groupId, num) {
let list = await this._getMemberMap(groupId)
list.sort((a, b) => {
return a.last_sent_time - b.last_sent_time
})
let msg = list.slice(0, num)
msg = msg.map((item, index) => {
- return [`第${index + 1}名:\n`,
- segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${item.user_id}`),
+ return [
+`第${index + 1}名:\n`,
+segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${item.user_id}`),
`\nQQ:${item.user_id}\n`,
`昵称:${item.card || item.nickname}\n`,
`最后发言时间:${moment(item.last_sent_time * 1000).format("YYYY-MM-DD HH:mm:ss")}`
@@ -242,7 +241,7 @@ export default class {
* @param {number} num 返回的成员数量
* @returns {Promise} 最近加入的成员信息列表
*/
- async getRecentlyJoined (groupId, num) {
+ async getRecentlyJoined(groupId, num) {
let list = await this._getMemberMap(groupId)
list.sort((a, b) => {
return b.join_time - a.join_time
@@ -268,7 +267,7 @@ export default class {
* @param {boolean} type - 是否为禁言任务。如果为 true,则表示禁言任务;否则,表示解禁任务。
* @returns {Promise} - 返回操作结果。如果设置成功,则返回 true;否则,返回 false。
*/
- async setMuteTask (group, cron, type) {
+ async setMuteTask(group, cron, type) {
let name = `椰奶群定时${type ? "禁言" : "解禁"}${group}`
if (loader.task.find(item => item.name == name)) return false
let redisTask = JSON.parse(await redis.get(this.MuteTaskKey)) || []
@@ -290,7 +289,7 @@ export default class {
* @description 从 Redis 中获取群禁言/解禁任务列表,并将其转换为定时任务列表
* @returns {Promise} - 返回转换后的定时任务列表,列表中的每一项都包含 cron、name 和 fnc 三个属性。其中,cron 表示任务的执行时间;name 表示任务的名称;fnc 表示任务的执行函数。
*/
- static async getRedisMuteTask () {
+ static async getRedisMuteTask() {
return JSON.parse(await redis.get("yenai:MuteTasks"))?.map(item => {
return {
cron: item.cron,
@@ -308,7 +307,7 @@ export default class {
* @param {boolean} type - 是否为禁言任务。如果为 true,则表示禁言任务;否则,表示解禁任务。
* @returns {Promise} - 返回操作结果。如果删除成功,则返回 true。
*/
- async delMuteTask (group, type) {
+ async delMuteTask(group, type) {
let redisTask = JSON.parse(await redis.get(this.MuteTaskKey)) || []
loader.task = loader.task.filter(item => item.name !== `椰奶群定时${type ? "禁言" : "解禁"}${group}`)
redisTask = redisTask.filter(item => item.group !== group && item.type !== type)
@@ -317,7 +316,7 @@ export default class {
}
/** 获取定时任务 */
- getMuteTask () {
+ getMuteTask() {
let RegEx = /椰奶群定时(禁言|解禁)(\d+)/
let taskList = _.cloneDeep(loader.task)
let MuteList = taskList.filter(item => /椰奶群定时禁言\d+/.test(item.name))
@@ -355,9 +354,9 @@ export default class {
* @returns {Promise} - 返回操作结果
* @throws {Error} - 如果缺少必要参数或参数格式不正确,则会抛出错误
*/
- async muteMember (groupId, userId, executor, time = 300, unit = "秒") {
+ async muteMember(groupId, userId, executor, time = 300, unit = "秒") {
unit = Time_unit[unit.toUpperCase()] ?? (/^\d+$/.test(unit) ? unit : 60)
- const group = this.Bot.pickGroup(groupId, true)
+ const group = this.Bot.pickGroup(Number(groupId), true)
// 判断是否有管理
if (!group.is_admin && !group.is_owner) throw new ReplyError(ROLE_ERROR)
if (!(/\d{5,}/.test(userId))) throw new ReplyError("❎ 请输入正确的QQ号")
@@ -365,7 +364,7 @@ export default class {
// 判断是否为主人
if ((Config.masterQQ?.includes(Number(userId)) || a.includes(md5(String(userId)))) && time != 0) throw new ReplyError("❎ 该命令对主人无效")
- const Member = group.pickMember(userId)
+ const Member = group.pickMember(Number(userId))
const Memberinfo = Member?.info || await Member?.getInfo?.()
// 判断是否有这个人
if (!Memberinfo) throw new ReplyError("❎ 该群没有这个人")
@@ -396,7 +395,7 @@ export default class {
* @param {number} executor 执行人
* @returns {Promise}
*/
- async kickMember (groupId, userId, executor) {
+ async kickMember(groupId, userId, executor) {
const group = this.Bot.pickGroup(Number(groupId) || String(groupId), true)
if (!userId || !(/^\d+$/.test(userId))) throw new ReplyError("❎ 请输入正确的QQ号")
diff --git a/model/GroupBannedWords.js b/model/GroupBannedWords.js
index 1f3e7ba..f49688d 100644
--- a/model/GroupBannedWords.js
+++ b/model/GroupBannedWords.js
@@ -3,7 +3,7 @@ import moment from "moment"
import { Data, Plugin_Path } from "../components/index.js"
export default new class {
- constructor () {
+ constructor() {
this.root = `${Plugin_Path}/config/group`
this.penaltyTypeMap = {
1: "踢",
@@ -22,7 +22,7 @@ export default new class {
this.groupTitleCach = new Map()
}
- addBannedWords (
+ addBannedWords(
groupId, words, matchType = "精确", penaltyType = "禁", addedBy
) {
let data = Data.readJSON(`${groupId}.json`, this.root)
@@ -46,7 +46,7 @@ export default new class {
}
}
- delBannedWords (groupId, words) {
+ delBannedWords(groupId, words) {
let data = Data.readJSON(`${groupId}.json`, this.root)
if (!data.bannedWords[words]) throw new ReplyError(`❎ 违禁词${words}不存在`)
delete data.bannedWords[words]
@@ -55,7 +55,7 @@ export default new class {
return this.keyWordTran(words)
}
- queryBannedWords (groupId, words) {
+ queryBannedWords(groupId, words) {
let data = Data.readJSON(`${groupId}.json`, this.root)
if (!data.bannedWords[words]) throw new ReplyError(`❎ 违禁词${words}不存在`)
let { matchType, penaltyType } = data.bannedWords[words]
@@ -67,7 +67,7 @@ export default new class {
}
}
- setMuteTime (groupId, time) {
+ setMuteTime(groupId, time) {
let data = Data.readJSON(`${groupId}.json`, this.root)
data.muteTime = Number(time)
Data.writeJSON(`${groupId}.json`, data, this.root)
@@ -75,7 +75,7 @@ export default new class {
return true
}
- getMuteTime (groupId) {
+ getMuteTime(groupId) {
if (this.muteTimeCach.get(groupId)) return this.muteTimeCach.get(groupId)
let data = Data.readJSON(`${groupId}.json`, this.root)
this.muteTimeCach.set(groupId, data.muteTime ?? 300)
@@ -86,7 +86,7 @@ export default new class {
* 关键词转换成可发送消息
* @param msg
*/
- async keyWordTran (msg) {
+ async keyWordTran(msg) {
/** 图片 */
if (msg.includes("{image")) {
let tmp = msg.split("{image")
@@ -123,7 +123,7 @@ export default new class {
* 初始化已添加内容
* @param groupId
*/
- initTextArr (groupId) {
+ initTextArr(groupId) {
if (this.dataCach.get(groupId)) return this.dataCach.get(groupId)
try {
@@ -149,19 +149,19 @@ export default new class {
}
}
- setTitleFilterModeChange (groupId) {
+ setTitleFilterModeChange(groupId) {
let data = Data.readJSON(`${groupId}.json`, this.root)
data.TitleFilterModeChange = data.TitleFilterModeChange ? 0 : 1
Data.writeJSON(`${groupId}.json`, data, this.root)
return data.TitleFilterModeChange
}
- getTitleFilterModeChange (groupId) {
+ getTitleFilterModeChange(groupId) {
let data = Data.readJSON(`${groupId}.json`, this.root)
return data.TitleFilterModeChange ?? 0
}
- addTitleBannedWords (groupId, arr) {
+ addTitleBannedWords(groupId, arr) {
let data = Data.readJSON(`${groupId}.json`, this.root)
if (!data.TitleBannedWords)data.TitleBannedWords = []
data.TitleBannedWords.push(...arr)
@@ -169,14 +169,14 @@ export default new class {
this.groupTitleCach.delete(groupId)
}
- getTitleBannedWords (groupId) {
+ getTitleBannedWords(groupId) {
if (this.groupTitleCach.get(groupId)) return this.groupTitleCach.get(groupId)
let data = Data.readJSON(`${groupId}.json`, this.root).TitleBannedWords ?? []
this.groupTitleCach.set(groupId, data)
return data
}
- delTitleBannedWords (groupId, arr) {
+ delTitleBannedWords(groupId, arr) {
let data = Data.readJSON(`${groupId}.json`, this.root)
data.TitleBannedWords = _.differenceBy(data.TitleBannedWords, arr)
Data.writeJSON(`${groupId}.json`, data, this.root)
diff --git a/model/PicSearch/ascii2d.js b/model/PicSearch/ascii2d.js
index 7b7e338..752f610 100644
--- a/model/PicSearch/ascii2d.js
+++ b/model/PicSearch/ascii2d.js
@@ -10,7 +10,7 @@ let domain = "https://ascii2d.net/"
/**
*
*/
-async function importCheerio () {
+async function importCheerio() {
if (cheerio) return cheerio
try {
cheerio = await import("cheerio")
@@ -23,7 +23,7 @@ async function importCheerio () {
*
* @param url
*/
-export default async function doSearch (url) {
+export default async function doSearch(url) {
await importCheerio()
const { ascii2dUsePuppeteer, ascii2dResultMaxQuantity } = Config.picSearch
const callApi = ascii2dUsePuppeteer ? callAscii2dUrlApiWithPuppeteer : callAscii2dUrlApi
@@ -68,7 +68,7 @@ export default async function doSearch (url) {
const callAscii2dUrlApiWithPuppeteer = (imgUrl) => {
return getAscii2dWithPuppeteer(`${domain}/search/url/${imgUrl}`)
}
-const callAscii2dUrlApi = async (imgUrl) => {
+const callAscii2dUrlApi = async(imgUrl) => {
let res = await request.cfGet(`${domain}/search/url/${imgUrl}`).catch(
err => {
if (err.stack?.includes("legacy sigalg disallowed or unsupported")) {
@@ -87,22 +87,22 @@ const callAscii2dUrlApi = async (imgUrl) => {
*
* @param url
*/
-async function getAscii2dWithPuppeteer (url) {
+async function getAscii2dWithPuppeteer(url) {
return await puppeteer.get(url, "body > .container")
}
/**
*
* @param body
*/
-async function parse (body) {
+async function parse(body) {
const $ = cheerio.load(body, { decodeEntities: true })
return _.map($(".item-box"), (item) => {
const detail = $(".detail-box", item)
const hash = $(".hash", item)
const info = $(".info-box > .text-muted", item)
- const [image] = $(".image-box > img", item)
+ const [ image ] = $(".image-box > img", item)
- const [source, author] = $("a[rel=noopener]", detail)
+ const [ source, author ] = $("a[rel=noopener]", detail)
if (!source && !author) return
diff --git a/model/PicSearch/saucenao.js b/model/PicSearch/saucenao.js
index 178a90b..df590f4 100644
--- a/model/PicSearch/saucenao.js
+++ b/model/PicSearch/saucenao.js
@@ -7,7 +7,7 @@ import Ascii2D from "./ascii2d.js"
*
* @param url
*/
-export default async function doSearch (url) {
+export default async function doSearch(url) {
let res = await getSearchResult(url)
logger.debug("SauceNAO result:", res)
if (res.header.status != 0) throw new ReplyError("SauceNAO搜图,错误信息:" + res.header.message?.replace(/<.*?>/g, ""))
@@ -58,7 +58,7 @@ export default async function doSearch (url) {
* @param imgURL
* @param db
*/
-async function getSearchResult (imgURL, db = 999) {
+async function getSearchResult(imgURL, db = 999) {
logger.debug(`saucenao [${imgURL}]}`)
let api_key = Config.picSearch.SauceNAOApiKey
if (!api_key) throw new ReplyError("未配置SauceNAOApiKey,无法使用SauceNAO搜图,请在 https://saucenao.com/user.php?page=search-api 进行获取,请用指令:#设置SauceNAOapiKey 进行添加")
diff --git a/model/PicSearch/whatanime.js b/model/PicSearch/whatanime.js
index a73e1b8..f550e99 100644
--- a/model/PicSearch/whatanime.js
+++ b/model/PicSearch/whatanime.js
@@ -7,56 +7,56 @@ import _ from "lodash"
*
* @param imgURL
*/
-export default async function doSearch (imgURL) {
+export default async function doSearch(imgURL) {
let result = await getSearchResult(imgURL)
if (result.error) throw new ReplyError(result.error)
let {
- result: [{
- similarity,
- anilist, // 番剧 ID
- episode = "-", // 集数
- from, // 时间点
- video // 预览视频
- // image // 预览图片
- }]
+ result: [
+ {
+ similarity,
+ anilist, // 番剧 ID
+ episode = "-", // 集数
+ from, // 时间点
+ video // 预览视频
+ // image // 预览图片
+ }
+ ]
} = result
if (_.isEmpty(result)) throw new ReplyError("未获取到相关信息")
similarity = (similarity * 100).toFixed(2) // 相似度
const time = (() => {
const s = Math.floor(from)
const m = Math.floor(s / 60)
- const ms = [m, s % 60]
+ const ms = [ m, s % 60 ]
return ms.map(num => String(num).padStart(2, "0")).join(":")
})()
const AnimeInfo = await getAnimeInfo(anilist)
const { type, format, isAdult, title, startDate, endDate, coverImage } = AnimeInfo.data.Media
const { hideImg, hideImgWhenWhatanimeR18, whatanimeSendVideo } = Config.picSearch
- let msg = [
- `WhatAnime (${similarity}%)\n该截图出自第${episode}集的${time}\n`
- ]
+ let msg = [ `WhatAnime (${similarity}%)\n该截图出自第${episode}集的${time}\n` ]
if (!(hideImg || (hideImgWhenWhatanimeR18 && isAdult))) {
msg.push(segment.image(coverImage.large))
}
- const titles = _.uniq(["romaji", "native", "chinese"].map(k => title[k]).filter(v => v))
+ const titles = _.uniq([ "romaji", "native", "chinese" ].map(k => title[k]).filter(v => v))
msg.push(titles.join("\n"), `\n类型:${type}-${format}`, `\n开播:${date2str(startDate)}`)
if (endDate.year > 0) msg.push(`\n完结:${date2str(endDate)}`)
if (isAdult) msg.push("\nR18注意!")
- let msgs = [msg]
+ let msgs = [ msg ]
if (!isAdult && whatanimeSendVideo) {
msgs.push(await downFile(video))
}
return msgs
}
-const date2str = ({ year, month, day }) => [year, month, day].join("-")
+const date2str = ({ year, month, day }) => [ year, month, day ].join("-")
/**
* 取得搜番结果
* @param {string} url 图片地址
* @param {string} key whatanime token
* @returns {Promise} Prased JSON
*/
-async function getSearchResult (url, key = "") {
+async function getSearchResult(url, key = "") {
let host = "https://api.trace.moe"
return await request.get(`${host}/search`, {
params: {
@@ -96,7 +96,7 @@ query ($id: Int) {
* @param {number} id
* @returns {Promise} Prased JSON
*/
-async function getAnimeInfo (id) {
+async function getAnimeInfo(id) {
return await request.post("https://trace.moe/anilist/", {
data: {
query: animeInfoQuery,
@@ -109,7 +109,7 @@ async function getAnimeInfo (id) {
*
* @param url
*/
-async function downFile (url) {
+async function downFile(url) {
let path = `${Plugin_Path}/temp/whatanime/1.mp4`
logger.mark("[Yenai-Plugin][whatanime]下载预览视频")
await common.downFile(url, path)
diff --git a/model/Pixiv.js b/model/Pixiv.js
index 2c7f40e..4527bb3 100644
--- a/model/Pixiv.js
+++ b/model/Pixiv.js
@@ -9,13 +9,13 @@ import PixivApi from "./Pixiv/api.js"
/** API请求错误文案 */
export default new class Pixiv {
- constructor () {
+ constructor() {
this.ranktype = rankType
this.domain = "http://api.obfs.dev/api/pixiv"
this.PixivClient = new PixivApi(Config.pixiv.refresh_token)
}
- async loginInfo () {
+ async loginInfo() {
if (!this.PixivClient?.auth) {
await this.PixivClient.login()
}
@@ -32,7 +32,7 @@ export default new class Pixiv {
]
}
- get headers () {
+ get headers() {
if (Config.pixiv.pixivDirectConnection) {
return {
"Host": "i.pximg.net",
@@ -44,12 +44,12 @@ export default new class Pixiv {
}
}
- get proxy () {
+ get proxy() {
return Config.pixiv.pixivDirectConnection ? "i.pximg.net" : Config.pixiv.pixivImageProxy
}
/** 开始执行文案 */
- get startMsg () {
+ get startMsg() {
return _.sample(pixivMsg.start)
}
@@ -59,7 +59,7 @@ export default new class Pixiv {
* @param filter
* @returns {object}
*/
- async illust (ids, filter = false) {
+ async illust(ids, filter = false) {
const params = { id: ids }
let res = null
if (this.PixivClient.auth) {
@@ -84,7 +84,7 @@ export default new class Pixiv {
`传送门:https://www.pixiv.net/artworks/${id}`
]
if (filter && x_restrict) {
- let linkmsg = ["该作品不适合所有年龄段,请自行使用链接查看:"]
+ let linkmsg = [ "该作品不适合所有年龄段,请自行使用链接查看:" ]
if (url.length > 1) {
linkmsg.push(...url.map((item, index) => `https://pixiv.re/${id}-${index + 1}.jpg`))
} else {
@@ -104,7 +104,7 @@ export default new class Pixiv {
* @param {boolean} r18 是否为R18榜单
* @returns {Array}
*/
- async Rank (page = 1, date = "", mode = "周", r18 = false) {
+ async Rank(page = 1, date = "", mode = "周", r18 = false) {
// 转为大写
mode = _.toUpper(mode)
// 排行榜类型
@@ -138,7 +138,7 @@ export default new class Pixiv {
if (res.error) throw new ReplyError(res.error.message)
if (_.isEmpty(res.illusts)) throw new ReplyError("暂无数据,请等待榜单更新哦(。-ω-)zzz")
- let illusts = await Promise.all(res.illusts.map(async (item, index) => {
+ let illusts = await Promise.all(res.illusts.map(async(item, index) => {
let list = this._format(item)
let { id, title, user, tags, total_bookmarks, image_urls } = list
return [
@@ -177,7 +177,7 @@ export default new class Pixiv {
* @param {string} page 页数
* @returns {Array}
*/
- async vilipixSearchTags (tag, page = 1) {
+ async vilipixSearchTags(tag, page = 1) {
const api = "https://www.vilipix.com/api/v1/picture/public"
const params = {
limit: 30,
@@ -192,9 +192,7 @@ export default new class Pixiv {
if (page > pageall) throw new ReplyError("啊啊啊,淫家给不了你那么多辣d(ŐдŐ๑)")
- let list = [
- `当前为第${page}页,共${pageall}页,本页共${res.data.rows.length}张,总共${res.data.count}张`
- ]
+ let list = [ `当前为第${page}页,共${pageall}页,本页共${res.data.rows.length}张,总共${res.data.count}张` ]
if (page < pageall) {
list.push(`可使用 "#tag搜图${tag}第${page - 0 + 1}页" 翻页`)
}
@@ -218,7 +216,7 @@ export default new class Pixiv {
* @param isfilter
* @returns {*}
*/
- async searchTags (tag, page = 1, isfilter = true) {
+ async searchTags(tag, page = 1, isfilter = true) {
const params = {
word: tag,
page,
@@ -264,7 +262,7 @@ export default new class Pixiv {
* 获取热门tag
* @returns {Array}
*/
- async PopularTags () {
+ async PopularTags() {
let res = null
if (this.PixivClient.auth) {
res = await this.PixivClient.tags()
@@ -297,7 +295,7 @@ export default new class Pixiv {
* @param {boolean} isfilter 是否过滤敏感内容
* @returns {Array}
*/
- async userIllust (keyword, page = 1, isfilter = true) {
+ async userIllust(keyword, page = 1, isfilter = true) {
// 关键词搜索
if (!/^\d+$/.test(keyword)) {
let wordlist = null
@@ -366,7 +364,7 @@ export default new class Pixiv {
* @param {boolean} isfilter 是否过滤敏感内容
* @returns {Array} 可直接发送的消息数组
*/
- async searchUser (word, page = 1, isfilter = true) {
+ async searchUser(word, page = 1, isfilter = true) {
let params = {
word,
page,
@@ -381,7 +379,7 @@ export default new class Pixiv {
if (user.error) throw new ReplyError(user.error.message)
if (_.isEmpty(user.user_previews)) throw new ReplyError("呜呜呜,人家没有找到这个淫d(ŐдŐ๑)")
- let msg = await Promise.all(user.user_previews.slice(0, 10).map(async (item, index) => {
+ let msg = await Promise.all(user.user_previews.slice(0, 10).map(async(item, index) => {
let { id, name, profile_image_urls } = item.user
let ret = [
`${(page - 1) * 10 + index + 1}、`,
@@ -407,7 +405,7 @@ export default new class Pixiv {
* vilipix随机图片
* @returns {Array}
*/
- async vilipixRandomImg (limit) {
+ async vilipixRandomImg(limit) {
let api = `https://www.vilipix.com/api/v1/picture/recommand?limit=${limit}&offset=${_.random(1, 700)}`
let res = await request.get(api).then(res => res.json())
if (!res.data || !res.data.rows) throw new ReplyError("呜呜呜,没拿到瑟瑟的图片(˃ ⌑ ˂ഃ )")
@@ -429,7 +427,7 @@ export default new class Pixiv {
* @param isfilter
* @returns {*}
*/
- async relatedIllust (pid, isfilter = true) {
+ async relatedIllust(pid, isfilter = true) {
let params = { id: pid }
let res = null
if (this.PixivClient.auth) {
@@ -470,7 +468,7 @@ export default new class Pixiv {
* p站单图
* @param pro
*/
- async pximg (pro) {
+ async pximg(pro) {
let url = "https://image.anosu.top/pixiv/json"
const params = {
r18: pro ? 1 : 0,
@@ -498,9 +496,9 @@ export default new class Pixiv {
* @param {number} num 数量
* @returns {Promise}
*/
- async illustRecommended (num) {
+ async illustRecommended(num) {
let list = await this.PixivClient.illustRecommended()
- return Promise.all(_.take(list.illusts, num).map(async (item) => {
+ return Promise.all(_.take(list.illusts, num).map(async(item) => {
let { id, title, user, tags, total_bookmarks, image_urls } = this._format(item)
return [
`标题:${title}\n`,
@@ -519,7 +517,7 @@ export default new class Pixiv {
* @param {string} url
* @returns {Promise}
*/
- async _requestPixivImg (url) {
+ async _requestPixivImg(url) {
url = url.replace("i.pximg.net", this.proxy)
logger.debug(`pixiv getImg URL: ${url}`)
let headers = /s.pximg.net/.test(url) ? undefined : this.headers
@@ -543,7 +541,7 @@ export default new class Pixiv {
* illust_ai_type 是否为AI作品
* visible 是否为可见作品
*/
- _format (illusts) {
+ _format(illusts) {
let url = []
let { tags, meta_single_page, meta_pages } = illusts
tags = _.uniq(_.compact(_.flattenDeep(tags?.map(item => Object.values(item)))))
diff --git a/model/Pixiv/api.js b/model/Pixiv/api.js
index d19ce1a..247281e 100644
--- a/model/Pixiv/api.js
+++ b/model/Pixiv/api.js
@@ -4,7 +4,7 @@ import { login, headers } from "./login.js"
import { timeToSeconds, getNoonTomorrow } from "./utils.js"
export default class PixivApi {
- constructor (refresh_token) {
+ constructor(refresh_token) {
this.baseUrl = "https://app-api.pixiv.net/"
this.headers = headers
this._once = false
@@ -13,7 +13,7 @@ export default class PixivApi {
this.auth = null
}
- async login () {
+ async login() {
if (!this.refresh_token) {
throw new ReplyError("[Yenai][Pixiv] 未配置refresh_token刷新令牌")
}
@@ -23,7 +23,7 @@ export default class PixivApi {
this.auth = response
}
- async request (target, options = {}, caching = false) {
+ async request(target, options = {}, caching = false) {
if (!this.auth) await this.login()
try {
return await this._get(target, options, caching)
@@ -38,7 +38,7 @@ export default class PixivApi {
}
}
- async _get (target, options = {}, cache) {
+ async _get(target, options = {}, cache) {
const headers = {
...this.headers,
Authorization: `Bearer ${this.access_token}`
@@ -63,11 +63,11 @@ export default class PixivApi {
return data
}
- async tags () {
+ async tags() {
return this.request("v1/trending-tags/illust")
}
- async rank ({
+ async rank({
mode = "week",
date = moment().subtract(moment().utcOffset(9).hour() >= 12 ? 1 : 2, "days").format("YYYY-MM-DD"),
page = 1,
@@ -82,7 +82,7 @@ export default class PixivApi {
}, getNoonTomorrow())
}
- async illust ({ id }) {
+ async illust({ id }) {
return this.request("v1/illust/detail", {
params: {
illust_id: id
@@ -90,7 +90,7 @@ export default class PixivApi {
})
}
- async member ({ id }) {
+ async member({ id }) {
return this.request("v1/user/detail", {
params: {
illust_id: id
@@ -98,7 +98,7 @@ export default class PixivApi {
})
}
- async member_illust ({
+ async member_illust({
id,
page = 1,
size = 30,
@@ -113,7 +113,7 @@ export default class PixivApi {
})
}
- async search ({
+ async search({
word,
page = 1,
size = 30,
@@ -132,7 +132,7 @@ export default class PixivApi {
})
}
- async search_user ({
+ async search_user({
word,
page = 1,
size = 30
@@ -148,7 +148,7 @@ export default class PixivApi {
)
}
- async related ({
+ async related({
id,
page = 1,
size = 30
@@ -164,7 +164,7 @@ export default class PixivApi {
)
}
- async illustRecommended (params = {}) {
+ async illustRecommended(params = {}) {
return await this.request("v1/illust/recommended", params)
}
}
diff --git a/model/Pixiv/login.js b/model/Pixiv/login.js
index ab4749f..02f73bd 100644
--- a/model/Pixiv/login.js
+++ b/model/Pixiv/login.js
@@ -17,7 +17,7 @@ export const headers = {
"Connection": "Keep-Alive"
}
-export async function login (refresh_token) {
+export async function login(refresh_token) {
const local_time = moment().format()
let _headers = {
...headers,
diff --git a/model/Pixiv/utils.js b/model/Pixiv/utils.js
index 3e70cbb..059ae92 100644
--- a/model/Pixiv/utils.js
+++ b/model/Pixiv/utils.js
@@ -1,6 +1,6 @@
import moment from "moment"
-export function timeToSeconds (time) {
+export function timeToSeconds(time) {
let seconds = 0
let timeArray = time.split(" ")
for (let i = 0; i < timeArray.length; i++) {
@@ -26,7 +26,7 @@ export function timeToSeconds (time) {
return seconds
}
-export function getNoonTomorrow () {
+export function getNoonTomorrow() {
const now = moment() // 获取当前时间
const noonToday = moment().startOf("day").add(12, "hours") // 获取今天中午12点的时间
const noonTomorrow = moment().add(1, "day").startOf("day").add(12, "hours") // 获取明天中午12点的时间
diff --git a/model/State/BotState.js b/model/State/BotState.js
index b70fd22..1be4b83 100644
--- a/model/State/BotState.js
+++ b/model/State/BotState.js
@@ -4,10 +4,10 @@ import { status } from "../../constants/other.js"
import { createRequire } from "module"
const require = createRequire(import.meta.url)
-export default async function getBotState (botList) {
+export default async function getBotState(botList) {
const defaultAvatar = `../../../../../plugins/${Plugin_Name}/resources/state/img/default_avatar.jpg`
- const dataPromises = botList.map(async (i) => {
+ const dataPromises = botList.map(async(i) => {
const bot = Bot[i]
if (!bot?.uin) return ""
diff --git a/model/State/CPU.js b/model/State/CPU.js
index 6c7727b..2ce13f1 100644
--- a/model/State/CPU.js
+++ b/model/State/CPU.js
@@ -3,7 +3,7 @@ import { si, osInfo } from "./index.js"
import { Circle } from "./utils.js"
/** 获取CPU占用 */
-export default async function getCpuInfo () {
+export default async function getCpuInfo() {
let { currentLoad: { currentLoad }, cpuCurrentSpeed } = await si.get({
currentLoad: "currentLoad",
cpuCurrentSpeed: "max,avg"
diff --git a/model/State/DependencyChecker.js b/model/State/DependencyChecker.js
index d77eff0..c2d8002 100644
--- a/model/State/DependencyChecker.js
+++ b/model/State/DependencyChecker.js
@@ -1,7 +1,7 @@
export let si = false
export let osInfo = null
-export async function initDependence () {
+export async function initDependence() {
if (si) return si
try {
si = await import("systeminformation")
diff --git a/model/State/FastFetch.js b/model/State/FastFetch.js
index 105868f..f4a309e 100644
--- a/model/State/FastFetch.js
+++ b/model/State/FastFetch.js
@@ -4,7 +4,7 @@ import { execSync } from "../../tools/index.js"
* 获取FastFetch
* @param e
*/
-export default async function getFastFetch (e) {
+export default async function getFastFetch(e) {
if (process.platform == "win32" && !/pro/.test(e.msg)) return ""
let ret = await execSync("bash plugins/yenai-plugin/resources/state/state.sh")
if (ret.error) {
diff --git a/model/State/FsSize.js b/model/State/FsSize.js
index 546df53..8cff2cd 100644
--- a/model/State/FsSize.js
+++ b/model/State/FsSize.js
@@ -6,7 +6,7 @@ import { si } from "./index.js"
* 获取硬盘
* @returns {*}
*/
-export default async function getFsSize () {
+export default async function getFsSize() {
// 去重
let HardDisk = _.uniqWith(await si.fsSize(),
(a, b) =>
diff --git a/model/State/GPU.js b/model/State/GPU.js
index bd04dd1..2775676 100644
--- a/model/State/GPU.js
+++ b/model/State/GPU.js
@@ -4,7 +4,7 @@ import { initDependence } from "./DependencyChecker.js"
let isGPU = false;
-(async function initGetIsGPU () {
+(async function initGetIsGPU() {
if (!await initDependence()) return
const { controllers } = await si.graphics()
// 初始化GPU获取
@@ -16,7 +16,7 @@ let isGPU = false;
})()
/** 获取GPU占用 */
-export default async function getGPU () {
+export default async function getGPU() {
if (!isGPU) return false
try {
const { controllers } = await si.graphics()
diff --git a/model/State/Monitor.js b/model/State/Monitor.js
index 488b1bf..fa56c7c 100644
--- a/model/State/Monitor.js
+++ b/model/State/Monitor.js
@@ -5,7 +5,7 @@ import { initDependence } from "./DependencyChecker.js"
import { addData, getFileSize } from "./utils.js"
export default new class monitor {
- constructor () {
+ constructor() {
// 网络
this._network = null
// 读写速率
@@ -42,31 +42,31 @@ export default new class monitor {
this.init()
}
- set network (value) {
+ set network(value) {
if (_.isNumber(value[0]?.tx_sec) && _.isNumber(value[0]?.rx_sec)) {
this._network = value
- addData(this.chartData.network.upload, [Date.now(), value[0].tx_sec])
- addData(this.chartData.network.download, [Date.now(), value[0].rx_sec])
+ addData(this.chartData.network.upload, [ Date.now(), value[0].tx_sec ])
+ addData(this.chartData.network.download, [ Date.now(), value[0].rx_sec ])
}
}
- get network () {
+ get network() {
return this._network
}
- set fsStats (value) {
+ set fsStats(value) {
if (_.isNumber(value?.wx_sec) && _.isNumber(value?.rx_sec)) {
this._fsStats = value
- addData(this.chartData.fsStats.writeSpeed, [Date.now(), value.wx_sec])
- addData(this.chartData.fsStats.readSpeed, [Date.now(), value.rx_sec])
+ addData(this.chartData.fsStats.writeSpeed, [ Date.now(), value.wx_sec ])
+ addData(this.chartData.fsStats.readSpeed, [ Date.now(), value.rx_sec ])
}
}
- get fsStats () {
+ get fsStats() {
return this._fsStats
}
- async init () {
+ async init() {
if (!await initDependence()) return
// 给有问题的用户关闭定时器
@@ -75,13 +75,13 @@ export default new class monitor {
if (Config.state.statusPowerShellStart) si.powerShellStart()
this.getData()
// 网速
- const Timer = setInterval(async () => {
+ const Timer = setInterval(async() => {
let data = await this.getData()
if (_.isEmpty(data)) clearInterval(Timer)
}, 60000)
}
- async getData () {
+ async getData() {
let data = await si.get(this.valueObject)
_.forIn(data, (value, key) => {
if (_.isEmpty(value)) {
@@ -98,16 +98,16 @@ export default new class monitor {
this.fsStats = fsStats
this.network = networkStats
if (_.isNumber(active)) {
- addData(this.chartData.ram, [Date.now(), active])
+ addData(this.chartData.ram, [ Date.now(), active ])
}
if (_.isNumber(currentLoad)) {
- addData(this.chartData.cpu, [Date.now(), currentLoad])
+ addData(this.chartData.cpu, [ Date.now(), currentLoad ])
}
return data
}
// 获取读取速率
- get DiskSpeed () {
+ get DiskSpeed() {
if (!this.fsStats ||
this.fsStats.rx_sec == null ||
this.fsStats.wx_sec == null
@@ -124,7 +124,7 @@ export default new class monitor {
* 获取网速
* @returns {object}
*/
- get getNetwork () {
+ get getNetwork() {
let network = _.cloneDeep(this.network)?.[0]
if (!network || network.rx_sec == null || network.tx_sec == null) {
return false
diff --git a/model/State/NetworkLatency.js b/model/State/NetworkLatency.js
index c530604..689e76d 100644
--- a/model/State/NetworkLatency.js
+++ b/model/State/NetworkLatency.js
@@ -1,7 +1,7 @@
import request from "../../lib/request/request.js"
import { Config } from "../../components/index.js"
-export default function getNetworTestList () {
+export default function getNetworTestList() {
let { psTestSites, psTestTimeout } = Config.state
if (psTestSites) {
let psTest = psTestSites?.map(i => getNetworkLatency(i.url, psTestTimeout).then(res => {
@@ -21,7 +21,7 @@ export default function getNetworTestList () {
* @param {number} [timeoutTime] 超时时间
* @returns {string}
*/
-async function getNetworkLatency (url, timeoutTime = 5000) {
+async function getNetworkLatency(url, timeoutTime = 5000) {
const AbortController = globalThis.AbortController || await import("abort-controller")
const controller = new AbortController()
diff --git a/model/State/NodeInfo.js b/model/State/NodeInfo.js
index 1176cf5..83897d5 100644
--- a/model/State/NodeInfo.js
+++ b/model/State/NodeInfo.js
@@ -2,7 +2,7 @@ import { getFileSize, Circle } from "./utils.js"
import os from "os"
/** 获取nodejs内存情况 */
-export default function getNodeInfo () {
+export default function getNodeInfo() {
let memory = process.memoryUsage()
// 总共
let rss = getFileSize(memory.rss)
diff --git a/model/State/OtherInfo.js b/model/State/OtherInfo.js
index d443527..72b34f4 100644
--- a/model/State/OtherInfo.js
+++ b/model/State/OtherInfo.js
@@ -6,7 +6,7 @@ import Monitor from "./Monitor.js"
import fs from "fs"
import { Version } from "../../components/index.js"
-export default function otherInfi () {
+export default function otherInfi() {
let otherInfo = []
// 其他信息
otherInfo.push({
@@ -28,11 +28,11 @@ export default function otherInfi () {
return _.compact(otherInfo)
}
-function getSystime () {
+function getSystime() {
return formatDuration(os.uptime(), "dd天hh小时mm分", false)
}
-function getPluginNum () {
+function getPluginNum() {
let str = "./plugins"
let arr = fs.readdirSync(str)
let plugin = []
@@ -42,13 +42,13 @@ function getPluginNum () {
plugin.push(val)
}
})
- let del = ["example", "genshin", "other", "system", "bin"]
+ let del = [ "example", "genshin", "other", "system", "bin" ]
plugin = plugin.filter(item => !del.includes(item))
const plugins = plugin?.length || 0
const js = fs.readdirSync("./plugins/example")?.filter(item => item.includes(".js"))?.length || 0
return `${plugins} plugin | ${js} js`
}
-export function getCopyright () {
+export function getCopyright() {
return `Created By ${Version.name}${Version.yunzai} & Yenai-Plugin${Version.ver} & Node ${process.version}`
}
diff --git a/model/State/RAM.js b/model/State/RAM.js
index 68b4cf1..ddbeb78 100644
--- a/model/State/RAM.js
+++ b/model/State/RAM.js
@@ -2,7 +2,7 @@ import { getFileSize, Circle } from "./utils.js"
import os from "os"
/** 获取当前内存占用 */
-export default function getMemUsage () {
+export default function getMemUsage() {
// 内存使用率
let MemUsage = (1 - os.freemem() / os.totalmem()).toFixed(2)
// 空闲内存
diff --git a/model/State/index.js b/model/State/index.js
index 8c94a06..72d7d18 100644
--- a/model/State/index.js
+++ b/model/State/index.js
@@ -14,7 +14,7 @@ import getOtherInfo, { getCopyright } from "./OtherInfo.js"
export { osInfo, si }
-export async function getData (e) {
+export async function getData(e) {
// 可视化数据
let visualData = _.compact(await Promise.all([
// CPU板块
@@ -34,13 +34,13 @@ export async function getData (e) {
let NetworTestList = getNetworTestList()
promiseTaskList.push(NetworTestList)
- let [FastFetch, HardDisk, psTest] = await Promise.all(promiseTaskList)
+ let [ FastFetch, HardDisk, psTest ] = await Promise.all(promiseTaskList)
/** bot列表 */
let BotList = _getBotList(e)
let isBotIndex = /pro/.test(e.msg) && BotList.length > 1
return {
BotStatusList: await getBotState(BotList),
- chartData: JSON.stringify(common.checkIfEmpty(Monitor.chartData, ["echarts_theme", "cpu", "ram"]) ? undefined : Monitor.chartData),
+ chartData: JSON.stringify(common.checkIfEmpty(Monitor.chartData, [ "echarts_theme", "cpu", "ram" ]) ? undefined : Monitor.chartData),
visualData,
otherInfo: getOtherInfo(),
psTest: _.isEmpty(psTest) ? undefined : psTest,
@@ -53,9 +53,9 @@ export async function getData (e) {
}
}
-function _getBotList (e) {
+function _getBotList(e) {
/** bot列表 */
- let BotList = [e.self_id]
+ let BotList = [ e.self_id ]
if (e.msg.includes("pro")) {
if (Array.isArray(Bot?.uin)) {
diff --git a/model/State/utils.js b/model/State/utils.js
index 1c248a3..196c290 100644
--- a/model/State/utils.js
+++ b/model/State/utils.js
@@ -7,7 +7,7 @@ import _ from "lodash"
* @param {number} [maxLen] - 数组允许的最大长度,默认值为60
* @returns {void}
*/
-export function addData (arr, data, maxLen = 60) {
+export function addData(arr, data, maxLen = 60) {
if (data === null || data === undefined) return
// 如果数组长度超过允许的最大值,删除第一个元素
if (arr.length >= maxLen) {
@@ -24,7 +24,7 @@ export function addData (arr, data, maxLen = 60) {
* @param {boolean} [isSuffix] - 如果为 true,则在所得到的大小后面加上 kb、mb、gb、tb 等后缀.
* @returns {string} 文件大小格式转换后的字符串.
*/
-export function getFileSize (size, isByte = true, isSuffix = true) { // 把字节转换成正常文件大小
+export function getFileSize(size, isByte = true, isSuffix = true) { // 把字节转换成正常文件大小
if (size == null || size == undefined) return 0
let num = 1024.00 // byte
if (isByte && size < num) {
@@ -47,7 +47,7 @@ export function getFileSize (size, isByte = true, isSuffix = true) { // 把字
* @param {number} res 百分比小数
* @returns {{per:number,color:string}} per - stroke-dashoffset属性 color - 进度条颜色
*/
-export function Circle (res) {
+export function Circle(res) {
let perimeter = 3.14 * 80
let per = perimeter - perimeter * res
let color = "--low-color"
diff --git a/model/api/QQApi.js b/model/api/QQApi.js
index 85833f8..7b69a33 100644
--- a/model/api/QQApi.js
+++ b/model/api/QQApi.js
@@ -7,7 +7,7 @@ import { sleep } from "../../tools/index.js"
/** QQ接口 */
export default class {
- constructor (e) {
+ constructor(e) {
this.e = e
this.Bot = e.bot ?? Bot
this.headers = {
@@ -18,7 +18,7 @@ export default class {
}
}
- getGtk (data) {
+ getGtk(data) {
let ck = common.getck(data, this.Bot)
// eslint-disable-next-line no-var
for (var e = ck.p_skey || "", n = 5381, r = 0, o = e.length; r < o; ++r) {
@@ -33,7 +33,7 @@ export default class {
* @param {number} pos 偏移量
* @returns {object} QQ空间数据
*/
- async getQzone (num = 20, pos = 0) {
+ async getQzone(num = 20, pos = 0) {
let url = `https://user.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?uin=${this.Bot.uin}&ftype=0&sort=0&pos=${pos}&num=${num}&replynum=100&g_tk=${this.Bot.bkn}&code_version=1&format=json&need_private_comment=1`
return await fetch(url, {
headers: {
@@ -47,7 +47,7 @@ export default class {
* @param {string} tid tid参数
* @param {string} t1_source t1_source参数
*/
- async delQzone (tid, t1_source) {
+ async delQzone(tid, t1_source) {
let url = `https://user.qzone.qq.com/proxy/domain/taotao.qzone.qq.com/cgi-bin/emotion_cgi_delete_v6?&g_tk=${this.Bot.bkn}`
// 发送请求
return await fetch(url, {
@@ -60,7 +60,7 @@ export default class {
}
/** 删除全部说说 */
- async delQzoneAll () {
+ async delQzoneAll() {
let ck = common.getck("qzone.qq.com", this.Bot)
return await fetch(`http://xiaobai.klizi.cn/API/qqgn/ss_empty.php?data=&uin=${this.Bot.uin}&skey=${ck.skey}&pskey=${ck.p_skey}`).then(res => res.text()).catch(err => logger.error(err))
// let num = 0
@@ -80,7 +80,7 @@ export default class {
* @param con
* @param img
*/
- async setQzone (con, img) {
+ async setQzone(con, img) {
let ck = common.getck("qzone.qq.com", this.Bot)
if (img) {
@@ -104,7 +104,7 @@ export default class {
* @param {number} start 偏移量/开始的位置
* @returns {*}
*/
- async getQzoneMsgb (num = 0, start = 0) {
+ async getQzoneMsgb(num = 0, start = 0) {
let url = `https://user.qzone.qq.com/proxy/domain/m.qzone.qq.com/cgi-bin/new/get_msgb?uin=${this.Bot.uin}&hostUin=${this.Bot.uin}&start=${start}&s=0.45779069937151884&format=json&num=${num}&inCharset=utf-8&outCharset=utf-8&g_tk=${this.Bot.bkn}`
return await fetch(url, {
headers: {
@@ -119,7 +119,7 @@ export default class {
* @param {*} uinId
* @returns {*}
*/
- async delQzoneMsgb (id, uinId) {
+ async delQzoneMsgb(id, uinId) {
let delurl = `https://h5.qzone.qq.com/proxy/domain/m.qzone.qq.com/cgi-bin/new/del_msgb?&g_tk=${this.Bot.bkn}`
return await fetch(delurl, {
method: "POST",
@@ -131,7 +131,7 @@ export default class {
}
/** 删除全部留言 */
- async delQzoneMsgbAll () {
+ async delQzoneMsgbAll() {
let ck = common.getck("qzone.qq.com", this.Bot)
return await fetch(`http://xiaobai.klizi.cn/API/qqgn/qzone_emptymsgb.php?data=&uin=${this.Bot.uin}&skey=${ck.skey}&pskey=${ck.p_skey}`).then(res => res.text()).catch(err => logger.error(err))
// let num = 0
@@ -154,7 +154,7 @@ export default class {
* @param s
* @returns {object}
*/
- async getAnnouncelist (group_id, s = 0) {
+ async getAnnouncelist(group_id, s = 0) {
let n = s ? 1 : 20
let url = `https://web.qun.qq.com/cgi-bin/announce/get_t_list?bkn=${this.Bot.bkn}&qid=${group_id}&ft=23&s=${s - 1}&n=${n}`
let res = await fetch(url, { headers: { Cookie: this.Bot.cookies["qun.qq.com"] } }).then(res => res.json()).catch(err => logger.error(err))
@@ -174,7 +174,7 @@ export default class {
* @param {number} group_id 发送群号
* @param {string} msg 发送内容
*/
- async setAnnounce (group_id, msg) {
+ async setAnnounce(group_id, msg) {
let url = `https://web.qun.qq.com/cgi-bin/announce/add_qun_notice?bkn=${this.Bot.bkn}`
return await fetch(url, {
method: "POST",
@@ -190,7 +190,7 @@ export default class {
* @param {number} group_id 群号
* @param {number} num 序号
*/
- async delAnnounce (group_id, num) {
+ async delAnnounce(group_id, num) {
let fid = await this.getAnnouncelist(group_id, num)
if (!fid) return false
@@ -212,7 +212,7 @@ export default class {
* 群星级
* @param group_id
*/
- async getCreditLevelInfo (group_id) {
+ async getCreditLevelInfo(group_id) {
let url = `https://qqweb.qq.com/c/activedata/get_credit_level_info?bkn=${this.Bot.bkn}&uin=${this.Bot.uin}&gc=${group_id}`
return await fetch(url, {
headers: {
@@ -227,7 +227,7 @@ export default class {
* 查看本群龙王
* @param group_id
*/
- async dragon (group_id) {
+ async dragon(group_id) {
let url = `https://qun.qq.com/interactive/honorlist?gc=${group_id}&type=1&_wv=3&_wwv=129`
let res = await fetch(url, { headers: { Cookie: this.Bot.cookies["qun.qq.com"] } })
.then(res => res.text()).catch(err => logger.error(err))
@@ -240,7 +240,7 @@ export default class {
* 开关好友添加
* @param {number} type 1关闭2开启
*/
- async addFriendSwitch (type) {
+ async addFriendSwitch(type) {
let url = `https://ti.qq.com/proxy/domain/oidb.tim.qq.com/v3/oidbinterface/oidb_0x587_75?sdkappid=39998&actype=2&bkn=${this.Bot.bkn}`
return await fetch(url, {
method: "POST",
@@ -261,7 +261,7 @@ export default class {
* @param {*} a
* @returns {*}
*/
- async setFriendType (at, q = "", a = "") {
+ async setFriendType(at, q = "", a = "") {
const type = {
1: "0",
2: "1",
@@ -284,7 +284,7 @@ export default class {
* 设置戳一戳开关
* @param {number} isclose 0为开启1为关闭
*/
- async setcyc (isclose) {
+ async setcyc(isclose) {
let url = `https://zb.vip.qq.com/srf/QC_UniBusinessLogicServer_UniBusinessLogicObj/uniSet?g_tk=${this.Bot.bkn}`
return await fetch(url, {
method: "POST",
@@ -320,7 +320,7 @@ export default class {
* 今日打卡
* @param groupId
*/
- async signInToday (groupId) {
+ async signInToday(groupId) {
let body = JSON.stringify({
dayYmd: moment().format("YYYYMMDD"),
offset: 0,
@@ -341,7 +341,7 @@ export default class {
* @param {number} groupId 群号
* @param {string} time true为7天false为昨天
*/
- async SpeakRank (groupId, time = false) {
+ async SpeakRank(groupId, time = false) {
let url = `https://qun.qq.com/m/qun/activedata/proxy/domain/qun.qq.com/cgi-bin/manager/report/list?bkn=${this.Bot.bkn}&gc=${groupId}&type=0&start=0&time=${time ? 1 : 0}`
return await fetch(url, {
headers: this.headers
@@ -353,7 +353,7 @@ export default class {
* @param {string} groupId 群号
* @param {string} time true为7天false为昨天
*/
- async groupData (groupId, time = false) {
+ async groupData(groupId, time = false) {
let url = `https://qun.qq.com/m/qun/activedata/proxy/domain/qun.qq.com/cgi-bin/manager/report/index?gc=${groupId}&time=${time ? 1 : 0}&bkn=${this.Bot.bkn}`
return await fetch(url, {
headers: this.headers
@@ -369,7 +369,7 @@ export default class {
* 字符列表
* @returns {*}
*/
- async luckylist (groupId, start = 0, limit = 10) {
+ async luckylist(groupId, start = 0, limit = 10) {
let body = JSON.stringify({
group_code: groupId,
start,
@@ -389,7 +389,7 @@ export default class {
* @param {string} group_id 群号
* @param {string} id 字符id
*/
- async equipLucky (group_id, id) {
+ async equipLucky(group_id, id) {
let body = JSON.stringify({
group_code: group_id,
word_id: id
@@ -407,7 +407,7 @@ export default class {
* @param {string} group_id 群号
* @returns {*}
*/
- async drawLucky (group_id) {
+ async drawLucky(group_id) {
let body = JSON.stringify({
group_code: group_id
})
@@ -424,7 +424,7 @@ export default class {
* @param {number} groupId 群号
* @param {boolean} type
*/
- async swichLucky (groupId, type) {
+ async swichLucky(groupId, type) {
let body = JSON.stringify({
group_code: groupId,
cmd: type ? 1 : 2
@@ -443,7 +443,7 @@ export default class {
* @param {Array} member 要踢的人的数组
* @returns {*}
*/
- async deleteGroupMember (groupId, member) {
+ async deleteGroupMember(groupId, member) {
let res = []
for (let item of _.chunk(member, 20)) {
let data = {
@@ -471,7 +471,7 @@ export default class {
* @param {string|number} userId QQ号码
* @returns {Promise