⚗️ add 私聊禁言,解禁,踢,全体解禁功能
This commit is contained in:
@@ -31,7 +31,7 @@ lodash.forIn(picapis, (values, key) => {
|
||||
|
||||
const apiReg = new RegExp(`(${picApiKeys.join('|')}|^jktj$|^接口统计$)`)
|
||||
|
||||
export class example extends plugin {
|
||||
export class Fun extends plugin {
|
||||
constructor () {
|
||||
super({
|
||||
name: '椰奶娱乐',
|
||||
|
||||
@@ -18,28 +18,28 @@ const noactivereg = new RegExp(`^#(查看|清理|确认清理|获取)(${Numreg})
|
||||
const Autisticreg = new RegExp(`^#?我要(自闭|禅定)(${Numreg})?个?(${TimeUnitReg})?$`, 'i')
|
||||
// 获取定时任务
|
||||
const redisTask = await ga.getRedisMuteTask() || false
|
||||
export class Basics extends plugin {
|
||||
export class GroupAdmin extends plugin {
|
||||
constructor () {
|
||||
super({
|
||||
name: '椰奶基础群管',
|
||||
name: '椰奶群管',
|
||||
event: 'message.group',
|
||||
priority: 500,
|
||||
rule: [
|
||||
{
|
||||
reg: '^#禁言.*$',
|
||||
fnc: 'Taboo'
|
||||
reg: `^#禁言\\s?((\\d+)\\s)?(${Numreg})?(${TimeUnitReg})?$`,
|
||||
fnc: 'muteMember'
|
||||
},
|
||||
{
|
||||
reg: '^#解禁(\\d+)?$',
|
||||
fnc: 'Relieve'
|
||||
fnc: 'noMuteMember'
|
||||
},
|
||||
{
|
||||
reg: '^#全体(禁言|解禁)$',
|
||||
fnc: 'TabooAll'
|
||||
fnc: 'muteAll'
|
||||
},
|
||||
{
|
||||
reg: '^#踢(\\d+)?$',
|
||||
fnc: 'Kick'
|
||||
fnc: 'kickMember'
|
||||
},
|
||||
{
|
||||
reg: '^#(设置|取消)管理(\\d+)?$',
|
||||
@@ -155,76 +155,31 @@ export class Basics extends plugin {
|
||||
}
|
||||
|
||||
/** 禁言 */
|
||||
async Taboo (e) {
|
||||
async muteMember (e) {
|
||||
// 判断权限
|
||||
if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply(PERMISSION_ERROR)
|
||||
// 判断是否有管理
|
||||
if (!e.group.is_admin && !e.group.is_owner) return e.reply(ROLE_ERROR, true)
|
||||
|
||||
let qq = e.message.find(item => item.type == 'at')?.qq
|
||||
let TabooTime = 5
|
||||
let Company = 300
|
||||
// 判断有无@
|
||||
if (!qq) {
|
||||
let regRet = e.msg.match(new RegExp(`#禁言\\s?(\\d+)\\s(${Numreg})?(${TimeUnitReg})?`))
|
||||
if (!regRet) return e.reply('❎ 请检查指令格式是否正确')
|
||||
// 处理消息
|
||||
if (!regRet[1]) return e.reply('❎ 未取得QQ号请检查指令格式')
|
||||
qq = regRet[1]
|
||||
// 获取数字
|
||||
TabooTime = common.translateChinaNum(regRet[2] || 5)
|
||||
// 获取单位
|
||||
Company = common.Time_unit[lodash.toUpper(regRet[3]) || '分']
|
||||
} else {
|
||||
TabooTime = common.translateChinaNum(e.msg.match(new RegExp(Numreg)) || 5)
|
||||
Company = common.Time_unit[lodash.toUpper(e.msg.match(new RegExp(TimeUnitReg))) || '分']
|
||||
}
|
||||
if (!(/\d{5,}/.test(qq))) return e.reply('❎ 请输入正确的QQ号')
|
||||
// 判断是否为主人
|
||||
if (Config.masterQQ?.includes(Number(qq))) {
|
||||
e.reply('居然调戏主人!!!哼,坏蛋(ノ`⊿´)ノ')
|
||||
return e.group.muteMember(e.user_id, 300)
|
||||
}
|
||||
let Memberinfo = e.group.pickMember(Number(qq)).info
|
||||
// 判断是否有这个人
|
||||
if (!Memberinfo) return e.reply('❎ 这个群没有这个人哦~', true)
|
||||
// 特殊处理
|
||||
if (Memberinfo.role === 'owner') {
|
||||
e.reply('调戏群主拖出去枪毙5分钟(。>︿<)_θ', true)
|
||||
return e.group.muteMember(e.user_id, 300)
|
||||
}
|
||||
if (Memberinfo.role === 'admin') {
|
||||
if (!e.group.is_owner) return e.reply('人家又不是群主这种事做不到的辣!', true)
|
||||
if (!e.isMaster && !e.member.is_owner) return e.reply('这个淫系管理员辣,只有主淫和群主才可以干ta', true)
|
||||
}
|
||||
console.log(qq, TabooTime * Company)
|
||||
await e.group.muteMember(qq, TabooTime * Company)
|
||||
e.reply(`已把「${Memberinfo.card || Memberinfo.nickname}」扔进了小黑屋( ・_・)ノ⌒●~*`, true)
|
||||
return true
|
||||
let regRet = e.msg.match(new RegExp(`#禁言\\s?((\\d+)\\s)?(${Numreg})?(${TimeUnitReg})?`))
|
||||
console.log(regRet)
|
||||
let res = await ga.muteMember(e.group_id, qq ?? regRet[2], e.user_id, regRet[3], regRet[4])
|
||||
e.reply(res)
|
||||
}
|
||||
|
||||
/** 解禁 */
|
||||
async Relieve (e) {
|
||||
async noMuteMember (e) {
|
||||
// 判断权限
|
||||
if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply(PERMISSION_ERROR)
|
||||
// 判断是否有管理
|
||||
if (!e.group.is_admin && !e.group.is_owner) return e.reply(ROLE_ERROR, true)
|
||||
|
||||
let qq = e.message.find(item => item.type == 'at')?.qq
|
||||
if (!qq) qq = e.msg.replace(/#|解禁/g, '').trim()
|
||||
|
||||
if (!qq || !(/\d{5,}/.test(qq))) return e.reply('❎ 请输入正确的QQ号')
|
||||
|
||||
let Member = e.group.pickMember(Number(qq))
|
||||
// 判断是否有这个人
|
||||
if (!Member.info) return e.reply('❎ 这个群没有这个人哦~')
|
||||
|
||||
await e.group.muteMember(qq, 0)
|
||||
e.reply(`已把「${Member.card || Member.nickname}」从小黑屋揪了出来(。>∀<。)`, true)
|
||||
let regRet = e.msg.match(/#解禁(\\d+)/)
|
||||
let res = await ga.muteMember(e.group_id, qq ?? regRet[1], e.user_id, 0)
|
||||
e.reply(res)
|
||||
}
|
||||
|
||||
/** 全体禁言 */
|
||||
async TabooAll (e) {
|
||||
async muteAll (e) {
|
||||
// 判断权限
|
||||
if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply(PERMISSION_ERROR)
|
||||
// 判断是否有管理
|
||||
@@ -237,7 +192,7 @@ export class Basics extends plugin {
|
||||
}
|
||||
|
||||
// 踢群员
|
||||
async Kick (e) {
|
||||
async kickMember (e) {
|
||||
// 判断权限
|
||||
if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply(PERMISSION_ERROR)
|
||||
// 判断是否有管理
|
||||
@@ -245,22 +200,8 @@ export class Basics extends plugin {
|
||||
|
||||
let qq = e.message.find(item => item.type == 'at')?.qq
|
||||
if (!qq) qq = e.msg.replace(/#|踢/g, '').trim()
|
||||
|
||||
if (!qq || !(/\d{5,}/.test(qq))) return e.reply('❎ 请输入正确的QQ号')
|
||||
// 判断是否为主人
|
||||
if (Config.masterQQ?.includes(Number(qq))) {
|
||||
return e.reply('居然调戏主人!!!哼,坏蛋(ノ`⊿´)ノ')
|
||||
}
|
||||
let Memberinfo = e.group.pickMember(Number(qq)).info
|
||||
// 判断是否有这个人
|
||||
if (!Memberinfo) return e.reply('❎ 这个群没有这个人哦~', true)
|
||||
if (Memberinfo.role === 'owner') return e.reply('调戏群主拖出去枪毙5分钟(。>︿<)_θ', true)
|
||||
if (Memberinfo.role === 'admin') {
|
||||
if (!e.group.is_owner) return e.reply('人家又不是群主这种事做不到的辣!', true)
|
||||
if (!e.isMaster && !e.member.is_owner) return e.reply('这个淫系管理员辣,只有主淫和群主才可以干ta', true)
|
||||
}
|
||||
let res = await e.group.kickMember(Number(qq))
|
||||
res ? e.reply('已把这个坏淫踢掉惹!!!', true) : e.reply('额...踢出失败哩,可能这个淫比较腻害>_<', true)
|
||||
let res = await ga.kickMember(e.group_id, qq, e.user_id)
|
||||
e.reply(res)
|
||||
}
|
||||
|
||||
// 我要自闭
|
||||
63
apps/privateGroupAdmin.js
Normal file
63
apps/privateGroupAdmin.js
Normal file
@@ -0,0 +1,63 @@
|
||||
import plugin from '../../../lib/plugins/plugin.js'
|
||||
import { GroupAdmin as ga, common } from '../model/index.js'
|
||||
|
||||
// 正则
|
||||
const Numreg = '[一壹二两三四五六七八九十百千万亿\\d]+'
|
||||
const TimeUnitReg = Object.keys(common.Time_unit).join('|')
|
||||
const muteMemberReg = new RegExp(`^#禁言\\s?(\\d+)\\s(\\d+)\\s(${Numreg})?(${TimeUnitReg})?$`)
|
||||
export class PrivateGroupAdmin extends plugin {
|
||||
constructor () {
|
||||
super({
|
||||
name: '椰奶私聊群管',
|
||||
event: 'message',
|
||||
priority: 2000,
|
||||
rule: [
|
||||
{
|
||||
reg: muteMemberReg,
|
||||
fnc: 'muteMember'
|
||||
},
|
||||
{
|
||||
reg: '^#解禁\\s?(\\d+)\\s(\\d+)$',
|
||||
fnc: 'nomuteMember'
|
||||
},
|
||||
{
|
||||
reg: '^#全体(禁言|解禁)(\\d+)$',
|
||||
fnc: 'muteAll'
|
||||
},
|
||||
{
|
||||
reg: '^#踢\\s?(\\d+)\\s(\\d+)$',
|
||||
fnc: 'kickMember'
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
async muteMember (e) {
|
||||
if (!e.isMaster) return false
|
||||
let regRet = e.msg.match(muteMemberReg)
|
||||
let res = await ga.muteMember(regRet[1], regRet[2], e.user_id, regRet[3], regRet[4])
|
||||
e.reply(res)
|
||||
}
|
||||
|
||||
async noMuteMember (e) {
|
||||
if (!e.isMaster) return false
|
||||
let regRet = e.msg.match(/^#解禁\s?(\d+)\s(\d+)$/)
|
||||
let res = await ga.muteMember(regRet[1], regRet[2], e.user_id, 0)
|
||||
e.reply(res)
|
||||
}
|
||||
|
||||
async muteAll (e) {
|
||||
if (!e.isMaster) return false
|
||||
let regRet = e.msg.match(/全体(禁言|解禁)(\d+)/)
|
||||
let group = Bot.pickGroup(Number(regRet[2]))
|
||||
group.muteAll(regRet[1] == '禁言')
|
||||
e.reply(`✅ 已将群「${group.name}(${group.group_id})」${regRet[1] == '禁言' ? '开启' : '解除'}全体禁言`)
|
||||
}
|
||||
|
||||
async kickMember (e) {
|
||||
if (!e.isMaster) return false
|
||||
let regRet = e.msg.match(/#踢\s?(\d+)\s(\d+)$/)
|
||||
let res = await ga.kickMember(regRet[1], regRet[2], e.user_id)
|
||||
e.reply(res)
|
||||
}
|
||||
}
|
||||
7
index.js
7
index.js
@@ -42,6 +42,11 @@ for (let i in files) {
|
||||
logger.error(ret[i].reason)
|
||||
continue
|
||||
}
|
||||
apps[name] = ret[i].value[Object.keys(ret[i].value)[0]]
|
||||
let value = ret[i].value
|
||||
for (let f in value) {
|
||||
apps[f] = value[f]
|
||||
}
|
||||
// apps[name] = ret[i].value[Object.keys(ret[i].value)[0]]
|
||||
}
|
||||
|
||||
export { apps }
|
||||
|
||||
@@ -59,7 +59,7 @@ export default new (class {
|
||||
return [
|
||||
`共找到${total}个关于「${keyword}」${type.alias[0]}的作品`,
|
||||
`当前为第${pg}页,共${pages}页`,
|
||||
...await Promise.all(docs.map(async (item) => {
|
||||
...await Promise.allSettled(docs.map(async (item) => {
|
||||
let { title, tags, categories, author, description = '未知', likesCount, thumb, _id, finished } = item
|
||||
return [
|
||||
`id:${_id}\n`,
|
||||
@@ -94,7 +94,7 @@ export default new (class {
|
||||
return [
|
||||
`id: ${_id}, ${title}`,
|
||||
`共${total}张,当前为第${pg}页,共${pages}页,当前为第${order}话`,
|
||||
...await Promise.all(docs.map(async item => await Pixiv.proxyFetchImg((this.imgproxy ?? `${item.media.fileServer}/static/`) + item.media.path)))
|
||||
...await Promise.allSettled(docs.map(async item => await Pixiv.proxyFetchImg((this.imgproxy ?? `${item.media.fileServer}/static/`) + item.media.path)))
|
||||
]
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ export default new (class {
|
||||
res = res.data.categories.filter(item => !item.isWeb)
|
||||
await redis.set(key, JSON.stringify(res), { EX: 43200 })
|
||||
}
|
||||
return await Promise.all(res.map(async item => {
|
||||
return await Promise.allSettled(res.map(async item => {
|
||||
let { title, thumb, description = '未知' } = item
|
||||
let { fileServer, path } = thumb
|
||||
fileServer = /static/.test(fileServer) ? fileServer : fileServer + '/static/'
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
import { common } from './index.js'
|
||||
import lodash from 'lodash'
|
||||
import moment from 'moment'
|
||||
import { segment } from 'oicq'
|
||||
import loader from '../../../lib/plugins/loader.js'
|
||||
class Group_admin {
|
||||
import { Config } from '../components/index.js'
|
||||
import { common } from './index.js'
|
||||
|
||||
// 无管理文案
|
||||
const ROLE_ERROR = '做不到,怎么想我都做不到吧ヽ(≧Д≦)ノ'
|
||||
export default new class {
|
||||
constructor () {
|
||||
this.MuteTaskKey = 'yenai:MuteTasks'
|
||||
}
|
||||
@@ -310,6 +314,65 @@ class Group_admin {
|
||||
]
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default new Group_admin()
|
||||
/**
|
||||
* @description: 禁言某人
|
||||
* @param {Number} groupId 群号
|
||||
* @param {Number} userId 被禁言人QQ
|
||||
* @param {Number} executor 执行人QQ
|
||||
* @param {Number} time 时间倍数 0为解禁
|
||||
* @param {String} unit 时间单位
|
||||
* @return {String} 回复消息
|
||||
*/
|
||||
async muteMember (groupId, userId, executor, time = 5, unit = '分') {
|
||||
unit = common.Time_unit[unit.toUpperCase()] ?? (/^\d+$/.test(unit) ? unit : 60)
|
||||
let group = null
|
||||
try { group = Bot.pickGroup(Number(groupId), true) } catch (err) { return err.message }
|
||||
// 判断是否有管理
|
||||
if (!group.is_admin && !group.is_owner) return ROLE_ERROR
|
||||
if (!(/\d{5,}/.test(userId))) return '❎ 请输入正确的QQ号'
|
||||
// 判断是否为主人
|
||||
if (Config.masterQQ?.includes(Number(userId)) && time != 0) return '居然调戏主人!!!哼,坏蛋(ノ`⊿´)ノ'
|
||||
|
||||
let Memberinfo = group.pickMember(Number(userId)).info
|
||||
// 判断是否有这个人
|
||||
if (!Memberinfo) return '❎ 这个群没有这个人哦~'
|
||||
|
||||
// 特殊处理
|
||||
if (Memberinfo.role === 'owner') return '调戏群主拖出去枪毙5分钟(。>︿<)_θ'
|
||||
|
||||
let user = group.pickMember(Number(executor))
|
||||
let isMaster = Config.masterQQ?.includes(executor)
|
||||
|
||||
if (Memberinfo.role === 'admin') {
|
||||
if (!group.is_owner) return '人家又不是群主这种事做不到的辣!'
|
||||
if (!isMaster && !user.member.is_owner) return '这个淫系管理员辣,只有主淫和群主才可以干ta'
|
||||
}
|
||||
|
||||
await group.muteMember(userId, time * unit)
|
||||
return time == 0 ? `✅ 已把「${Memberinfo.card || Memberinfo.nickname}」从小黑屋揪了出来(。>∀<。)` : `已把「${Memberinfo.card || Memberinfo.nickname}」扔进了小黑屋( ・_・)ノ⌒●~*`
|
||||
}
|
||||
|
||||
async kickMember (groupId, userId, executor) {
|
||||
let group = null
|
||||
try { group = Bot.pickGroup(Number(groupId), true) } catch (err) { return err.message }
|
||||
|
||||
if (!userId || !(/^\d+$/.test(userId))) return '❎ 请输入正确的QQ号'
|
||||
if (!groupId || !(/^\d+$/.test(groupId))) return '❎ 请输入正确的群号'
|
||||
// 判断是否为主人
|
||||
if (Config.masterQQ?.includes(Number(userId))) return '居然调戏主人!!!哼,坏蛋(ノ`⊿´)ノ'
|
||||
|
||||
let Memberinfo = group?.pickMember(Number(userId)).info
|
||||
// 判断是否有这个人
|
||||
if (!Memberinfo) return '❎ 这个群没有这个人哦~'
|
||||
if (Memberinfo.role === 'owner') return '调戏群主拖出去枪毙5分钟(。>︿<)_θ'
|
||||
let isMaster = Config.masterQQ?.includes(executor)
|
||||
let user = group.pickMember(Number(executor))
|
||||
if (Memberinfo.role === 'admin') {
|
||||
if (!group.is_owner) return '人家又不是群主这种事做不到的辣!'
|
||||
if (!isMaster && !user.is_owner) return '这个淫系管理员辣,只有主淫和群主才可以干ta'
|
||||
}
|
||||
let res = await group.kickMember(Number(userId))
|
||||
return res ? '已把这个坏淫踢掉惹!!!' : '额...踢出失败哩,可能这个淫比较腻害>_<'
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -147,8 +147,7 @@ export default new class Pixiv {
|
||||
}
|
||||
return { error: linkmsg }
|
||||
}
|
||||
console.log(this.headers)
|
||||
let img = await Promise.all(url.map(async item => await this.proxyFetchImg(item, { headers: this.headers })))
|
||||
let img = await Promise.allSettled(url.map(async item => await this.proxyFetchImg(item, { headers: this.headers })))
|
||||
return { msg, img }
|
||||
}
|
||||
|
||||
@@ -194,7 +193,7 @@ export default new class Pixiv {
|
||||
if (res.error) return { error: res.error.message }
|
||||
if (lodash.isEmpty(res.illusts)) return { error: '暂无数据,请等待榜单更新哦(。-ω-)zzz' }
|
||||
|
||||
let illusts = await Promise.all(res.illusts.map(async (item, index) => {
|
||||
let illusts = await Promise.allSettled(res.illusts.map(async (item, index) => {
|
||||
let list = this.format(item)
|
||||
let { id, title, user, tags, total_bookmarks, image_urls } = list
|
||||
return [
|
||||
@@ -405,7 +404,7 @@ export default new class Pixiv {
|
||||
if (user.error) return { error: user.error.message }
|
||||
if (lodash.isEmpty(user.user_previews)) return { error: '呜呜呜,人家没有找到这个淫d(ŐдŐ๑)' }
|
||||
|
||||
let msg = await Promise.all(user.user_previews.slice(0, 10).map(async (item, index) => {
|
||||
let msg = await Promise.allSettled(user.user_previews.slice(0, 10).map(async (item, index) => {
|
||||
let { id, name, profile_image_urls } = item.user
|
||||
profile_image_urls = profile_image_urls.medium.replace('i.pximg.net', this.proxy)
|
||||
let ret = [
|
||||
@@ -518,7 +517,7 @@ export default new class Pixiv {
|
||||
agent,
|
||||
headers
|
||||
}).then(res => res.arrayBuffer())
|
||||
.catch((err) => logger.warn(`图片加载失败,${err.message}`))
|
||||
.catch((err) => logger.warn(`图片加载失败 reason: ${err.message}`))
|
||||
if (!buffer) return segment.image('/plugins/yenai-plugin/resources/img/imgerror.png')
|
||||
let buff = Buffer.from(buffer)
|
||||
logger.debug(`Success: imgSize => ${(buff.length / 1024).toFixed(2) + 'kb'}`)
|
||||
|
||||
@@ -54,7 +54,7 @@ export default new class setu {
|
||||
return { error: '没有找到相关的tag' }
|
||||
}
|
||||
// 消息
|
||||
let msg = await Promise.all(result.data.map(async item => {
|
||||
let msg = await Promise.allSettled(result.data.map(async item => {
|
||||
let { pid, title, tags, author, r18, urls, url } = item
|
||||
return [
|
||||
`${this.sendMsgs}\n`,
|
||||
|
||||
Reference in New Issue
Block a user