feat(core/snapchat_plus): ad free tier

This commit is contained in:
rhunk 2024-12-08 18:02:21 +01:00
parent 7d932f0fb4
commit b6f4d91cac
3 changed files with 23 additions and 13 deletions

View File

@ -1373,6 +1373,11 @@
"bitmoji_avatar_changes": "Notify when someone changes their Bitmoji avatar",
"bitmoji_background_changes": "Notify when someone changes their Bitmoji background",
"bitmoji_scene_changes": "Notify when someone changes their Bitmoji scene"
},
"snapchat_plus":{
"not_subscribed": "Not Subscribed",
"basic": "Basic",
"ad_free": "Ad Free"
}
}
},

View File

@ -37,7 +37,7 @@ class Global : ConfigContainer() {
}
val betterLocation = container("better_location", BetterLocationConfig())
val snapchatPlus = boolean("snapchat_plus") { requireRestart() }
val snapchatPlus = unique("snapchat_plus", "not_subscribed", "basic", "ad_free") { requireRestart() }
val mediaUploadQualityConfig = container("media_upload_quality", MediaUploadQualityConfig())
val disableConfirmationDialogs = multiple("disable_confirmation_dialogs", "erase_message", "remove_friend", "block_friend", "ignore_friend", "hide_friend", "hide_conversation", "clear_conversation") { requireRestart() }
val disableMetrics = boolean("disable_metrics") { requireRestart() }

View File

@ -13,20 +13,25 @@ class SnapchatPlus: Feature("SnapchatPlus") {
private val expirationTimeMillis = (System.currentTimeMillis() + 15552000000L)
override fun init() {
if (!context.config.global.snapchatPlus.get()) return
val snapchatPlusTier = context.config.global.snapchatPlus.getNullable()
context.mappings.useMapper(PlusSubscriptionMapper::class) {
classReference.get()?.hookConstructor(HookStage.AFTER) { param ->
val instance = param.thisObject<Any>()
val tier = instance.getObjectField(tierField.getAsString()!!)
if (tier == 2) return@hookConstructor
//subscription tier
instance.setObjectField(tierField.getAsString()!!, 2)
//subscription status
instance.setObjectField(statusField.getAsString()!!, 2)
if (snapchatPlusTier != null) {
context.mappings.useMapper(PlusSubscriptionMapper::class) {
classReference.get()?.hookConstructor(HookStage.AFTER) { param ->
val instance = param.thisObject<Any>()
//subscription tier
instance.setObjectField(tierField.getAsString()!!, when (snapchatPlusTier) {
"not_subscribed" -> 1
"basic" -> 2
"ad_free" -> 3
else -> 2
})
//subscription status
instance.setObjectField(statusField.getAsString()!!, 2)
instance.setObjectField(originalSubscriptionTimeMillisField.getAsString()!!, originalSubscriptionTime)
instance.setObjectField(expirationTimeMillisField.getAsString()!!, expirationTimeMillis)
instance.setObjectField(originalSubscriptionTimeMillisField.getAsString()!!, originalSubscriptionTime)
instance.setObjectField(expirationTimeMillisField.getAsString()!!, expirationTimeMillis)
}
}
}