diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml new file mode 100644 index 0000000..4a53bee --- /dev/null +++ b/.idea/AndroidProjectSystem.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 9b06c1b..ba7ef6c 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,13 +4,14 @@ diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml new file mode 100644 index 0000000..69f3723 --- /dev/null +++ b/.idea/material_theme_project_new.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml deleted file mode 100644 index 96c24d8..0000000 --- a/.idea/sqldialects.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 54ce473..78f8da7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,5 +3,5 @@ org.gradle.downloadSources=false org.gradle.parallel=true org.gradle.degree_of_parallelism=16 project_group=top.r3944realms.ltdmanager -project_version=1.17-SNAPSHOT +project_version=1.19-SNAPSHOT dg_lab_version=4.4.14.19 diff --git a/src/main/kotlin/top/r3944realms/ltdmanager/dglab/model/game/GameClientOperation.kt b/src/main/kotlin/top/r3944realms/ltdmanager/dglab/model/game/GameClientOperation.kt index ed181de..f55a6d9 100644 --- a/src/main/kotlin/top/r3944realms/ltdmanager/dglab/model/game/GameClientOperation.kt +++ b/src/main/kotlin/top/r3944realms/ltdmanager/dglab/model/game/GameClientOperation.kt @@ -43,7 +43,7 @@ class GameClientOperation( var clientSelf: DGPBClientManager? = null private var hasBinding = false private var bindingTimeoutJob: kotlinx.coroutines.Job? = null // 保存倒计时任务 - + var info: ClientManager.ClientStrengthInfo? = null override fun ClientStartingHandler() { LoggerUtil.logger.debug("Player $playerId is starting the client...") scope.launch { @@ -245,19 +245,19 @@ class GameClientOperation( // } when (p0?.commandType) { PowerBoxDataType.STRENGTH -> scope.launch { -// val strengthInfo : IPowerBoxMsg.StrengthInfo -// -// strengthInfo = IPowerBoxMsg.StrengthInfo.read( -// PowerBoxMessage.createPowerBoxMessage( -// p0, -// MessageDirection.of( -// MessageDirection.DirectType.PLACEHOLDER_TO_PLACEHOLDER, -// ROM_UUID, -// ROM_UUID -// ) -// ) -// ) + val strengthInfo : IPowerBoxMsg.StrengthInfo + strengthInfo = IPowerBoxMsg.StrengthInfo.read( + PowerBoxMessage.createPowerBoxMessage( + p0, + MessageDirection.of( + MessageDirection.DirectType.PLACEHOLDER_TO_PLACEHOLDER, + ROM_UUID, + ROM_UUID + ) + ) + ) + info = ClientManager.ClientStrengthInfo(strengthInfo.aValue, strengthInfo.aMax, strengthInfo.bValue, strengthInfo.bMax) // napCatClient.sendUnit(SendPrivateMsgRequest(listOf(MessageElement.text("强度信息:\n A:${strengthInfo.aValue}/${strengthInfo.aMax} \n B:${strengthInfo.bValue}/${strengthInfo.bMax}")), ID.long(playerId))) } PowerBoxDataType.PULSE -> scope.launch { diff --git a/src/main/kotlin/top/r3944realms/ltdmanager/module/DGLabModule.kt b/src/main/kotlin/top/r3944realms/ltdmanager/module/DGLabModule.kt index c8c66ed..241c10a 100644 --- a/src/main/kotlin/top/r3944realms/ltdmanager/module/DGLabModule.kt +++ b/src/main/kotlin/top/r3944realms/ltdmanager/module/DGLabModule.kt @@ -350,7 +350,7 @@ class DGLabModule( private var dgLabState = loadState() override fun getState(): DgLabState = dgLabState override fun getStateFileInternal(): File = stateFile - + private var refreshJob: Job? = null private val triggerFilter by lazy { TriggerMessageFilter( listOf( @@ -377,9 +377,16 @@ class DGLabModule( if (loaded) handleMessages(messages) } } + refreshJob = scope!!.launch { + while (isActive) { + delay(30 * 1000L) // 30秒 + refreshPlayerList() + } + } } override suspend fun onUnload() { saveState(dgLabState) + refreshJob?.cancel() dgLabManager?.close() scope?.cancel() LoggerUtil.logger.info("[$name] 模块已卸载完成") @@ -502,6 +509,40 @@ class DGLabModule( .associate { it.userId to it.nickname }) dgLabManager?.initClientManager() } + private suspend fun refreshPlayerList() { + try { + val getGroupMemberListEvent = napCatClient.send( + GetGroupMemberListRequest( + ID.long(groupMessagePollingModule.targetGroupId), + false + ) + ) + val currentMembers = getGroupMemberListEvent.data.filter { !it.isRobot } + .associate { it.userId to it.nickname } + + val playerManager = dgLabManager?.getPlayerManager() ?: return + + // 获取当前玩家列表 + val existingPlayers = playerManager.allPlayers().map { it.id }.toSet() + val targetPlayers = currentMembers.keys.toSet() + + // 新增玩家 + (targetPlayers - existingPlayers).forEach { id -> + playerManager.addPlayer(Player(id, currentMembers[id] ?: id.toString(), false)) + LoggerUtil.logger.info("[$name] 定时刷新 - 新增玩家: $id") + } + + // 移除不存在的玩家 + (existingPlayers - targetPlayers).forEach { id -> + playerManager.removePlayer(id) + dgLabManager?.removeClient(id.toString()) + LoggerUtil.logger.info("[$name] 定时刷新 - 移除玩家: $id") + } + } catch (e: Exception) { + LoggerUtil.logger.error("[$name] 刷新玩家列表失败", e) + } + } + // private fun getHelp(): Int { // scope?.launch { // sendMessage() diff --git a/src/main/kotlin/top/r3944realms/ltdmanager/module/InvitationCodesModule.kt b/src/main/kotlin/top/r3944realms/ltdmanager/module/InvitationCodesModule.kt index 4f95f71..4948cee 100644 --- a/src/main/kotlin/top/r3944realms/ltdmanager/module/InvitationCodesModule.kt +++ b/src/main/kotlin/top/r3944realms/ltdmanager/module/InvitationCodesModule.kt @@ -76,7 +76,7 @@ class InvitationCodesModule( private val mailModule: MailModule, private val apiToken: String, selfId: Long, - private val cooldownMillis: Long = 120_000, + private val cooldownMillis: Long = 120_000L, private val keywords: Set = setOf("申请邀请码") ) : BaseModule(Modules.INVITATION_CODE, moduleName), PersistentState { @@ -448,9 +448,10 @@ class InvitationCodesModule( if (response.response is InvitationCodeGenerationResponse) { if (response.response.success) { response.response.data - } else + } else { LoggerUtil.logger.warn("[$name] API返回失败: ${response.response.message}") - null + null + } } else { LoggerUtil.logger.warn("[$name] 返回非预期对象类型: ${response.response.javaClass}") null diff --git a/src/main/resources/mail-body.html b/src/main/resources/mail-body.html index faf4135..c381a29 100644 --- a/src/main/resources/mail-body.html +++ b/src/main/resources/mail-body.html @@ -93,7 +93,7 @@

请点击下方按钮前往注册:

- 皮肤站注册 + 皮肤站注册

如有任何问题,欢迎随时联系我们的 技术支持