⚗️ 新增匿名发送消息,新增对方正在输入事件通知

This commit is contained in:
yeyang
2023-03-28 00:19:43 +08:00
parent 42112dc29a
commit 545ef68dfd
23 changed files with 651 additions and 562 deletions

View File

@@ -1,3 +1,9 @@
# 1.1.6
* 新增**匿名**发送消息
* 优化部分代码
* 新增`对方正在输入`事件通知
# 1.1.5
* 新增`#椰奶涩涩帮助`ⁿᵉʷ

View File

@@ -65,7 +65,7 @@ export class NewBika extends plugin {
let regRet = e.msg.match(searchReg)
let page = common.translateChinaNum(regRet[5])
await Bika.search(regRet[3], page, regRet[2])
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => { e.reply(err.message) })
}
@@ -77,7 +77,7 @@ export class NewBika extends plugin {
let page = common.translateChinaNum(regRet[4])
let order = common.translateChinaNum(regRet[6])
await Bika.comicPage(regRet[2], page, order)
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => { e.reply(err.message) })
}
@@ -86,7 +86,7 @@ export class NewBika extends plugin {
if (!await this._Authentication(e)) return
let number = e.msg.match(/\d+/) - 1
await Bika.viewComicPage(number)
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => { e.reply(err.message) })
}
@@ -94,7 +94,7 @@ export class NewBika extends plugin {
async nextComicPage (e) {
if (!await this._Authentication(e)) return
await Bika.next()
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -102,7 +102,7 @@ export class NewBika extends plugin {
async nextChapter (e) {
if (!await this._Authentication(e)) return
await Bika.next('chapter')
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -111,7 +111,7 @@ export class NewBika extends plugin {
if (!await this._Authentication(e)) return
e.reply(Pixiv.startMsg)
await Bika.categories()
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => { e.reply(err.message) })
}
@@ -121,7 +121,7 @@ export class NewBika extends plugin {
e.reply(Pixiv.startMsg)
let id = e.msg.match(new RegExp(`#?${Prefix}(详情|细节)(.*)`))[3]
await Bika.comicDetail(id)
.then(res => common.getRecallsendMsg(e, res, { oneMsg: true }))
.then(res => common.recallSendForwardMsg(e, res, { oneMsg: true }))
.catch(err => { e.reply(err.message) })
}

View File

@@ -238,7 +238,7 @@ export class Fun extends plugin {
item++
}
}
common.getRecallsendMsg(e, msg)
common.recallSendForwardMsg(e, msg)
return true
}
@@ -250,7 +250,7 @@ export class Fun extends plugin {
let keywords = e.msg.replace(/#|acg/g, '').trim()
await funApi.pandadiu(keywords)
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -262,7 +262,7 @@ export class Fun extends plugin {
// 获取类型
const { type, page } = heisiType[e.msg.match(/#?来点(.*)/)[1]]
await funApi.heisiwu(type, page)
.then(res => common.getRecallsendMsg(e, _.take(res, 20)))
.then(res => common.recallSendForwardMsg(e, _.take(res, 20)))
.catch(err => e.reply(err.message))
}
@@ -273,7 +273,7 @@ export class Fun extends plugin {
e.reply(START_EXECUTION)
let regRet = e.msg.match(/#?来点神秘图(s)?(.*)/)
await funApi.mengdui(regRet[2], regRet[1])
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -282,7 +282,7 @@ export class Fun extends plugin {
// 开始执行
e.reply(START_EXECUTION)
await funApi.xiuren(e.msg.replace(/#?来点/, ''))
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}

View File

@@ -1,123 +0,0 @@
import plugin from '../../../lib/plugins/plugin.js'
import { common } from '../model/index.js'
import { Config } from '../components/index.js'
/** 好友通知 */
export class NoticeFriends extends plugin {
constructor () {
super({
name: '椰奶好友通知',
event: 'notice.friend',
priority: 5000
})
}
async accept (e) {
let msg
let forwardMsg
switch (e.sub_type) {
case 'increase': {
if (!Config.Notice.friendNumberChange) return false
logger.mark('[椰奶]新增好友')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[通知 - 新增好友]\n',
`好友QQ${e.user_id}\n`,
`好友昵称:${e.nickname}`
]
break
}
case 'decrease': {
if (!Config.Notice.friendNumberChange) return false
logger.mark('[椰奶]好友减少')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[通知 - 好友减少]\n',
`好友QQ${e.user_id}\n`,
`好友昵称:${e.nickname}`
]
break
}
case 'recall': {
if (!Config.Notice.PrivateRecall) return false
if (e.user_id == Bot.uin) return false
// 主人撤回
if (Config.masterQQ.includes(e.user_id)) return false
logger.mark('[椰奶]好友撤回')
// 读取
let res = JSON.parse(
await redis.get(`notice:messagePrivate:${e.message_id}`)
)
// 无数据 return
if (!res) return false
const msgType = {
flash: {
msg: () => false,
type: ['[闪照]\n', '撤回闪照:', segment.image(res[0].url)]
},
record: {
msg: () => segment.record(res[0].url),
type: '[语音]'
},
video: {
msg: () => segment.video(res[0].file),
type: '[视频]'
},
xml: {
msg: () => res,
type: '[合并消息]'
}
}
if (msgType[res[0].type]) {
forwardMsg = msgType[res[0].type].msg()
res = msgType[res[0].type].type
}
// 消息
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 好友撤回消息]\n',
`好友QQ${e.user_id}\n`,
`撤回时间:${formatDate(e.time)}\n`,
'撤回消息:',
...res
]
break
}
case 'poke': {
if (!Config.Notice.privateMessage) return false
logger.mark('[椰奶]好友戳一戳')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 戳一戳]\n',
`来源QQ${e.user_id}`
]
break
}
default:
return false
}
await common.sendMasterMsg(msg)
if (forwardMsg) await common.sendMasterMsg(forwardMsg)
}
}
/** 时间转换 */
function formatDate (time) {
let now = new Date(parseFloat(time) * 1000)
// 月
let month = now.getMonth() + 1
// 日
let date = now.getDate()
// 补0
if (month >= 1 && month <= 9) month = '0' + month
if (date >= 0 && date <= 9) date = '0' + date
// 时
let hour = now.getHours()
// 分
let minute = now.getMinutes()
// 补0
if (hour >= 1 && hour <= 9) hour = '0' + hour
if (minute >= 0 && minute <= 9) minute = '0' + minute
return `${month}-${date} ${hour}:${minute} `
}

View File

@@ -1,278 +0,0 @@
import plugin from '../../../lib/plugins/plugin.js'
import { common } from '../model/index.js'
import { Config } from '../components/index.js'
import moment from 'moment'
/** 群通知 */
export class NoticeGroup extends plugin {
constructor () {
super({
name: '椰奶群通知',
event: 'notice.group',
priority: 2000
})
}
async accept (e) {
let msg
let forwardMsg
switch (e.sub_type) {
case 'increase': {
if (e.user_id === Bot.uin) {
if (!Config.getGroup(e.group_id).groupNumberChange) return false
logger.mark('[椰奶]新增群聊')
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
'[通知 - 新增群聊]\n',
`新增群号:${e.group_id}`
]
} else {
if (!Config.getGroup(e.group_id).groupMemberNumberChange) return false
logger.mark('[椰奶]新增群员')
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
'[通知 - 新增群员]\n',
`群号:${e.group_id}\n`,
`新成员QQ${e.user_id}\n`,
`新成员昵称:${e.nickname}`
]
}
break
}
case 'decrease': {
if (e.dismiss) {
if (!Config.getGroup(e.group_id).groupNumberChange) return false
logger.mark('[椰奶]群聊被解散')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群聊被解散]\n',
`操作人QQ${e.operator_id}\n`,
`解散群号:${e.group_id}`
]
} else if (e.user_id === Bot.uin && e.operator_id !== Bot.uin) {
if (!Config.getGroup(e.group_id).groupNumberChange) return false
logger.mark('[椰奶]机器人被踢')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人被踢]\n',
`操作人QQ${e.operator_id}\n`,
`被踢群号:${e.group_id}`
]
} else if (e.user_id === Bot.uin && e.operator_id === Bot.uin) {
if (!Config.getGroup(e.group_id).groupNumberChange) return false
logger.mark('[椰奶]机器人退群')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人退群]\n',
`退出群号:${e.group_id}`
]
} else if (e.operator_id === e.user_id) {
if (!Config.getGroup(e.group_id).groupMemberNumberChange) return false
logger.mark('[椰奶]群员退群')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群员退群]\n',
`退群人QQ${e.user_id}\n`,
`退群人昵称:${e.member.nickname}\n`,
`退群人群名片:${e.member.card}\n`,
`退出群号:${e.group_id}`
]
} else if (e.operator_id !== e.user_id) {
if (!Config.getGroup(e.group_id).groupMemberNumberChange) return false
logger.mark('[椰奶]群员被踢')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群员被踢]\n',
`操作人QQ${e.operator_id}\n`,
`被踢人QQ${e.user_id}\n`,
`被踢人昵称:${e.member.nickname}\n`,
`被踢人群名片:${e.member.card}\n`,
`被踢群号:${e.group_id}`
]
}
break
}
// 群管理变动
case 'admin': {
if (!Config.getGroup(e.group_id).groupAdminChange) return false
e.set ? logger.mark('[椰奶]机器人被设置管理') : logger.mark('[椰奶]机器人被取消管理')
if (e.user_id === Bot.uin) {
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
e.set
? '[通知 - 机器人被设置管理]:\n'
: '[通知 - 机器人被取消管理]:\n',
`被操作群号:${e.group_id}`
]
} else {
e.set ? logger.mark('[椰奶]新增群管理员') : logger.mark('[椰奶]取消群管理员')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
e.set ? '[通知 - 新增群管理员]:\n' : '[通知 - 取消群管理员]:\n',
`被操作QQ${e.user_id}\n`,
`被操作群号:${e.group_id}`
]
}
break
}
// 禁言 (这里仅处理机器人被禁言)
case 'ban': {
const forbiddenTime = common.getsecondformat(e.duration)
if (!Config.getGroup(e.group_id).botBeenBanned) return false
if (e.user_id != Bot.uin) return false
if (e.duration == 0) {
logger.mark('[椰奶]机器人被解除禁言')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人被解除禁言]\n',
`处理人QQ${e.operator_id}\n`,
`处理群号:${e.group_id}`
]
} else if (e.user_id === Bot.uin) {
logger.mark('[椰奶]机器人被禁言')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人被禁言]\n',
`禁言人QQ${e.operator_id}\n`,
`禁言群号:${e.group_id}\n`,
`禁言时长:${forbiddenTime}`
]
}
break
}
// 群转让
case 'transfer': {
if (!Config.getGroup(e.group_id).groupNumberChange) return false
logger.mark('[椰奶]群聊转让')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群聊转让]\n',
`转让群号:${e.group_id}\n`,
`旧群主:${e.operator_id}\n`,
`新群主:${e.user_id}`
]
break
}
// 群撤回
case 'recall': {
// 开启或关闭
if (!Config.getGroup(e.group_id).groupRecall) return false
// 是否为机器人撤回
if (e.user_id == Bot.uin) return false
// 是否为主人撤回
if (Config.masterQQ.includes(e.user_id)) return false
// 读取
let res = JSON.parse(
await redis.get(`notice:messageGroup:${e.message_id}`)
)
// 无数据 return出去
if (!res) return false
// 不同消息处理
let special = ''
let msgType = {
flash: {
msg: () => e.group.makeForwardMsg([
{
message: segment.image(res[0].url),
nickname: e.group.pickMember(e.user_id).card,
user_id: e.user_id
}
]),
type: '[闪照]'
},
record: {
msg: () => segment.record(res[0].url),
type: '[语音]'
},
video: {
msg: () => segment.video(res[0].file),
type: '[视频]'
},
xml: {
msg: () => res,
type: '[合并消息]'
}
}
if (msgType[res[0].type]) {
forwardMsg = await msgType[res[0].type].msg()
special = msgType[res[0].type].type
} else {
// 正常处理
forwardMsg = await Bot.pickFriend(Config.masterQQ[0]).makeForwardMsg([
{
message: res,
nickname: e.group.pickMember(e.user_id).card,
user_id: e.user_id
}
])
}
// 判断是否管理撤回
let isManage = ''
if (e.operator_id != e.user_id) {
isManage = `撤回管理:${e.group.pickMember(e.operator_id).card}(${e.operator_id
})\n`
}
isManage ? logger.mark('[椰奶]群聊管理撤回') : logger.mark('[椰奶]群聊撤回')
// 发送的消息
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
`[通知 - 群聊${isManage ? '管理' : ''}撤回]\n`,
`撤回群名:${e.group_name}\n`,
`撤回群号:${e.group_id}\n`,
isManage,
`${isManage ? '被撤回人' : '撤回人员'}${e.group.pickMember(e.user_id).card
}(${e.user_id})\n`,
`撤回时间:${moment(e.time * 1000).format('MM-DD HH:mm:ss')}`,
special ? `\n特殊消息:${special}` : ''
]
break
}
default:
return false
}
await common.sendMasterMsg(msg)
if (forwardMsg) await common.sendMasterMsg(forwardMsg)
}
}

