完善订阅工具

- 补充日志
- 添加 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.Bot
import net.mamoe.mirai.utils.MiraiLogger import net.mamoe.mirai.utils.MiraiLogger
import java.util.*
/** /**
* 订阅集 * 订阅集
@ -13,6 +14,12 @@ class SubscriptionSet(
private val bot: Bot, private val bot: Bot,
private val logger: MiraiLogger? private val logger: MiraiLogger?
) { ) {
/**
* 订阅集名称
*/
private val name = "sub:${bot.id}:" + UUID.randomUUID().toString()
/** /**
* 订阅表 * 订阅表
* { mod : group/qq } * { mod : group/qq }
@ -24,8 +31,20 @@ class SubscriptionSet(
*/ */
private val receiverLock = LockUtil(receiverMap) private val receiverLock = LockUtil(receiverMap)
/**
* 订阅的mod数量
*/
val countMod = receiverMap.size
// region -- 参数 // 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 mod 模组id
* @param id qq/群号不等于0 * @param id qq/群号不等于0
*/ */
operator fun set(mod: Int, id: Long) { private fun sub(mod: Int, id: Long) {
if (id == 0L) return if (id == 0L) return
receiverLock.withLock { receiverLock.withLock {
val set = get(mod) ?: mutableSetOf() val set = get(mod) ?: mutableSetOf()
put(mod, set) put(mod, set)
set += id 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 mod 模组id
* @param qq q号大于0 * @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 mod 模组id
* @param group 群号大于0 * @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 mod 模组id
* @param id qq/群号不等于0 * @param id qq/群号不等于0
*/ */
fun unSub(mod: Int, id: Long) { private fun unSub(mod: Int, id: Long) {
if (id == 0L) return if (id == 0L) return
receiverLock.withLock { receiverLock.withLock {
get(mod)?.let { get(mod)?.let {
it -= id it -= id
logger?.info("")// TODO 日志 logger?.apply {
val type = if (id < 0) "group" else "qq"
info("订阅集[$name]移除订阅{$mod:${type}_$id}mod总订阅量${it.size}")
}
} }
} }
} }
@ -110,19 +135,22 @@ class SubscriptionSet(
/** /**
* 撤销mod订阅 * 撤销mod订阅
* *
* TODO 日志
*
* @param mod 模组id * @param mod 模组id
*/ */
operator fun minusAssign(mod: Int) = receiverLock.withLock { infix fun rmMod(mod: Int) = receiverLock.withLock {
if (mod < 0) { remove(mod)?.let {
clear() logger?.info("订阅集[$name]清除mod[$mod]总mod量$size")
} else {
remove(mod)
} }
Unit// return value Unit// return value
} }
/**
* 撤销mod订阅
*
* @param mod 模组id
*/
operator fun minusAssign(mod: Int) = rmMod(mod)
// endregion // endregion
// region -- 消费 // region -- 消费