💎 新增投票禁言配置 #I9O38D

This commit is contained in:
等风来
2024-05-10 18:28:36 +08:00
parent 70733f3e78
commit ebfb92ea1e
2 changed files with 54 additions and 22 deletions

View File

@@ -37,9 +37,11 @@ export class GroupVoteBan extends plugin {
*/
async Switch() {
if (!common.checkPermission(this.e, "master")) return
let type = !!/启用/.test(this.e.msg)
const { VoteBan } = Config.groupAdmin
if (VoteBan && type) return this.reply("❎ 投票禁言功能已处于启用状态")
if (!VoteBan && !type) return this.reply("❎ 投票禁言功能已处于禁用状态")
@@ -52,14 +54,17 @@ export class GroupVoteBan extends plugin {
* @param e
*/
async Initiate(e) {
if (!Config.groupAdmin.VoteBan) return e.reply("❎ 该功能已被禁用,请发送 #启用投票禁言 来启用该功能。", true)
const { VoteBan, outTime, minNum, BanTime, voteAdmin } = Config.groupAdmin
if (!VoteBan) return e.reply("❎ 该功能已被禁用,请发送 #启用投票禁言 来启用该功能。", true)
if (!common.checkPermission(e, "all", "admin")) return
let targetQQ = e.at || (e.msg.match(/\d+/)?.[0] || "")
targetQQ = Number(targetQQ) || String(targetQQ)
let key = e.group_id + targetQQ
const time = Config.groupAdmin.outTime
if (e.user_id === targetQQ) return e.reply("❎ 您不能对自己进行投票")
if (Config.masterQQ?.includes(Number(targetQQ) || String(targetQQ)) || a.includes(md5(String(targetQQ)))) return e.reply("❎ 该命令对主人无效")
@@ -70,15 +75,21 @@ export class GroupVoteBan extends plugin {
const group = e.bot.pickGroup(e.group_id, true)
const targetMember = group.pickMember(targetQQ)
const targetMemberInfo = targetMember?.info || await targetMember?.getInfo?.()
if (!targetMemberInfo) return e.reply("❎ 该群没有这个人")
if (targetMemberInfo.role === "owner") return e.reply("❎ 权限不足,该命令对群主无效")
if (targetMemberInfo.role === "admin" && !group.is_owner) return e.reply("❎ 权限不足,需要群主权限")
if (targetMemberInfo.role === "admin") {
if (!voteAdmin) return e.reply("❎ 该命令对管理员无效")
if (!group.is_owner) return e.reply("❎ Bot权限不足需要群主权限")
}
/** 写入数据 */
Vote[key] = {
supportCount: 1,
opposeCount: 0,
List: [ e.user_id ]
}
let res = await e.reply([
segment.at(targetQQ),
`(${targetQQ})的禁言投票已发起\n`,
@@ -89,24 +100,29 @@ export class GroupVoteBan extends plugin {
`「#支持禁言${targetQQ}\n`,
"不支持者请发送:\n",
`「#反对禁言${targetQQ}\n`,
`超时时间:${time}\n`,
"规则支持票大于反对票且参与人高于3人即可成功禁言"
`超时时间:${outTime}\n`,
`禁言时间:${BanTime}\n`,
`规则:支持票大于反对票且参与人高于${minNum}人即可成功禁言`
])
if (!res) return false
setTimeout(async() => {
// 处理结果
if (!Vote[key]) return
const { supportCount, opposeCount } = Vote[key]
let msg = `投票结束,投票结果:\n支持票数:${supportCount}\n反对票数:${opposeCount}\n`
if (supportCount > opposeCount && supportCount >= 3) {
if (supportCount > opposeCount && supportCount >= minNum) {
msg += "支持票数大于反对票\n执行禁言操作"
await e.group.muteMember(targetQQ, 3600)
await e.group.muteMember(targetQQ, BanTime)
} else {
msg += "反对票数大于支持票数或支持票数小于3,不进行禁言操作"
msg += `反对票数大于支持票数或支持票数小于${minNum},不进行禁言操作`
}
delete Vote[key]
return e.reply(msg, true)
}, time * 1000)
}, outTime * 1000)
setTimeout(async() => {
const { supportCount, opposeCount } = Vote[key]
const msg = [
@@ -117,10 +133,11 @@ export class GroupVoteBan extends plugin {
"请支持者发送:\n",
`「#支持禁言${targetQQ}\n`,
"不支持者请发送:\n",
`「#反对禁言${targetQQ}\n`
`「#反对禁言${targetQQ}`
]
e.reply(msg)
}, time * 1000 - 60000)
await e.reply(msg)
}, outTime * 1000 - 60000)
}
/**
@@ -129,24 +146,30 @@ export class GroupVoteBan extends plugin {
*/
async Follow(e) {
if (!common.checkPermission(e, "all", "admin")) return
let targetQQ = e.at || (e.msg.match(/\d+/)?.[0] || "")
targetQQ = Number(targetQQ) || String(targetQQ)
let key = e.group_id + targetQQ
if (Config.masterQQ?.includes(Number(targetQQ) || String(targetQQ)) || a.includes(md5(String(targetQQ)))) return e.reply("❎ 该命令对主人无效")
if (!targetQQ) return e.reply("❎ 请艾特或输入需要进行跟票的被禁言人QQ")
if (Config.masterQQ?.includes(Number(targetQQ) || String(targetQQ)) || a.includes(md5(String(targetQQ)))) return e.reply("❎ 该命令对主人无效")
if (e.user_id === targetQQ) return e.reply("❎ 您不能对自己进行投票")
if (!Vote[key]) return e.reply("❎ 未找到对应投票")
if (e.member.is_admin || e.member.is_owner) {
if (/支持/.test(e.msg)) {
await e.reply("投票结束,管理员介入,无需投票直接执行禁言", true)
await e.group.muteMember(targetQQ, 3600)
} else {
await e.reply("投票取消,管理员介入", true)
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)
} else {
await e.reply("投票取消,管理员介入", true)
}
delete Vote[key]
return true
}
delete Vote[key]
return true
}
const { List } = Vote[key]

View File

@@ -2,7 +2,16 @@
whiteQQ: []
#白名单禁言自动解禁
noBan: false
# 投票禁言开关
VoteBan: true
# 投票禁言超时时间 单位:秒
outTime: 180
# 投票最低所需票数 不建议太低
minNum: 3
# 投票成功禁言时间 单位:秒
BanTime: 3600
# 是否允许管理员一票否决
veto: true
# 是否允许投票禁言管理员(Bot为群主的情况下)
voteAdmin: false