View File

@@ -1,95 +0,0 @@
import plugin from '../../../lib/plugins/plugin.js'
import cfg from '../../../lib/config/config.js'
import { common } from '../model/index.js'
import { Config } from '../components/index.js'
const ROLE_MAP = {
admin: '群管理',
owner: '群主',
member: '群员'
}
/** 群邀请 */
export class NoticeRequest extends plugin {
constructor () {
super({
name: '椰奶请求通知',
event: 'request',
priority: 2000
})
}
async accept (e) {
let msg = ''
switch (e.request_type) {
case 'group':
switch (e.sub_type) {
case 'invite':
if (!Config.Notice.groupInviteRequest) return false
if (cfg.masterQQ.includes(e.user_id)) return false
logger.mark('[椰奶]邀请机器人进群')
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/0`),
'[通知 - 邀请机器人进群]\n',
`目标群号:${e.group_id}\n`,
`目标群名:${e.group_name}\n`,
`邀请人QQ${e.user_id}\n`,
`邀请人昵称:${e.nickname}\n`,
`邀请人群身份:${ROLE_MAP[e.role]}\n`,
`邀请码:${e.seq}\n`
]
if (cfg.other.autoQuit <= 0) {
msg.push('----------------\n可引用该消息回复"同意"或"拒绝"')
} else {
msg.push('已自动处理该邀请')
}
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}`),
`QQ号${e.user_id}\n`,
`昵称:${e.nickname}\n`,
`${e.comment}`
]
if (e.inviter_id !== undefined) { msg.push(`邀请人:${e.inviter_id}`) }
let sendmsg = await Bot.pickGroup(e.group_id).sendMsg(msg)
await redis.set(`yenai:groupAdd:${sendmsg.message_id}`, e.user_id, { EX: 3600 })
}
if (!Config.getGroup(e.group_id).addGroupApplication) return false
logger.mark('[椰奶]加群申请')
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/0`),
'[通知 - 加群申请]\n',
`群号:${e.group_id}\n`,
`群名:${e.group_name}\n`,
`QQ${e.user_id}\n`,
`昵称:${e.nickname}`,
e.tips ? `\nTip${e.tips}` : '',
`\n${e.comment}`
]
break
}
break
case 'friend':
if (!Config.Notice.friendRequest) return false
logger.mark('[椰奶]好友申请')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[通知 - 添加好友申请]\n',
`申请人QQ${e.user_id}\n`,
`申请人昵称:${e.nickname}\n`,
`申请来源:${e.source || '未知'}\n`,
`附加信息:${e.comment || '无附加信息'}\n`
]
if (cfg.other.autoFriend == 1) {
msg.push('已自动同意该好友申请')
} else {
msg.push(
`-------------\n可回复:#同意好友申请${e.user_id} \n或引用该消息回复"同意"或"拒绝"`
)
}
break
}
await common.sendMasterMsg(msg)
}
}

