Files
yenai-plugin/apps/gp_admin.js
2022-11-13 18:16:21 +08:00

648 lines
22 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import plugin from '../../../lib/plugins/plugin.js'
import fetch from 'node-fetch'
import Cfg from '../model/Config.js';
import Gpadmin from '../model/Group_admin.js';
import { segment } from 'oicq'
import lodash from 'lodash'
import common from '../model/common.js'
import config from '../../../lib/config/config.js'
const ROLE_MAP = {
admin: '群管理',
owner: '群主',
member: '群员'
}
let Numreg = "[一壹二两三四五六七八九十百千万亿\\d]+"
let noactivereg = new RegExp(`^#(查看|清理|确认清理|获取)(${Numreg})个?(年|月|周|天)没发言的人(第(${Numreg})页)?$`)
export class Basics extends plugin {
constructor() {
super({
name: '基础群管',
event: 'message.group',
priority: 500,
rule: [
{
reg: '^#禁言.*$',
fnc: 'Taboo'
},
{
reg: '^#解禁.*$',
fnc: 'Relieve'
},
{
reg: '^#全体(禁言|解禁)$',
fnc: 'TabooAll'
},
{
reg: '^#踢(.*)$',
fnc: 'Kick'
},
{
reg: '^#?我要(自闭|禅定).*$',
fnc: 'Autistic'
},
{
reg: '^#(设置|取消)管理.*$',
fnc: 'SetAdmin'
},
{
reg: '^#(允许|禁止|开启|关闭)匿名$',
fnc: 'AllowAnony'
},
{
reg: '^#发群公告.*$',
fnc: 'Announce'
},
{
reg: '^#查群公告$',
fnc: 'DelAnnounce'
},
{
reg: '^#删群公告.*$',
fnc: 'DelAnnounce'
},
{
reg: '^#修改头衔.*$',
fnc: 'adminsetTitle'
},
{
reg: '^#申请头衔.*$',
fnc: 'SetGroupSpecialTitle'
},
{
reg: '^#(查)?(幸运)?字符(列表)?$',
fnc: 'qun_luckylist'
},
{
reg: '^#抽(幸运)?字符$',
fnc: 'qun_lucky'
},
{
reg: '^#替换(幸运)?字符(\\d+)$',
fnc: 'qun_luckyuse'
},
{
reg: '^#(开启|关闭)(幸运)?字符$',
fnc: 'qun_luckyset'
},
{
reg: '^#今日打卡$',
fnc: 'DaySigned'
},
{
reg: '^#(获取|查看)?禁言列表$',
fnc: 'Mutelist'
},
{
reg: '^#解除全部禁言$',
fnc: 'relieveAllMute'
},
{
reg: noactivereg,
fnc: 'noactive'
},
{
reg: `^#(查看|(确认)?清理)从未发言过?的人(第(${Numreg})页)?$`,
fnc: 'neverspeak'
},
{
reg: `^#(查看|获取)?(不活跃|潜水)排行榜(${Numreg})?$`,
fnc: 'RankingList'
},
{
reg: `^#(查看|获取)?最近的?入群(情况|记录)(${Numreg})?$`,
fnc: 'RankingList'
}
]
})
}
/**禁言 */
async Taboo(e) {
//判断是否有管理
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) {
return e.reply("❎ 该命令仅限管理员可用", true);
}
let qq;
let TabooTime;
let Company;
//判断有无@
if (e.message.length == 1) {
//处理消息
let msg = e.msg.split(" ");
if (msg.length >= 4) return e.reply("❎ 指令有误请检查");
//取qq号
if (msg.length == 1) {
qq = msg[0].match(/[1-9]\d*/g);
} else if (msg.length == 2) {
qq = msg[0].match(/[1-9]\d*/g);
if (!qq) qq = msg[1].match(/[1-9]\d*/g);
} else {
qq = msg[1].match(/[1-9]\d*/g);
}
//取禁言时间如果没取到走默认时间
if (msg[2]) {
TabooTime = msg[2].match(/[1-9]\d*/g);
Company = msg[2].match(/(天|时|分)/g);
} else if (msg.length == 2 && qq) {
TabooTime = msg[1].match(/[1-9]\d*/g);
Company = msg[1].match(/(天|时|分)/g);
}
} else {
//有艾特处理
for (let i of e.message) {
//取信息中艾特的QQ号
if (i.type == "at") {
qq = i.qq;
} else if (i.type == 'text') {
//取禁言时间
if (/\d/g.test(i.text)) {
TabooTime = i.text.match(/[1-9]\d*/g);
Company = i.text.match(/(天|时|分)/g);
}
}
}
}
if (!(/\d{5,}/.test(qq))) return e.reply("❎ 请输入正确的QQ号");
//判断是否为主人
if (config.masterQQ?.includes(Number(qq))) {
return e.reply("居然调戏主人!!!哼,坏蛋(ノ`⊿´)ノ");
}
let Member = e.group.pickMember(Number(qq))
//判断是否有这个人
if (!Member.info) return e.reply("❎ 这个群没有这个人哦~");
//如无时间默认禁言五分钟
if (!TabooTime) TabooTime = 5;
//默认单位为分
if (/天/.test(Company)) {
Company = 86400;
} else if (/时/.test(Company)) {
Company = 3600;
} else {
Company = 60;
}
await e.group.muteMember(qq, TabooTime * Company);
e.reply(`已把${Member.card || Member.nickname}扔进了小黑屋( ・_・)ノ⌒●~*`, true);
return true;
}
/**解禁 */
async Relieve(e) {
//判断是否有管理
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) {
return e.reply("❎ 该命令仅限管理员可用", true);
}
let qq = e.msg.replace(/#|解禁/g, "").trim();
if (e.message.length != 1) {
qq = e.message.find(item => item.type == "at")?.qq
} else {
qq = qq.match(/[1-9]\d*/g);
}
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);
return true;
}
/**全体禁言 */
async TabooAll(e) {
//判断是否有管理
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) {
return e.reply("❎ 该命令仅限管理员可用", true);
}
let type = false;
if (/全体禁言/.test(e.msg)) type = true;
let res = await e.group.muteAll(type)
if (res) {
if (type) {
e.reply("全都不准说话了哦~")
} else {
e.reply("好耶!!可以说话啦~")
}
} else {
e.reply("❎ 未知错误", true)
}
return true
}
//踢群员
async Kick(e) {
//判断是否有管理
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) {
return e.reply("❎ 该命令仅限管理员可用", true);
}
let qq = e.msg.replace(/#|踢/g, "").trim()
if (e.message.length != 1) {
qq = e.message.find(item => item.type == "at")?.qq
} else {
qq = qq.match(/[1-9]\d*/g);
}
if (!qq || !(/\d{5,}/.test(qq))) return e.reply("❎ 请输入正确的QQ号");
//判断是否为主人
if (config.masterQQ?.includes(Number(qq))) {
return e.reply("居然调戏主人!!!哼,坏蛋(ノ`⊿´)ノ");
}
//判断是否有这个人
if (!e.group.pickMember(Number(qq)).info) return e.reply("❎ 这个群没有这个人哦~")
let res = await e.group.kickMember(Number(qq))
if (res) {
e.reply("已把这个坏淫踢掉惹!!!", true)
} else {
e.reply("额...踢出失败哩,可能这个淫比较腻害>_<", true)
}
return true
}
//我要自闭
async Autistic(e) {
//判断是否有管理
if (!e.group.is_admin && !e.group.is_owner) return
if (e.member.is_admin || e.member.is_owner || e.isMaster)
return e.reply("别自闭啦~~", true)
let msg = e.msg.replace(/#|我要自闭|禅定/g, "").trim()
let TabooTime = msg.match(/[1-9]\d*/g);
let Company = msg.match(/(天|时|分)/g);
//如无时间默认禁言五分钟
if (!TabooTime) TabooTime = 5;
//默认单位为分
if (/天/.test(Company)) {
Company = 86400;
} else if (/时/.test(Company)) {
Company = 3600;
} else {
Company = 60;
}
await e.group.muteMember(e.user_id, TabooTime * Company);
e.reply(`那我就不手下留情了~`, true);
return true;
}
//设置管理
async SetAdmin(e) {
if (!e.group.is_owner) return e.reply("呜呜呜,人家做不到>_<", true)
if (!e.isMaster) return e.reply("❎ 该命令仅限主人可用", true);
let qq
let yes = false
qq = e.msg.replace(/#|(设置|取消)管理/g, "").trim();
if (/设置管理/.test(e.msg)) yes = true
if (e.message.length != 1) {
qq = e.message.find(item => item.type == "at")?.qq
} else {
qq = qq.match(/[1-9]\d*/g);
}
if (!qq || !(/\d{5,}/.test(qq))) return e.reply("❎ 请输入正确的QQ号");
let Member = e.group.pickMember(Number(qq))
//判断是否有这个人
if (!Member.info) return e.reply("❎ 这个群没有这个人哦~");
let res = await e.group.setAdmin(qq, yes)
let name = Member.card || Member.nickname
if (res) {
if (yes) {
e.reply(`已经把${name}设置为管理啦!!`)
} else {
e.reply(`${name}的管理已经被我吃掉啦~`)
}
} else {
e.reply(`❎ 未知错误`)
}
}
//匿名
async AllowAnony(e) {
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) {
return e.reply("❎ 该命令仅限管理员可用", true);
}
//判断是否有管理
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
let yes = false
if (/(允许|开启)匿名/.test(e.msg)) {
yes = true
}
let res = await e.group.allowAnony(yes)
if (res) {
if (yes) {
e.reply("已把匿名开启了哦,可以藏起来了~")
} else {
e.reply("已关闭匿名,小贼们不准藏了~")
}
} else {
e.reply("❎ 未知错误", true)
}
return true;
}
//发群公告
async Announce(e) {
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) {
return e.reply("❎ 该命令仅限管理员可用", true);
}
//判断是否有管理
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
let msg = e.msg.replace(/#|发群公告/g, "").trim()
if (!msg) return e.reply("❎ 公告不能为空");
let ck = Cfg.getck("qun.qq.com")
let url = `http://xiaobai.klizi.cn/API/qqgn/gg_send.php?data=&skey=${ck.skey}&pskey=${ck.p_skey}&uin=${Bot.uin}&group=${e.group_id}&text=${msg}`
let result = await fetch(url).then(res => res.json()).catch(err => console.log(err))
if (!result) return e.reply("❎ 接口出错")
if (result.ec == 0) {
e.reply("✅ 已发送群公告,群员们要好好看哦~")
} else {
e.reply("❎ 发送失败")
}
return true;
}
//查群公告+删群公告
async DelAnnounce(e) {
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) {
return e.reply("❎ 该命令仅限管理员可用", true);
}
if (/查群公告/.test(e.msg)) {
let res = await Gpadmin.getAnnouncelist(e)
if (!res) return;
await e.reply(res)
return;
}
let msg = e.msg.replace(/#|删群公告/, "").trim()
if (!msg) return e.reply(`❎ 序号不可为空`)
msg = msg.match(/\d/)
if (!msg) return e.reply(`❎ 请检查序号是否正确`)
let ck = Cfg.getck("qun.qq.com")
let list = await Gpadmin.getAnnouncelist(e, msg)
if (!list) return;
let url = `http://xiaobai.klizi.cn/API/qqgn/gg_delete.php?data=&skey=${ck.skey}&pskey=${ck.p_skey}&uin=${Bot.uin}&group=${e.group_id}&fid=${list.fid}`
let result = await fetch(url).then(res => res.json())
.catch(err => console.log(err))
if (!result) return e.reply("接口失效辣!!!")
if (result.ec == 0) {
e.reply("✅ 已删除这个公告哦~")
} else {
e.reply("❎ 删除失败")
}
}
//修改头衔
async adminsetTitle(e) {
if (e.message.length < 2) return
if (e.message[1].type != 'at') return
if (!e.group.is_owner) return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true)
if (!e.isMaster) {
return e.reply("❎ 该命令仅限主人可用", true);
}
let res = await e.group.setTitle(e.message[1].qq, e.message[2].text)
if (res) {
e.reply(`已经把这个小可爱的头衔设置为${e.message[2].text}`)
} else {
e.reply(`额...没给上不知道发生了神魔`)
}
}
//申请头衔
async SetGroupSpecialTitle(e) {
let msgs = [
"换上辣(´•ω•̥`)",
"嗯!不戳的头衔哦٩(๑•ㅂ•)۶",
"给你换上了哦(*^ワ^*",
"又要换了吗,真是喜新厌旧呢( •̥́ ˍ •̀ू )",
"啾咪٩(๑•̀ω•́๑)۶",
"弃旧恋新了么笨蛋( 。ớ ₃ờ)ھ"
]
if (!e.group.is_owner) return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true)
let Title = e.msg.replace(/#|申请头衔/g, "")
let res = await e.group.setTitle(e.user_id, Title)
if (res) {
if (!Title) {
e.reply(`什么"(º Д º*)!没有头衔,哼把你的头衔吃掉!!!`, true)
} else {
e.reply(lodash.sample(msgs), true)
}
} else {
e.reply('❎ 未知错误', true)
}
}
//字符列表
async qun_luckylist(e) {
e.reply(await Gpadmin.getqun_lucky(e))
}
//抽幸运字符
async qun_lucky(e) {
e.reply(await Gpadmin.getqun_lucky(e, true))
}
//替换幸运字符
async qun_luckyuse(e) {
//判断是否有管理
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
let id = e.msg.replace(/#|替换(幸运)?字符/g, "");
e.reply(await Gpadmin.getqun_luckyuse(e, id))
}
//开启或关闭群字符
async qun_luckyset(e) {
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) {
return e.reply("❎ 该命令仅限管理员可用", true);
}
let type = 1;
if (/关闭/.test(e.msg)) {
type = 2;
}
e.reply(await Gpadmin.setluckyuse(e, type), true)
}
//今日打卡
async DaySigned(e) {
e.reply(await Gpadmin.getSigned(e))
}
//获取禁言列表
async Mutelist(e) {
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) {
return e.reply("❎ 该命令仅限管理员可用", true);
}
let mutelist = await Gpadmin.getMuteList(e)
if (!mutelist) return e.reply("还没有人被禁言欸(O∆O)")
let msg = [];
for (let i of mutelist) {
let Member = e.group.pickMember(i)
let { info } = Member
msg.push([
segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${info.user_id}`),
`\n昵称:${info.card || info.nickname}\n`,
`QQ${info.user_id}\n`,
`群身份:${ROLE_MAP[info.role]}\n`,
`禁言剩余时间:${Cfg.getsecondformat(Member.mute_left)}`
])
}
Cfg.getforwardMsg(e, msg)
}
//解禁全部禁言
async relieveAllMute(e) {
//判断是否有管理
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
if (!e.isMaster && !e.member.is_owner && !e.member.is_admin) {
return e.reply("❎ 该命令仅限管理员可用", true);
}
let mutelist = await Gpadmin.getMuteList(e)
if (!mutelist) return e.reply("都没有人被禁言我怎么解的辣\(`Δ’)")
for (let i of mutelist) {
await e.group.muteMember(i, 0)
await Cfg.sleep(2000)
}
e.reply("已经把全部的禁言解除辣╮( •́ω•̀ )╭")
}
//查看和清理多久没发言的人
async noactive(e) {
if (!e.isMaster && !e.member.is_owner) {
return e.reply("❎ 该命令仅限群主和主人可用", true);
}
let Reg = noactivereg.exec(e.msg)
Reg[2] = common.translateChinaNum(Reg[2] || 1)
//确认清理直接执行
if (Reg[1] == "确认清理") {
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
return Gpadmin.getclearnoactive(e, Reg[2], Reg[3])
}
//查看和清理都会发送列表
let page = common.translateChinaNum(Reg[5] || 1)
let msg = await Gpadmin.getnoactive(e, Reg[2], Reg[3], page)
if (!msg) return
//清理
if (Reg[1] == "清理") {
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
let list = await Gpadmin.noactivelist(e, Reg[2], Reg[3])
e.reply(`本此共需清理${list.length}人,防止误触发\n请发送:#确认清理${Reg[2]}${Reg[3]}没发言的人`)
}
Cfg.getforwardMsg(e, msg)
}
//查看和清理从未发言的人
async neverspeak(e) {
if (!e.isMaster && !e.member.is_owner) {
return e.reply("❎ 该命令仅限群主和主人可用", true);
}
let list = await Gpadmin.getneverspeak(e)
if (!list) return
//确认清理直接执行
if (/^#?确认清理/.test(e.msg)) {
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
let removelist = list.map(item => item.user_id)
let msg = await Gpadmin.getkickMember(e, removelist)
return Cfg.getforwardMsg(e, msg)
}
//清理
if (/^#?清理/.test(e.msg)) {
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
e.reply(`本此共需清理${list.length}人,防止误触发\n请发送:#确认清理从未发言的人`)
}
//发送列表
let num = e.msg.match(new RegExp(Numreg))
num = num ? common.translateChinaNum(num[0]) : 1
let listinfo = await Gpadmin.getneverspeakinfo(e, num)
Cfg.getforwardMsg(e, listinfo)
}
//查看不活跃排行榜和入群记录
async RankingList(e) {
let num = e.msg.match(new RegExp(Numreg))
num = num ? common.translateChinaNum(num[0]) : 10
let msg = '';
if (/(不活跃|潜水)/.test(e.msg)) {
msg = await Gpadmin.InactiveRanking(e, num)
} else {
msg = await Gpadmin.getRecentlyJoined(e, num)
}
Cfg.getforwardMsg(e, msg)
}
}