@@ -9,7 +9,7 @@ import md5 from "md5"
|
||||
let Vote = {}
|
||||
const SettingReg = /^#?投票设置(超时时间|最低票数|禁言时间)?(\d*)$/
|
||||
|
||||
export class GroupVoteBan extends plugin {
|
||||
export class GroupVote extends plugin {
|
||||
constructor() {
|
||||
super({
|
||||
name: "椰奶群管-投票禁言",
|
||||
@@ -18,15 +18,15 @@ export class GroupVoteBan extends plugin {
|
||||
priority: 5000,
|
||||
rule: [
|
||||
{
|
||||
reg: "^#(发起)?投票禁言",
|
||||
reg: "^#(发起)?投票(禁言|踢人)",
|
||||
fnc: "Initiate"
|
||||
},
|
||||
{
|
||||
reg: "^#(支持|反对)禁言",
|
||||
reg: "^#(支持|反对)投票",
|
||||
fnc: "Follow"
|
||||
},
|
||||
{
|
||||
reg: "^#(启用|禁用)投票禁言$",
|
||||
reg: "^#(启用|禁用)投票(禁言|踢人)$",
|
||||
fnc: "Switch"
|
||||
},
|
||||
{
|
||||
@@ -43,15 +43,18 @@ export class GroupVoteBan extends plugin {
|
||||
async Switch() {
|
||||
if (!common.checkPermission(this.e, "master")) return
|
||||
|
||||
let type = !!/启用/.test(this.e.msg)
|
||||
const type = !!/启用/.test(this.e.msg)
|
||||
const isBan = !!/禁言/.test(this.e.msg)
|
||||
const name = isBan ? "禁言" : "踢人"
|
||||
const key = isBan ? "VoteBan" : "VoteKick"
|
||||
|
||||
const { VoteBan } = Config.groupAdmin
|
||||
const open = Config.groupAdmin[key]
|
||||
|
||||
if (VoteBan && type) return this.reply("❎ 投票禁言功能已处于启用状态")
|
||||
if (!VoteBan && !type) return this.reply("❎ 投票禁言功能已处于禁用状态")
|
||||
if (open && type) return this.reply(`❎ 投票${name}功能已处于启用状态`)
|
||||
if (!open && !type) return this.reply(`❎ 投票${name}功能已处于禁用状态`)
|
||||
|
||||
Config.modify("groupAdmin", "VoteBan", type)
|
||||
this.reply(`✅ 已${type ? "启用" : "禁用"}投票禁言功能`)
|
||||
Config.modify("groupAdmin", key, type)
|
||||
this.reply(`✅ 已${type ? "启用" : "禁用"}投票${name}功能`)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -64,7 +67,7 @@ export class GroupVoteBan extends plugin {
|
||||
const text = regRet[1]
|
||||
const value = Number(regRet[2])
|
||||
|
||||
if (!text || !value) return this.reply("投票禁言配置参数:\n\n超时时间: 投票限时,单位:秒\n最低票数: 投票成功的最低票数\n禁言时间: 禁言的时长,单位:秒\n\n例: #投票设置禁言时间8600\n\n更多配置请看:\nconfig/groupAdmin.yaml", true)
|
||||
if (!text || !value) return this.reply("投票配置参数:\n\n#(启用|禁用)投票(禁言|踢人)\n\n(超时时间: 投票限时,单位:秒\n最低票数: 投票成功的最低票数\n禁言时间: 禁言的时长,单位:秒\n\n例: #投票设置禁言时间8600\n\n更多配置请看:\nconfig/groupAdmin.yaml", true)
|
||||
|
||||
let type
|
||||
if (text === "超时时间") type = "outTime"
|
||||
@@ -82,11 +85,13 @@ export class GroupVoteBan extends plugin {
|
||||
* @param e
|
||||
*/
|
||||
async Initiate(e) {
|
||||
const { VoteBan, outTime, minNum, BanTime, voteAdmin } = Config.groupAdmin
|
||||
|
||||
if (!VoteBan) return e.reply("❎ 该功能已被禁用,请发送 #启用投票禁言 来启用该功能。", true)
|
||||
|
||||
if (!common.checkPermission(e, "all", "admin")) return
|
||||
const { VoteBan, VoteKick, outTime, minNum, BanTime, voteAdmin, veto } = Config.groupAdmin
|
||||
|
||||
const isBan = !!/禁言/.test(this.e.msg)
|
||||
|
||||
if (isBan && !VoteBan) return e.reply("❎ 该功能已被禁用,请发送 #启用投票禁言 来启用该功能。", true)
|
||||
if (!isBan && !VoteKick) return e.reply("❎ 该功能已被禁用,请发送 #启用投票踢人 来启用该功能。", true)
|
||||
|
||||
let targetQQ = e.at || (e.msg.match(/\d+/)?.[0] || "")
|
||||
targetQQ = Number(targetQQ) || String(targetQQ)
|
||||
@@ -96,7 +101,7 @@ export class GroupVoteBan extends plugin {
|
||||
|
||||
if (Config.masterQQ?.includes(Number(targetQQ) || String(targetQQ)) || a.includes(md5(String(targetQQ)))) return e.reply("❎ 该命令对主人无效")
|
||||
|
||||
if (!targetQQ) return e.reply("❎ 请艾特或输入需要禁言的QQ")
|
||||
if (!targetQQ) return e.reply("❎ 请艾特或输入被投票人的QQ")
|
||||
|
||||
if (Vote[key]) return e.reply("❎ 已有相同投票,请勿重复发起")
|
||||
|
||||
@@ -115,23 +120,25 @@ export class GroupVoteBan extends plugin {
|
||||
Vote[key] = {
|
||||
supportCount: 1,
|
||||
opposeCount: 0,
|
||||
List: [ e.user_id ]
|
||||
List: [ e.user_id ],
|
||||
type: isBan ? "Ban" : "Kick"
|
||||
}
|
||||
|
||||
let res = await e.reply([
|
||||
segment.at(targetQQ),
|
||||
`(${targetQQ})的禁言投票已发起\n`,
|
||||
`(${targetQQ})的${isBan ? "禁言" : "踢出"}投票已发起\n`,
|
||||
"发起人:",
|
||||
segment.at(e.user_id),
|
||||
`(${e.user_id})\n`,
|
||||
"请支持者发送:\n",
|
||||
`「#支持禁言${targetQQ}」\n`,
|
||||
`「#支持投票${targetQQ}」\n`,
|
||||
"不支持者请发送:\n",
|
||||
`「#反对禁言${targetQQ}」\n`,
|
||||
`「#反对投票${targetQQ}」\n`,
|
||||
`超时时间:${outTime}秒\n`,
|
||||
`禁言时间:${BanTime}秒\n`,
|
||||
`规则:支持票大于反对票且参与人高于${minNum}人即可成功禁言`
|
||||
])
|
||||
isBan ? `禁言时间:${BanTime}秒\n` : "投票成功将会被移出群聊\n",
|
||||
`规则:支持票大于反对票且参与人高于${minNum}人即可成功投票\n`,
|
||||
veto ? "管理员拥有一票权" : ""
|
||||
], true)
|
||||
|
||||
if (!res) return false
|
||||
|
||||
@@ -142,10 +149,14 @@ export class GroupVoteBan extends plugin {
|
||||
let msg = `投票结束,投票结果:\n支持票数:${supportCount}\n反对票数:${opposeCount}\n`
|
||||
|
||||
if (supportCount > opposeCount && supportCount >= minNum) {
|
||||
msg += "支持票数大于反对票\n执行禁言操作"
|
||||
await e.group.muteMember(targetQQ, BanTime)
|
||||
msg += "支持票数大于反对票\n投票成功。"
|
||||
if (isBan) {
|
||||
await e.group.muteMember(targetQQ, BanTime)
|
||||
} else {
|
||||
await e.group.kickMember(targetQQ)
|
||||
}
|
||||
} else {
|
||||
msg += `反对票数大于支持票数或支持票数小于${minNum},不进行禁言操作`
|
||||
msg += `反对票数大于支持票数或支持票数小于${minNum},投票失败。`
|
||||
}
|
||||
delete Vote[key]
|
||||
return e.reply(msg, true)
|
||||
@@ -155,13 +166,14 @@ export class GroupVoteBan extends plugin {
|
||||
const { supportCount, opposeCount } = Vote[key]
|
||||
const msg = [
|
||||
segment.at(targetQQ),
|
||||
`(${targetQQ})的禁言投票仅剩一分钟结束\n`,
|
||||
`(${targetQQ})的${isBan ? "禁言" : "踢出"}投票仅剩一分钟结束\n`,
|
||||
"当前票数:\n",
|
||||
`支持票数:${supportCount}\n反对票数:${opposeCount}\n`,
|
||||
"请支持者发送:\n",
|
||||
`「#支持禁言${targetQQ}」\n`,
|
||||
`「#支持投票${targetQQ}」\n`,
|
||||
"不支持者请发送:\n",
|
||||
`「#反对禁言${targetQQ}」`
|
||||
`「#反对投票${targetQQ}」`,
|
||||
`发起人:${e.user_id}`
|
||||
]
|
||||
|
||||
await e.reply(msg)
|
||||
@@ -175,6 +187,8 @@ export class GroupVoteBan extends plugin {
|
||||
async Follow(e) {
|
||||
if (!common.checkPermission(e, "all", "admin")) return
|
||||
|
||||
const { BanTime } = Config.groupAdmin
|
||||
|
||||
let targetQQ = e.at || (e.msg.match(/\d+/)?.[0] || "")
|
||||
targetQQ = Number(targetQQ) || String(targetQQ)
|
||||
let key = e.group_id + targetQQ
|
||||
@@ -187,21 +201,25 @@ export class GroupVoteBan extends plugin {
|
||||
|
||||
if (!Vote[key]) return e.reply("❎ 未找到对应投票")
|
||||
|
||||
const { List, type } = Vote[key]
|
||||
|
||||
if (Config.groupAdmin.veto) {
|
||||
if (e.member.is_admin || e.member.is_owner) {
|
||||
if (/支持/.test(e.msg)) {
|
||||
await e.reply("投票结束,管理员介入,无需投票直接执行禁言", true)
|
||||
await e.group.muteMember(targetQQ, 3600)
|
||||
await e.reply("投票结束,管理员介入,执行操作。", true)
|
||||
if (type === "Ban") {
|
||||
await e.group.muteMember(targetQQ, BanTime)
|
||||
} else {
|
||||
await e.group.kickMember(targetQQ)
|
||||
}
|
||||
} else {
|
||||
await e.reply("投票取消,管理员介入", true)
|
||||
await e.reply("投票取消,管理员介入。", true)
|
||||
}
|
||||
delete Vote[key]
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
const { List } = Vote[key]
|
||||
|
||||
if (List.includes(e.user_id)) return e.reply("❎ 你已参与过投票,请勿重复参与")
|
||||
|
||||
if (/支持/.test(e.msg)) {
|
||||
@@ -5,10 +5,12 @@ noBan: false
|
||||
|
||||
# 投票禁言开关
|
||||
VoteBan: true
|
||||
# 投票踢人开关
|
||||
VoteKick: false
|
||||
# 投票禁言超时时间 单位:秒
|
||||
outTime: 180
|
||||
# 投票最低所需票数 不建议太低
|
||||
minNum: 3
|
||||
minNum: 4
|
||||
# 投票成功禁言时间 单位:秒
|
||||
BanTime: 3600
|
||||
# 是否允许管理员一票否决
|
||||
|
||||
Reference in New Issue
Block a user