完善订阅工具

- 补充日志
- 添加 rmMod 函数
- set 函数改名 sub
- 补充查看订阅数量的函数
- sub、unSub 函数改为私有
This commit is contained in:
dongRogen 2022-07-27 11:54:11 +08:00
parent 54f551c472
commit 4e3ea363e0

View File

@ -2,6 +2,7 @@ package top.jie65535.jcf.util
import net.mamoe.mirai.Bot
import net.mamoe.mirai.utils.MiraiLogger
import java.util.*
/**
* 订阅集
@ -13,6 +14,12 @@ class SubscriptionSet(
private val bot: Bot,
private val logger: MiraiLogger?
) {
/**
* 订阅集名称
*/
private val name = "sub:${bot.id}:" + UUID.randomUUID().toString()
/**
* 订阅表
* { mod : group/qq }
@ -24,8 +31,20 @@ class SubscriptionSet(
*/
private val receiverLock = LockUtil(receiverMap)
/**
* 订阅的mod数量
*/
val countMod = receiverMap.size
// region -- 参数
/**
* mod被订阅的qq/群数量
*/
infix fun countSub(mod: Int): Int = receiverLock.withLock {
get(mod)?.size ?: 0
}
/**
* 清空订阅
*/
@ -44,13 +63,16 @@ class SubscriptionSet(
* @param mod 模组id
* @param id qq/群号不等于0
*/
operator fun set(mod: Int, id: Long) {
private fun sub(mod: Int, id: Long) {
if (id == 0L) return
receiverLock.withLock {
val set = get(mod) ?: mutableSetOf()
put(mod, set)
set += id
logger?.info("")// TODO 日志
logger?.apply {
val type = if (id < 0) "group" else "qq"
info("订阅集[$name]添加订阅{$mod:${type}_$id}mod总订阅量${set.size}")
}
}
}
@ -60,7 +82,7 @@ class SubscriptionSet(
* @param mod 模组id
* @param qq q号大于0
*/
fun subQQ(mod: Int, qq: Long) = set(mod, qq)
fun subQQ(mod: Int, qq: Long) = sub(mod, qq)
/**
* 记录订阅
@ -68,7 +90,7 @@ class SubscriptionSet(
* @param mod 模组id
* @param group 群号大于0
*/
fun subGroup(mod: Int, group: Long) = set(mod, 0 - group)
fun subGroup(mod: Int, group: Long) = sub(mod, 0 - group)
/**
* 取消订阅
@ -81,12 +103,15 @@ class SubscriptionSet(
* @param mod 模组id
* @param id qq/群号不等于0
*/
fun unSub(mod: Int, id: Long) {
private fun unSub(mod: Int, id: Long) {
if (id == 0L) return
receiverLock.withLock {
get(mod)?.let {
it -= id
logger?.info("")// TODO 日志
logger?.apply {
val type = if (id < 0) "group" else "qq"
info("订阅集[$name]移除订阅{$mod:${type}_$id}mod总订阅量${it.size}")
}
}
}
}
@ -94,8 +119,8 @@ class SubscriptionSet(
/**
* 撤销用户订阅
*
* @param mod 模组id
* @param qq q号大于0
* @param mod 模组id
* @param qq q号大于0
*/
fun unSubQQ(mod: Int, qq: Long) = unSub(mod, qq)
@ -110,19 +135,22 @@ class SubscriptionSet(
/**
* 撤销mod订阅
*
* TODO 日志
*
* @param mod 模组id
*/
operator fun minusAssign(mod: Int) = receiverLock.withLock {
if (mod < 0) {
clear()
} else {
remove(mod)
infix fun rmMod(mod: Int) = receiverLock.withLock {
remove(mod)?.let {
logger?.info("订阅集[$name]清除mod[$mod]总mod量$size")
}
Unit// return value
}
/**
* 撤销mod订阅
*
* @param mod 模组id
*/
operator fun minusAssign(mod: Int) = rmMod(mod)
// endregion
// region -- 消费