View File

@@ -39,7 +39,7 @@ export class NewPicSearch extends plugin {
.then(async res => {
res.length == 1
? common.recallsendMsg(e, res[0], true)
: common.getRecallsendMsg(e, res, { isxmlMsg: false })
: common.recallSendForwardMsg(e, res, { isxmlMsg: false })
})
.catch(async err => {
await e.reply(err.message)
@@ -52,7 +52,7 @@ export class NewPicSearch extends plugin {
if (!await this.Authentication(e)) return
if (!await this.handelImg(e, 'Ascii2D')) return
await PicSearch.Ascii2D(e.img[0])
.then(res => common.getRecallsendMsg(e, [...res.color, ...res.bovw], { isxmlMsg: false }))
.then(res => common.recallSendForwardMsg(e, [...res.color, ...res.bovw], { isxmlMsg: false }))
.catch(err => e.reply(err.message))
}

View File

@@ -14,7 +14,7 @@ const rankingrReg = new RegExp(`^#?看看((\\d{4}-\\d{1,2}-\\d{1,2})的)?(${Obje
const tagReg = new RegExp(`^#?tag(pro)?搜图(.*?)(第(${numReg})页)?$`, 'i')
const uidReg = new RegExp(`^#?uid搜图(.*?)(第(${numReg})页)?$`, 'i')
const searchUser = new RegExp(`^#?user搜索(.*?)(第(${numReg})页)?$`, 'i')
const randomImgReg = new RegExp(`^#?来(${numReg})?张(好(康|看)(的|哒)|hkd|涩图)$|#有内鬼$`)
const randomImgReg = new RegExp(`^#?来(${numReg})?张(好(康|看)(的|哒)|hkd|涩图)$|^#有内鬼$`)
export class NewPixiv extends plugin {
constructor () {
@@ -91,7 +91,7 @@ export class NewPixiv extends plugin {
await Pixiv.illust(regRet[1], filter)
.then(async res => {
await e.reply(res.msg)
res.img.length == 1 ? common.recallsendMsg(e, res.img) : common.getRecallsendMsg(e, res.img, false)
res.img.length == 1 ? common.recallsendMsg(e, res.img) : common.recallSendForwardMsg(e, res.img, false)
})
.catch(err => e.reply(err.message))
}
@@ -108,7 +108,7 @@ export class NewPixiv extends plugin {
let page = common.translateChinaNum(regRet[6])
await Pixiv.Rank(page, regRet[2], regRet[3], regRet[4])
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -122,7 +122,7 @@ export class NewPixiv extends plugin {
let page = common.translateChinaNum(regRet[4])
await Pixiv[`${regRet[1] ? 's' : 'vilipixS'}earchTags`](regRet[2], page, !setu.getR18(e.group_id))
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -131,7 +131,7 @@ export class NewPixiv extends plugin {
if (!await this._Authentication(e, 'sese')) return
e.reply(Pixiv.startMsg)
await Pixiv.PopularTags()
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -145,7 +145,7 @@ export class NewPixiv extends plugin {
let page = common.translateChinaNum(regRet[3])
await Pixiv.userIllust(regRet[1], page, !setu.getR18(e.group_id))
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -162,7 +162,7 @@ export class NewPixiv extends plugin {
}
num = common.translateChinaNum(num)
await Pixiv.vilipixRandomImg(num)
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -174,7 +174,7 @@ export class NewPixiv extends plugin {
let regRet = e.msg.match(/\d+/)
await Pixiv.relatedIllust(regRet[0], !setu.getR18(e.group_id))
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -185,7 +185,7 @@ export class NewPixiv extends plugin {
if (ispro && !await this._Authentication(e, 'sesepro')) return
await Pixiv.pximg(ispro)
.then(res => ispro ? common.getRecallsendMsg(e, [res]) : common.recallsendMsg(e, res))
.then(res => ispro ? common.recallSendForwardMsg(e, [res]) : common.recallsendMsg(e, res, false, { anony: true }))
.catch(err => e.reply(err.message))
}
@@ -197,7 +197,7 @@ export class NewPixiv extends plugin {
let regRet = e.msg.match(searchUser)
let page = common.translateChinaNum(regRet[3])
await Pixiv.searchUser(regRet[1], page, !setu.getR18(e.group_id))
.then(res => common.getRecallsendMsg(e, res))
.then(res => common.recallSendForwardMsg(e, res))
.catch(err => e.reply(err.message))
}
@@ -210,7 +210,7 @@ export class NewPixiv extends plugin {
console.log(res)
res.length == 1
? common.recallsendMsg(e, res[0], true)
: common.getRecallsendMsg(e, res)
: common.recallSendForwardMsg(e, res)
}).catch(err => e.reply(err.message))
}

View File

@@ -22,12 +22,14 @@ const cfgType = {
// 其他通知
闪照: 'flashPhoto',
禁言: 'botBeenBanned',
输入: 'input',
全部通知: 'notificationsAll',
删除缓存: 'deltime',
涩涩: 'sese',
状态: 'state',
涩涩pro: 'sesepro',
匿名: 'anonymous',
陌生人点赞: 'Strangers_love',
// 给有问题的用户关闭定时器
状态任务: 'statusTask',
@@ -99,8 +101,8 @@ export class Setting extends plugin {
} else {
Config.modify('whole', cfgType[index], yes)
}
if (index == '涩涩' || index == '涩涩pro' || index == '代理') {
let specialSese = ['涩涩', '涩涩pro', '代理', '匿名']
if (specialSese.includes(index)) {
return this.SeSe_Settings(e)
}
// 处理
@@ -145,7 +147,8 @@ export class Setting extends plugin {
'groupNumberChange',
'groupMemberNumberChange',
'flashPhoto',
'botBeenBanned'
'botBeenBanned',
'input'
]
for (let i in cfgType) {
@@ -181,10 +184,11 @@ export class Setting extends plugin {
// 查看涩涩设置
async SeSe_Settings (e) {
let set = setu.getSeSeConfig(e)
let { proxy, pixiv, bika, Notice: { sese, sesepro } } = Config
let { proxy, pixiv, bika, Notice: { sese, sesepro, anonymous } } = Config
let data = {
sese: getStatus(sese),
sesepro: getStatus(sesepro),
anonymous: getStatus(anonymous),
r18: getStatus(set.r18),
cd: Number(set.cd),
recall: set.recall ? set.recall : '无',

View File

@@ -12,9 +12,11 @@ privateMessage: false #好友消息
PrivateRecall: false #好友撤回
friendRequest: false #好友申请
friendNumberChange: false #好友列表变动
#其他设置
#其他通知
flashPhoto: false #闪照
botBeenBanned: false #禁言
input: false #对方正在输入
#其他设置
notificationsAll: false #全部通知
Strangers_love: false #陌生人点赞
sese: false #涩涩
@@ -23,3 +25,4 @@ deltime: 600 #删除缓存
sesepro: false #涩涩增强
statusTask: true #状态网速定时器
renderScale: 100 #渲染精度
anonymous: false #匿名

View File

@@ -104,7 +104,8 @@ export default new class newCommon {
* @param {Boolean} data.isxml 是否处理卡片
* @param {Boolean} data.isxmlMsg 是否处理卡片显示消息
* @param {Boolean} data.oneMsg 是否只有一条消息
* @return {Object} 消息是否发送成功的对象
* @param {Boolean | Omit<Anonymous, "flag">} data.anony 匿名消息
* @return {Promise<MessageRet>} 消息是否发送成功的对象
*/
async getforwardMsg (e, message, {
recallMsg = 0,
@@ -112,7 +113,8 @@ export default new class newCommon {
fkmsg = '',
isxml = false,
isxmlMsg = true,
oneMsg = false
oneMsg = false,
anony
} = {}) {
let forwardMsg = []
if (_.isEmpty(message)) throw Error('[椰奶sendforwardMsg][Error]发送的转发消息不能为空')
@@ -139,26 +141,96 @@ export default new class newCommon {
.replace(/___+/, '<title color="#777777" size="26">涩批(//// ^ ////)</title>')
}
}
// 发送消息
let res = await e.reply(forwardMsg, false, { recallMsg })
if (!res) await e.reply(fkmsg || '消息发送失败,可能被风控')
return res
let msgRes = await this.reply(e, forwardMsg, false, {
anony,
fkmsg,
recallMsg
})
return msgRes
}
/**
* @description: 发送普通消息并根据指定时间撤回群消息
* @description: 发送消息
* @param {*} e oicq
* @param {Array|String} msg 消息
* @param {Boolean} quote 是否引用回复
* @param {Number} time 撤回时间
* @param {Boolean} fkmsg 风控消息
* @return {*}
* @param {Object} data 其他参数
* @param {Number} data.recallMsg 撤回时间
* @param {Boolean} data.fkmsg 风控消息
* @param {Boolean | Omit<Anonymous, "flag">} data.anony 匿名消息
* @return {Promise<MessageRet>}
*/
async recallsendMsg (e, msg, quote, time = setu.getRecallTime(e.group_id), fkmsg = '') {
async reply (e, msg, quote, {
recallMsg = 0,
fkmsg = '',
at = false,
anony
} = {}) {
let msgRes = null
// 发送消息
let res = await e.reply(msg, quote, { recallMsg: time })
if (!res) await e.reply(fkmsg || '消息发送失败,可能被风控')
return res
if (e.isGroup) {
// 判断是否开启匿名
if (anony) {
let getAnonyInfo = await e.group.getAnonyInfo()
if (!getAnonyInfo.enable) {
e.reply('[警告]该群未开启匿名,请启用匿名再使用匿名功能')
anony = false
}
}
msgRes = await e.group.sendMsg(msg, quote, anony)
} else {
msgRes = await e.reply(msg, quote)
if (!msgRes) await e.reply(fkmsg || '消息发送失败,可能被风控')
}
if (at && e.isGroup) {
let text = ''
if (e?.sender?.card) {
text = _.truncate(e.sender.card, { length: 10 })
}
if (at === true) {
at = Number(e.user_id)
} else if (!isNaN(at)) {
let info = e.group.pickMember(at).info
text = info?.card ?? info?.nickname
text = _.truncate(text, { length: 10 })
}
if (Array.isArray(msg)) {
msg = [segment.at(at, text), ...msg]
} else {
msg = [segment.at(at, text), msg]
}
}
if (recallMsg > 0 && msgRes?.message_id) {
if (e.isGroup) {
setTimeout(() => e.group.recallMsg(msgRes.message_id), recallMsg * 1000)
} else if (e.friend) {
setTimeout(() => e.friend.recallMsg(msgRes.message_id), recallMsg * 1000)
}
}
return msgRes
}
/**
* @description: 获取配置的撤回事件和匿名发送普通消息
* @param {*} e oicq
* @param {Array|String} msg 消息
* @param {Boolean} quote 是否引用回复
* @param {Object} data 其他参数
* @param {Number} data.recallMsg 撤回时间
* @param {Boolean} data.fkmsg 风控消息
* @param {Boolean | Omit<Anonymous, "flag">} data.anony 匿名消息
* @return {Promise<MessageRet>}
*/
async recallsendMsg (e, msg, quote, data = {}) {
let recallMsg = setu.getRecallTime(e.group_id)
let anony = Config.Notice.anonymous
let msgRes = this.reply(e, msg, quote, {
recallMsg,
anony,
...data
})
return msgRes
}
/**
@@ -169,12 +241,14 @@ export default new class newCommon {
* @param {Object} data 其他参数
* @return {Object} 消息是否发送成功的对象
*/
async getRecallsendMsg (e, msg, data = {}) {
async recallSendForwardMsg (e, msg, data = {}) {
let recalltime = setu.getRecallTime(e.group_id)
let anony = Config.Notice.anonymous
return await this.getforwardMsg(e, msg, {
recallMsg: recalltime,
isBot: false,
isxml: true,
anony,
...data
})
}

View File

@@ -1,12 +1,8 @@
import fs from 'fs'
import _ from 'lodash'
import puppeteer from 'puppeteer'
import pet from '../../../../lib/puppeteer/puppeteer.js'
import { Data, Version, Plugin_Name, Config } from '../../components/index.js'
let devices = puppeteer.devices
if (!devices) {
devices = (await import('puppeteer')).KnownDevices
}
const puppeteer = await import('puppeteer')
const _path = process.cwd()
export default new (class newPuppeteer {
constructor () {
@@ -24,7 +20,7 @@ export default new (class newPuppeteer {
isLandscape: false
}
},
...devices
...puppeteer.devices
}
this.browser = false
this.config = {

View File

@@ -474,7 +474,7 @@ export default new class Pixiv {
}
let res = await request.get(url).then(res => res.json())
let { pid, uid, title, author, tags, urls, r18 } = res.data[0] || res.data
urls = urls.original.replace(/i.der.ink|i.pixiv.re/, this.proxy)
urls = urls.original.replace(/i.piccache.top|i.pixiv.re/, this.proxy)
let msg = [
`Pid: ${pid}\n`,
`Uid: ${uid}\n`,

View File

@@ -11,6 +11,10 @@ import setu from './setu.js'
import Ascii2D from './PicSearch/ascii2d.js'
import SauceNAO from './PicSearch/saucenao.js'
import WhatAnime from './PicSearch/whatanime.js'
import listener from './listener/loader.js'
// 加载监听事件
listener.load()
// 导出模块
export const PicSearch = {
Ascii2D,
SauceNAO,

View File

@@ -0,0 +1,14 @@
import { common } from '../../index.js'
import { Config } from '../../../components/index.js'
Bot.on('internal.input', async (e) => {
if (!Config.Notice.input) return false
// 判断是否主人消息
if (Config.masterQQ.includes(e.user_id)) return false
let msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
`[事件 - 对方${e.end ? '输入完毕' : '正在输入'}]\n`,
`好友QQ${e.user_id}`
]
await common.sendMasterMsg(msg)
})

View File

@@ -1,16 +1,5 @@
import plugin from '../../../lib/plugins/plugin.js'
import { common } from '../model/index.js'
import { Config } from '../components/index.js'
export class NoticeMessage extends plugin {
constructor () {
super({
name: '椰奶消息通知',
event: 'message',
priority: 2000
})
}
}
import { common } from '../../../model/index.js'
import { Config } from '../../../components/index.js'
Bot.on('message', async (e) => {
// 判断是否为机器人消息
@@ -198,3 +187,4 @@ function getMsgType (msg) {
}
return msgType[msg[0].type]
}
logger.debug('监听消息事件')

View File

@@ -0,0 +1,112 @@
import { common } from '../../../model/index.js'
import { Config } from '../../../components/index.js'
Bot.on('notice.friend', async (e) => {
let msg
let forwardMsg
switch (e.sub_type) {
case 'increase': {
if (!Config.Notice.friendNumberChange) return false
logger.mark('[椰奶]新增好友')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[通知 - 新增好友]\n',
`好友QQ${e.user_id}\n`,
`好友昵称:${e.nickname}`
]
break
}
case 'decrease': {
if (!Config.Notice.friendNumberChange) return false
logger.mark('[椰奶]好友减少')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[通知 - 好友减少]\n',
`好友QQ${e.user_id}\n`,
`好友昵称:${e.nickname}`
]
break
}
case 'recall': {
if (!Config.Notice.PrivateRecall) return false
if (e.user_id == Bot.uin) return false
// 主人撤回
if (Config.masterQQ.includes(e.user_id)) return false
logger.mark('[椰奶]好友撤回')
// 读取
let res = JSON.parse(
await redis.get(`notice:messagePrivate:${e.message_id}`)
)
// 无数据 return
if (!res) return false
const msgType = {
flash: {
msg: () => false,
type: ['[闪照]\n', '撤回闪照:', segment.image(res[0].url)]
},
record: {
msg: () => segment.record(res[0].url),
type: '[语音]'
},
video: {
msg: () => segment.video(res[0].file),
type: '[视频]'
},
xml: {
msg: () => res,
type: '[合并消息]'
}
}
if (msgType[res[0].type]) {
forwardMsg = msgType[res[0].type].msg()
res = msgType[res[0].type].type
}
// 消息
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 好友撤回消息]\n',
`好友QQ${e.user_id}\n`,
`撤回时间:${formatDate(e.time)}\n`,
'撤回消息:',
...res
]
break
}
case 'poke': {
if (!Config.Notice.privateMessage) return false
logger.mark('[椰奶]好友戳一戳')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[消息 - 戳一戳]\n',
`来源QQ${e.user_id}`
]
break
}
default:
return false
}
await common.sendMasterMsg(msg)
if (forwardMsg) await common.sendMasterMsg(forwardMsg)
}
)
/** 时间转换 */
function formatDate (time) {
let now = new Date(parseFloat(time) * 1000)
// 月
let month = now.getMonth() + 1
// 日
let date = now.getDate()
// 补0
if (month >= 1 && month <= 9) month = '0' + month
if (date >= 0 && date <= 9) date = '0' + date
// 时
let hour = now.getHours()
// 分
let minute = now.getMinutes()
// 补0
if (hour >= 1 && hour <= 9) hour = '0' + hour
if (minute >= 0 && minute <= 9) minute = '0' + minute
return `${month}-${date} ${hour}:${minute} `
}

View File

@@ -0,0 +1,266 @@
import { common } from '../../../model/index.js'
import { Config } from '../../../components/index.js'
import moment from 'moment'
Bot.on('notice.group', async (e) => {
let msg
let forwardMsg
switch (e.sub_type) {
case 'increase': {
if (e.user_id === Bot.uin) {
if (!Config.getGroup(e.group_id).groupNumberChange) return false
logger.mark('[椰奶]新增群聊')
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
'[通知 - 新增群聊]\n',
`新增群号:${e.group_id}`
]
} else {
if (!Config.getGroup(e.group_id).groupMemberNumberChange) return false
logger.mark('[椰奶]新增群员')
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
'[通知 - 新增群员]\n',
`群号:${e.group_id}\n`,
`新成员QQ${e.user_id}\n`,
`新成员昵称:${e.nickname}`
]
}
break
}
case 'decrease': {
if (e.dismiss) {
if (!Config.getGroup(e.group_id).groupNumberChange) return false
logger.mark('[椰奶]群聊被解散')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群聊被解散]\n',
`操作人QQ${e.operator_id}\n`,
`解散群号:${e.group_id}`
]
} else if (e.user_id === Bot.uin && e.operator_id !== Bot.uin) {
if (!Config.getGroup(e.group_id).groupNumberChange) return false
logger.mark('[椰奶]机器人被踢')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人被踢]\n',
`操作人QQ${e.operator_id}\n`,
`被踢群号:${e.group_id}`
]
} else if (e.user_id === Bot.uin && e.operator_id === Bot.uin) {
if (!Config.getGroup(e.group_id).groupNumberChange) return false
logger.mark('[椰奶]机器人退群')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人退群]\n',
`退出群号:${e.group_id}`
]
} else if (e.operator_id === e.user_id) {
if (!Config.getGroup(e.group_id).groupMemberNumberChange) return false
logger.mark('[椰奶]群员退群')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群员退群]\n',
`退群人QQ${e.user_id}\n`,
`退群人昵称:${e.member.nickname}\n`,
`退群人群名片:${e.member.card}\n`,
`退出群号:${e.group_id}`
]
} else if (e.operator_id !== e.user_id) {
if (!Config.getGroup(e.group_id).groupMemberNumberChange) return false
logger.mark('[椰奶]群员被踢')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群员被踢]\n',
`操作人QQ${e.operator_id}\n`,
`被踢人QQ${e.user_id}\n`,
`被踢人昵称:${e.member.nickname}\n`,
`被踢人群名片:${e.member.card}\n`,
`被踢群号:${e.group_id}`
]
}
break
}
// 群管理变动
case 'admin': {
if (!Config.getGroup(e.group_id).groupAdminChange) return false
e.set ? logger.mark('[椰奶]机器人被设置管理') : logger.mark('[椰奶]机器人被取消管理')
if (e.user_id === Bot.uin) {
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
e.set
? '[通知 - 机器人被设置管理]:\n'
: '[通知 - 机器人被取消管理]:\n',
`被操作群号:${e.group_id}`
]
} else {
e.set ? logger.mark('[椰奶]新增群管理员') : logger.mark('[椰奶]取消群管理员')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
e.set ? '[通知 - 新增群管理员]:\n' : '[通知 - 取消群管理员]:\n',
`被操作QQ${e.user_id}\n`,
`被操作群号:${e.group_id}`
]
}
break
}
// 禁言 (这里仅处理机器人被禁言)
case 'ban': {
const forbiddenTime = common.getsecondformat(e.duration)
if (!Config.getGroup(e.group_id).botBeenBanned) return false
if (e.user_id != Bot.uin) return false
if (e.duration == 0) {
logger.mark('[椰奶]机器人被解除禁言')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人被解除禁言]\n',
`处理人QQ${e.operator_id}\n`,
`处理群号:${e.group_id}`
]
} else if (e.user_id === Bot.uin) {
logger.mark('[椰奶]机器人被禁言')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 机器人被禁言]\n',
`禁言人QQ${e.operator_id}\n`,
`禁言群号:${e.group_id}\n`,
`禁言时长:${forbiddenTime}`
]
}
break
}
// 群转让
case 'transfer': {
if (!Config.getGroup(e.group_id).groupNumberChange) return false
logger.mark('[椰奶]群聊转让')
msg = [
segment.image(
`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`
),
'[通知 - 群聊转让]\n',
`转让群号:${e.group_id}\n`,
`旧群主:${e.operator_id}\n`,
`新群主:${e.user_id}`
]
break
}
// 群撤回
case 'recall': {
// 开启或关闭
if (!Config.getGroup(e.group_id).groupRecall) return false
// 是否为机器人撤回
if (e.user_id == Bot.uin) return false
// 是否为主人撤回
if (Config.masterQQ.includes(e.user_id)) return false
// 读取
let res = JSON.parse(
await redis.get(`notice:messageGroup:${e.message_id}`)
)
// 无数据 return出去
if (!res) return false
// 不同消息处理
let special = ''
let msgType = {
flash: {
msg: () => e.group.makeForwardMsg([
{
message: segment.image(res[0].url),
nickname: e.group.pickMember(e.user_id).card,
user_id: e.user_id
}
]),
type: '[闪照]'
},
record: {
msg: () => segment.record(res[0].url),
type: '[语音]'
},
video: {
msg: () => segment.video(res[0].file),
type: '[视频]'
},
xml: {
msg: () => res,
type: '[合并消息]'
}
}
if (msgType[res[0].type]) {
forwardMsg = await msgType[res[0].type].msg()
special = msgType[res[0].type].type
} else {
// 正常处理
forwardMsg = await Bot.pickFriend(Config.masterQQ[0]).makeForwardMsg([
{
message: res,
nickname: e.group.pickMember(e.user_id).card,
user_id: e.user_id
}
])
}
// 判断是否管理撤回
let isManage = ''
if (e.operator_id != e.user_id) {
isManage = `撤回管理:${e.group.pickMember(e.operator_id).card}(${e.operator_id
})\n`
}
isManage ? logger.mark('[椰奶]群聊管理撤回') : logger.mark('[椰奶]群聊撤回')
// 发送的消息
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/100`),
`[通知 - 群聊${isManage ? '管理' : ''}撤回]\n`,
`撤回群名:${e.group_name}\n`,
`撤回群号:${e.group_id}\n`,
isManage,
`${isManage ? '被撤回人' : '撤回人员'}${e.group.pickMember(e.user_id).card
}(${e.user_id})\n`,
`撤回时间:${moment(e.time * 1000).format('MM-DD HH:mm:ss')}`,
special ? `\n特殊消息:${special}` : ''
]
break
}
default:
return false
}
await common.sendMasterMsg(msg)
if (forwardMsg) await common.sendMasterMsg(forwardMsg)
})

View File

@@ -0,0 +1,83 @@
import cfg from '../../../../../lib/config/config.js'
import { common } from '../../../model/index.js'
import { Config } from '../../../components/index.js'
const ROLE_MAP = {
admin: '群管理',
owner: '群主',
member: '群员'
}
Bot.on('request', async (e) => {
let msg = ''
switch (e.request_type) {
case 'group':
switch (e.sub_type) {
case 'invite':
if (!Config.Notice.groupInviteRequest) return false
if (cfg.masterQQ.includes(e.user_id)) return false
logger.mark('[椰奶]邀请机器人进群')
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/0`),
'[通知 - 邀请机器人进群]\n',
`目标群号:${e.group_id}\n`,
`目标群名:${e.group_name}\n`,
`邀请人QQ${e.user_id}\n`,
`邀请人昵称:${e.nickname}\n`,
`邀请人群身份:${ROLE_MAP[e.role]}\n`,
`邀请码:${e.seq}\n`
]
if (cfg.other.autoQuit <= 0) {
msg.push('----------------\n可引用该消息回复"同意"或"拒绝"')
} else {
msg.push('已自动处理该邀请')
}
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}`),
`QQ号${e.user_id}\n`,
`昵称:${e.nickname}\n`,
`${e.comment}`
]
if (e.inviter_id !== undefined) { msg.push(`邀请人:${e.inviter_id}`) }
let sendmsg = await Bot.pickGroup(e.group_id).sendMsg(msg)
await redis.set(`yenai:groupAdd:${sendmsg.message_id}`, e.user_id, { EX: 3600 })
}
if (!Config.getGroup(e.group_id).addGroupApplication) return false
logger.mark('[椰奶]加群申请')
msg = [
segment.image(`https://p.qlogo.cn/gh/${e.group_id}/${e.group_id}/0`),
'[通知 - 加群申请]\n',
`群号:${e.group_id}\n`,
`群名:${e.group_name}\n`,
`QQ${e.user_id}\n`,
`昵称:${e.nickname}`,
e.tips ? `\nTip${e.tips}` : '',
`\n${e.comment}`
]
break
}
break
case 'friend':
if (!Config.Notice.friendRequest) return false
logger.mark('[椰奶]好友申请')
msg = [
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${e.user_id}`),
'[通知 - 添加好友申请]\n',
`申请人QQ${e.user_id}\n`,
`申请人昵称:${e.nickname}\n`,
`申请来源:${e.source || '未知'}\n`,
`附加信息:${e.comment || '无附加信息'}\n`
]
if (cfg.other.autoFriend == 1) {
msg.push('已自动同意该好友申请')
} else {
msg.push(
`-------------\n可回复:#同意好友申请${e.user_id} \n或引用该消息回复"同意"或"拒绝"`
)
}
break
}
await common.sendMasterMsg(msg)
})

