Files
yenai-plugin/apps/gp_admin.js
2023-01-09 12:59:50 +08:00

802 lines
29 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 { segment } from 'oicq'
import lodash from 'lodash'
import { Config } from '../components/index.js'
import { Cfg, Gpadmin, common, QQInterface, Browser } from '../model/index.js'
import moment from 'moment'
//API请求错误文案
const API_ERROR = "❎ 出错辣,请稍后重试"
//无管理文案
const ROLE_ERROR = "做不到,怎么想我都做不到吧ヽ(≧Д≦)"
//权限不足文案
const Permission_ERROR = "❎ 该命令仅限管理员可用"
//正则
let Numreg = "[一壹二两三四五六七八九十百千万亿\\d]+"
let noactivereg = new RegExp(`^#(查看|清理|确认清理|获取)(${Numreg})个?(年|月|周|天)没发言的人(第(${Numreg})页)?$`)
let Autisticreg = new RegExp(`^#?我要(自闭|禅定)(${Numreg})?个?(${Object.keys(common.Time_unit).join("|")})?$`, "i")
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: 'SetAdmin',
},
{
reg: '^#(允许|禁止|开启|关闭)匿名$',
fnc: 'AllowAnony',
},
{
reg: '^#发群公告.*$',
fnc: 'AddAnnounce',
},
{
reg: '^#删群公告(\\d+)$',
fnc: 'DelAnnounce',
},
{
reg: '^#查群公告$',
fnc: 'GetAnnounce',
},
{
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: 'Mutelist',
},
{
reg: '^#解除全部禁言$',
fnc: 'relieveAllMute',
},
{
reg: `^#(查看|(确认)?清理)从未发言过?的人(第(${Numreg})页)?$`,
fnc: 'neverspeak',
},
{
reg: `^#(查看|获取)?(不活跃|潜水)排行榜(${Numreg})?$`,
fnc: 'RankingList'
},
{
reg: `^#(查看|获取)?最近的?入群(情况|记录)(${Numreg})?$`,
fnc: 'RankingList'
},
{
reg: noactivereg,//清理多久没发言的人
fnc: 'noactive',
},
{
reg: `^#发通知.*$`,
fnc: 'Send_notice',
},
{
reg: `(^#定时禁言(.*)解禁(.*)$)|(^#定时禁言任务$)|(^#取消定时禁言$)`,
fnc: 'timeMute',
},
{
reg: `^#(查看|获取)?群?发言榜单((7|七)天)?`,
fnc: 'SpeakRank'
},
{
reg: "^#?(谁|哪个吊毛|哪个屌毛|哪个叼毛)是龙王$",
fnc: 'dragonKing'
},
{
reg: '^#群星级$',
fnc: 'Group_xj'
},
{
reg: '^#今日打卡$',
fnc: 'DaySigned'
},
{
reg: Autisticreg,//我要自闭
fnc: 'Autistic'
},
]
})
this.task = {
cron: '0 0/1 * * * ?',
name: '定时禁言',
fnc: () => this.timeTaboo(),
}
}
/**定时群禁言 */
async timeTaboo() {
let time = moment(new Date()).format('HH:mm')
let task = await redis.keys('Yunzai:yenai:Taboo:*')
if (!task.length) return
for (let i of task) {
let data = JSON.parse(await redis.get(i))
if (data.muteTime == time) {
await Bot.pickGroup(data.groupNumber).muteAll(true)
} else if (data.remTime == time) {
await Bot.pickGroup(data.groupNumber).muteAll(false)
}
}
}
/**禁言 */
async Taboo(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;
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 (Cfg.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)
}
//如无时间默认禁言五分钟
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(`已把「${Memberinfo.card || Memberinfo.nickname}」扔进了小黑屋( ・_・)ノ⌒●~*`, true);
return true;
}
/**解禁 */
async Relieve(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.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.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 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.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.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 (Cfg.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))
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.isMaster) return e.reply("别自闭啦~~", true)
if (e.member.is_admin && !e.group.is_owner) return e.reply("别自闭啦~~", true)
//解析正则
let regRet = Autisticreg.exec(e.msg)
// 获取数字
let TabooTime = common.translateChinaNum(regRet[2] || 5)
let Company = common.Time_unit[lodash.toUpper(regRet[3]) || "分"]
await e.group.muteMember(e.user_id, TabooTime * Company);
e.reply(`那我就不手下留情了~`, true);
return true;
}
//设置管理
async SetAdmin(e) {
//判断权限
if (!e.isMaster) return e.reply(Permission_ERROR)
if (!e.group.is_owner) return e.reply(ROLE_ERROR, 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.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 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 AddAnnounce(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 msg = e.msg.replace(/#|发群公告/g, "").trim()
if (!msg) return e.reply("❎ 公告不能为空");
let result = await QQInterface.setAnnounce(e.group_id, msg)
if (!result) return e.reply(API_ERROR);
if (result.ec != 0) {
e.reply("❎ 发送失败\n" + JSON.stringify(result, null, '\t'))
}
}
//查群公告
async GetAnnounce(e) {
let res = await QQInterface.getAnnouncelist(e.group_id)
if (!res) return e.reply(API_ERROR);
return e.reply(res)
}
//删群公告
async DelAnnounce(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 msg = e.msg.replace(/#|删群公告/, "").trim()
if (!msg) return e.reply(`❎ 序号不可为空`)
let result = await QQInterface.delAnnounce(e.group_id, msg)
if (!result) return e.reply(API_ERROR);
if (result.ec == 0) {
e.reply(`✅ 已删除「${result.text}`)
} else {
e.reply("❎ 删除失败\n" + JSON.stringify(result, null, '\t'))
}
}
//修改头衔
async adminsetTitle(e) {
if (!e.isMaster) return e.reply(Permission_ERROR)
if (e.message.length < 2) return
if (e.message[1].type != 'at') return
if (!e.group.is_owner) return e.reply(ROLE_ERROR, 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 false;
let Title = e.msg.replace(/#|申请头衔/g, "")
//屏蔽词处理
if (!e.isMaster) {
let data = Config.NoTitle
if (data.Match_pattern) {
let reg = new RegExp(lodash.compact(data.Shielding_words).join("|"))
if (reg.test(Title)) return e.reply("这里面有不好的词汇哦~", true)
} else {
if (data.Shielding_words.includes(Title)) return e.reply("这是有不好的词汇哦~", true)
}
}
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) {
let data = await QQInterface.luckylist(e.group_id)
if (!data) return e.reply(API_ERROR)
if (data.retcode != 0) return e.reply('❎ 获取数据失败\n' + JSON.stringify(data))
let msg = data.data.word_list.map((item, index) => {
let { wording, word_id, word_desc } = item.word_info
return `${index + 1}:${wording}-${word_id}\n寓意:${word_desc}`
}).join("\n");
e.reply(msg)
}
//抽幸运字符
async qun_lucky(e) {
let res = await QQInterface.drawLucky(e.group_id);
if (!res) return e.reply(API_ERROR)
if (res.retcode == 11004) return e.reply("今天已经抽过辣,明天再来抽取吧");
if (res.retcode != 0) return e.reply('❎ 错误\n' + JSON.stringify(data))
if (res.data.word_info) {
let { wording, word_desc } = res.data.word_info.word_info
e.reply(`恭喜您抽中了${wording}\n寓意为:${word_desc}`)
} else {
e.reply("恭喜您抽了中了个寂寞")
}
}
//替换幸运字符
async qun_luckyuse(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 id = e.msg.replace(/#|替换(幸运)?字符/g, "");
let res = await QQInterface.equipLucky(e.group_id, id)
if (!res) return e.reply(API_ERROR)
if (res.retcode != 0) return e.reply('❎替换失败\n' + JSON.stringify(res));
e.reply('✅ OK')
}
//开启或关闭群字符
async qun_luckyset(e) {
if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply(Permission_ERROR)
let res = await QQInterface.swichLucky(e.group_id, /开启/.test(e.msg))
if (!res) return e.reply(API_ERROR)
if (res.retcode == 11111) return e.reply("❎ 重复开启或关闭")
if (res.retcode != 0) return e.reply('❎ 错误\n' + JSON.stringify(res));
e.reply('✅ OK')
}
//获取禁言列表
async Mutelist(e) {
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`,
`群身份:${common.ROLE_MAP[info.role]}\n`,
`禁言剩余时间:${Cfg.getsecondformat(Member.mute_left)}`
])
}
Cfg.getforwardMsg(e, msg)
}
//解除全部禁言
async relieveAllMute(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 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.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply(Permission_ERROR)
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(ROLE_ERROR, 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(ROLE_ERROR, 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.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply(Permission_ERROR)
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(ROLE_ERROR, 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(ROLE_ERROR, 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)
}
//发送通知
async Send_notice(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);
e.message[0].text = e.message[0].text.replace("#发通知", "").trim()
if (!e.message[0].text) e.message.shift()
if (lodash.isEmpty(e.message)) return e.reply("❎ 通知不能为空")
e.message.unshift(segment.at("all"))
e.reply(e.message)
}
//设置定时群禁言
async timeMute(e) {
if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply(Permission_ERROR)
if (/任务/.test(e.msg)) {
let task = await redis.keys('Yunzai:yenai:Taboo:*')
if (!task.length) return e.reply('目前还没有定时禁言任务')
let msglist = [`目前定时禁言任务有${task.length}`]
for (let i = 0; i < task.length; i++) {
let data = JSON.parse(await redis.get(task[i]))
msglist.push(`${i + 1}.\n群号:${data.groupNumber}\n禁言时间:${data.muteTime}\n解禁时间:${data.remTime}`)
}
Cfg.getforwardMsg(e, msglist)
return true
}
if (/取消/.test(e.msg)) {
let data = JSON.parse(await redis.get(`Yunzai:yenai:Taboo:${e.group_id}`))
if (!data) return e.reply('这群目前没有定时禁言任务')
await redis.del(`Yunzai:yenai:Taboo:${e.group_id}`)
e.reply('此群定时禁言任务删除成功')
return true
}
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply(ROLE_ERROR, true);
}
try {
var muteTime = e.msg.match(/禁言(\d+):(\d+)/)[0].replace(/禁言/g, '')
var remTime = e.msg.match(/解禁(\d+):(\d+)/)[0].replace(/解禁/g, '')
if (muteTime.length != 5 || remTime.length != 5) return e.reply('格式不对\n示范#定时禁言00:00解禁08:00')
} catch (err) {
logger.error(err)
e.reply('格式不对\n示范#定时禁言00:00解禁08:00')
return
}
if (muteTime == remTime) return e.reply('没事就吃溜溜梅')
let data = {
groupNumber: e.group_id,
muteTime,
remTime
}
await redis.set(`Yunzai:yenai:Taboo:${e.group_id}`, JSON.stringify(data))
e.reply(`设置定时禁言成功,可发【#定时禁言任务】查看`)``
}
//谁是龙王
async dragonKing(e) {
//图片版
let url = `https://qun.qq.com/interactive/honorlist?gc=${e.group_id}&type=1&_wv=3&_wwv=129`
//数据版
// let res = await QQInterface.dragon(e.group_id)
e.reply([
// `本群龙王:${res.name}`,
// segment.image(res.avatar),
// `蝉联天数:${res.desc}`,
await Browser.Webpage(url, { "Cookie": Bot.cookies['qun.qq.com'] }, {
width: 700,
height: 700,
deviceScaleFactor: 3
}, true)
]);
}
/**群星级 */
async Group_xj(e) {
let result = await QQInterface.getCreditLevelInfo(e.group_id)
if (!result) return e.reply("❎ 接口失效")
if (result.ec != 0) return e.reply("❎ 查询错误\n" + JSON.stringify(result))
let { uiGroupLevel, group_name, group_uin } = result.info
let str = "⭐"
str = str.repeat(uiGroupLevel)
e.reply([
`群名:${group_name}\n`,
`群号:${group_uin}\n`,
`群星级:${str}`
])
}
//群发言榜单
async SpeakRank(e) {
if (!e.group.is_admin && !e.group.is_owner) {
return e.reply(ROLE_ERROR, true);
}
//图片截图
let url = `https://qun.qq.com/m/qun/activedata/speaking.html?gc=${e.group_id}&time=${/(7|)/.test(e.msg) ? 1 : 0}&_wv=3&&_wwv=128`
//接口数据
let res = await QQInterface.SpeakRank(e.group_id, /(7|七)天/.test(e.msg) ? 1 : 0)
if (!res) return e.reply("接口失效辣!!!")
if (res.retcode != 0) return e.reply("❎ 未知错误\n" + JSON.stringify(res))
let msg = lodash.take(res.data.speakRank.map((item, index) =>
`${index + 1}:${item.nickname}-${item.uin}\n连续活跃${item.active}天:发言${item.msgCount}`
), 10).join("\n");
e.reply([
...msg,
await Browser.Webpage(url, {
"Cookie":
Bot.cookies['qun.qq.com']
}, {
width: 700,
height: 700,
deviceScaleFactor: 2
}, true)
])
}
//今日打卡
async DaySigned(e) {
let res = await QQInterface.signInToday(e.group_id)
if (!res) return e.reply("❎ 出错辣,请稍后重试")
if (res.retCode != 0) return e.reply("❎ 未知错误\n" + JSON.stringify(res));
let list = res.response.page[0]
if (list.total == 0) return e.reply("今天还没有人打卡哦( ̄▽ ̄)\"")
//发送消息
let msg = list.infos.map((item, index) => `${index + 1}:${item.uidGroupNick}-${item.uid}\n打卡时间:${moment(item.signedTimeStamp * 1000).format("YYYY-MM-DD HH:mm:ss")}`).join("\n");
e.reply(msg)
}
}