diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UpsertUserAllHandler.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UpsertUserAllHandler.kt index 9e742ea4..790a74f1 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UpsertUserAllHandler.kt +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/handler/UpsertUserAllHandler.kt @@ -28,12 +28,21 @@ class UpsertUserAllHandler( ) : BaseHandler { fun String.isValidUsername() = isNotBlank() && length <= 8 + // For preventing duplicates: {loginDateTime: processed time} + val processed = mutableMapOf() + fun cleanupProcessed() = processed.entries.removeIf { System.currentTimeMillis() - it.value > 5 * 60 * 1000 } + @Throws(JacksonException::class) override fun handle(request: Map): Any? { val upsertUserAll = mapper.convert(request, Mai2UpsertUserAll::class.java) val userId = upsertUserAll.userId val req = upsertUserAll.upsertUserAll + // Check if the request has been processed before + if (processed.containsKey(userId)) return SUCCESS + processed[userId] = System.currentTimeMillis() + cleanupProcessed() + // If user is guest, just return OK response. if ((userId and 281474976710657L) == 281474976710657L) return SUCCESS diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/request/Mai2UpsertUserAll.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/request/Mai2UpsertUserAll.kt index 4e8916fe..71bd457f 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/request/Mai2UpsertUserAll.kt +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/request/Mai2UpsertUserAll.kt @@ -7,6 +7,8 @@ class Mai2UpsertUserAll( var userId: Long, var upsertUserAll: Mai2UserAll, + var loginDateTime: Long = 0, // Nonce, sort of + var userPlaylogList: List? = null, // SDGA 1.65 / SDGB 1.53 )