17
model/listener/loader.js Normal file
View File

@@ -0,0 +1,17 @@
import fs from 'fs'
export default new class {
async load () {
// 加载监听事件
let eventsPath = './plugins/yenai-plugin/model/listener/events'
const events = fs.readdirSync(eventsPath).filter(file => file.endsWith('.js'))
for (let File of events) {
try {
await import(`./events/${File}`)
} catch (e) {
logger.mark(`监听事件错误:${File}`)
logger.error(e)
}
}
}
}()

View File

@@ -78,7 +78,7 @@ export default new class setu {
*/
async sendMsgOrSetCd (e, msg) {
// 发送消息
let res = await common.getRecallsendMsg(e, msg, false)
let res = await common.recallSendForwardMsg(e, msg, false)
if (!res) return false
// 设置CD
if (!e.isMaster) this.setCdTime(e.user_id, e.group_id)

View File

@@ -143,6 +143,14 @@
</div>
<div class="cfg-desc">破解闪照</div>
</li>
<li class="cfg-li">
<div class="cfg-line">
私聊输入
<span class="cfg-hint">#椰奶设置输入 + 开启/关闭 </span>
{{@input}}
</div>
<div class="cfg-desc">对方正在输入事件</div>
</li>
<li class="cfg-li">
<div class="cfg-line">
Bot被禁言

View File

@@ -124,6 +124,14 @@
</div>
<div class="cfg-desc">可选值:低质量,中等质量,高质量,原图</div>
</li>
<li class="cfg-li">
<div class="cfg-line">
匿名
<span class="cfg-hint">#椰奶设置匿名 + 开启/关闭</span>
<div class="cfg-status">{{@anonymous}}</div>
</div>
<div class="cfg-desc">群聊使用匿名发送</div>
</li>
</ul>
</div>
{{/block}}