Files
yenai-plugin/apps/gp_admin.js
2022-10-30 14:41:50 +08:00

548 lines
18 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'
const ROLE_MAP = {
admin: '群管理',
owner: '群主',
member: '群员'
}
let noactivereg = new RegExp('^#(查看|清理|确认清理)(\\d+)(年|月|周|天)没发言的人(第(\\d+)页)?$')
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'
}
]
})
}
/**禁言 */
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号");
//判断是否有这个人
let memberMap = await e.group.getMemberMap();
memberMap = Array.from(memberMap.keys());
if (!memberMap.includes(Number(qq))) 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(`已把${e.group.pickMember(qq).card}扔进了小黑屋( ・_・)ノ⌒●~*`, 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.message[0].text.replace(/#|解禁/g, "").trim();
if (e.message[1]) {
qq = e.message[1].qq;
} else {
qq = qq.match(/[1-9]\d*/g);
}
if (!(/\d{5,}/.test(qq))) return e.reply("❎ 请输入正确的QQ号");
//判断是否有这个人
let memberMap = await e.group.getMemberMap();
memberMap = Array.from(memberMap.keys());
if (!memberMap.includes(Number(qq))) return e.reply("❎ 这个群没有这个人哦~");
await e.group.muteMember(qq, 0)
e.reply(`已把${e.group.pickMember(qq).card}从小黑屋揪了出来(。>∀<。)`, 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 res = false;
if (/全体禁言/.test(e.msg)) res = true;
await e.group.muteAll(res)
if (res) {
e.reply("全都不准说话了哦~")
} else {
e.reply("好耶!!可以说话啦~")
}
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.message[0].text.replace(/#|踢/g, "").trim()
if (e.message[1]) {
qq = e.message[1].qq
} else {
qq = qq.match(/[1-9]\d*/g)
}
if (!(/\d{5,}/.test(qq))) return e.reply("❎ 请输入正确的QQ号");
//判断是否有这个人
let memberMap = await e.group.getMemberMap()
memberMap = Array.from(memberMap.keys())
if (!memberMap.includes(Number(qq))) return e.reply("❎ 这个群没有这个人哦~")
await e.group.kickMember(qq)
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[1]) {
qq = e.message[1].qq;
} else {
qq = qq.match(/[1-9]\d*/g);
}
if (!(/\d{5,}/.test(qq))) return e.reply("❎ 请输入正确的QQ号");
//判断是否有这个人
let memberMap = await e.group.getMemberMap();
memberMap = Array.from(memberMap.keys());
if (!memberMap.includes(Number(qq))) return e.reply("❎ 这个群没有这个人哦~");
await e.group.setAdmin(qq, yes)
if (yes) {
e.reply(`已经把${e.group.pickMember(qq).card}设置为管理啦!!`)
} else {
e.reply(`${e.group.pickMember(qq).card}的管理已经被我吃掉啦~`)
}
}
//匿名
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
}
await e.group.allowAnony(yes)
if (yes) {
e.reply("已把匿名开启了哦,可以藏起来了~")
} else {
e.reply("已关闭匿名,小贼们不准藏了~")
}
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);
}
await e.group.setTitle(e.message[1].qq, e.message[2].text)
e.reply(`已经把这个小可爱的头衔设置为${e.message[2].text}`)
}
//申请头衔
async SetGroupSpecialTitle(e) {
if (!e.group.is_owner) return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true)
let Title = e.msg.replace(/#|申请头衔/g, "")
await e.group.setTitle(e.user_id, Title)
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(200)
}
e.reply("已经把全部的禁言解除辣╮( •́ω•̀ )╭")
}
//查看和清理多久没发言的人
async noactive(e) {
if (!e.isMaster && !e.member.is_owner) {
return e.reply("❎ 该命令仅限群主和主人可用", true);
}
let Reg = noactivereg.exec(e.msg)
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])
if (!list) return
e.reply(`检测到本此共需清理${list.length}人,防止误触发\n请发送:#确认清理${Reg[2]}${Reg[3]}没发言的人`)
} else if (Reg[1] == "确认清理") {
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply("做不到,怎么想我都做不到吧ヽ(≧Д≦)", true);
}
await Gpadmin.getclearnoactive(e, Reg[2], Reg[3])
} else {
let page = Reg[5] || 1
let msg = await Gpadmin.getnoactive(e, Reg[2], Reg[3], page)
if (!msg) return
Cfg.getforwardMsg(e, msg)
}
}
}