Shamrock: Remove outdated dependencies and add new APIs

This commit is contained in:
fuqiuluo 2024-01-27 21:06:39 +08:00
parent c39c2a172f
commit c7265ba628
199 changed files with 3404 additions and 2471 deletions

1
annotations/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -0,0 +1,9 @@
plugins {
id("java-library")
id("org.jetbrains.kotlin.jvm")
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

View File

@ -0,0 +1,8 @@
package moe.fuqiuluo.symbols
@Retention(AnnotationRetention.SOURCE)
@Target(AnnotationTarget.CLASS)
annotation class OneBotHandler(
val actionName: String,
val alias: Array<String> = []
)

View File

@ -4,7 +4,7 @@ import java.io.ByteArrayOutputStream
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
kotlin("plugin.serialization") version "1.8.10"
kotlin("plugin.serialization") version "1.9.21"
}
android {
@ -17,7 +17,7 @@ android {
minSdk = 27
targetSdk = 34
versionCode = getVersionCode()
versionName = "1.0.7" + ".r${getGitCommitCount()}." + getVersionName()
versionName = "1.0.8" + ".r${getGitCommitCount()}." + getVersionName()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
@ -92,7 +92,7 @@ android {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.4.3"
kotlinCompilerExtensionVersion = "1.5.4"
}
packaging {
jniLibs {
@ -187,10 +187,13 @@ fun getVersionName(): String {
}
dependencies {
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1")
implementation("androidx.activity:activity-compose:1.7.2")
implementation(platform("androidx.compose:compose-bom:2023.06.01"))
val composeBom = platform("androidx.compose:compose-bom:2023.10.01")
implementation(composeBom)
DEPENDENCY_ANDROIDX.forEach {
implementation(it)
}
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
@ -199,31 +202,26 @@ dependencies {
implementation("com.google.accompanist:accompanist-pager:0.31.5+")
//noinspection GradleDynamicVersion
implementation("com.google.accompanist:accompanist-systemuicontroller:0.31.5+")
//noinspection GradleDynamicVersion useless
// implementation("androidx.constraintlayout:constraintlayout-compose:1.1.0+")
implementation("io.coil-kt:coil:2.4.0")
implementation("io.coil-kt:coil-compose:2.4.0")
implementation("org.jetbrains.kotlinx:kotlinx-io-jvm:0.1.16")
val ktorVersion = "2.3.3"
implementation("io.ktor:ktor-server-core:$ktorVersion")
implementation("io.ktor:ktor-server-host-common:$ktorVersion")
implementation("io.ktor:ktor-server-status-pages:$ktorVersion")
implementation("io.ktor:ktor-server-netty:$ktorVersion")
implementation("io.ktor:ktor-server-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-cio:$ktorVersion")
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
//implementation("io.ktor:ktor-serialization-kotlinx-protobuf:$ktorVersion")
implementation(kotlinx("io-jvm", "0.1.16"))
implementation(ktor("server", "core"))
implementation(ktor("server", "host-common"))
implementation(ktor("server", "status-pages"))
implementation(ktor("server", "netty"))
implementation(ktor("server", "content-negotiation"))
implementation(ktor("client", "core"))
implementation(ktor("client", "content-negotiation"))
implementation(ktor("client", "cio"))
implementation(ktor("serialization", "kotlinx-json"))
implementation(project(":xposed"))
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
androidTestImplementation(platform("androidx.compose:compose-bom:2023.06.01"))
androidTestImplementation(platform("androidx.compose:compose-bom:2023.10.01"))
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation("androidx.compose.ui:ui-test-manifest")

View File

@ -85,6 +85,7 @@ import moe.fuqiuluo.shamrock.ui.tools.getShamrockVersion
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
CompositionLocalProvider(
LocalIndication provides NoIndication

View File

@ -1,7 +1,6 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.2.0" apply false
id("org.jetbrains.kotlin.android") version "1.8.10" apply false
id("org.jetbrains.kotlin.android") version "1.9.20" apply false
id("com.android.library") version "8.2.0" apply false
//id("io.realm.kotlin") version "1.11.0" apply false
}

10
buildSrc/build.gradle.kts Normal file
View File

@ -0,0 +1,10 @@
plugins {
kotlin("jvm") version "1.9.21"
}
repositories {
mavenCentral()
}
dependencies {
}

View File

@ -0,0 +1,26 @@
val DEPENDENCY_ANDROIDX = arrayOf(
"androidx.core:core-ktx:1.12.0",
"androidx.appcompat:appcompat:1.6.1",
"com.google.android.material:material:1.11.0",
"androidx.exifinterface:exifinterface:1.3.7",
"androidx.lifecycle:lifecycle-runtime-ktx:2.6.1",
"androidx.activity:activity-compose:1.7.2",
)
const val DEPENDENCY_JSON5K = "io.github.xn32:json5k:0.3.0"
const val DEPENDENCY_PROTOBUF = "com.google.protobuf:protobuf-java:3.24.0"
const val DEPENDENCY_JAVA_WEBSOCKET = "org.java-websocket:Java-WebSocket:1.5.4"
fun room(name: String) = "androidx.room:room-$name:${Versions.roomVersion}"
fun kotlinx(name: String, version: String) = "org.jetbrains.kotlinx:kotlinx-$name:$version"
fun ktor(target: String, name: String): String {
return "io.ktor:ktor-$target-$name:${Versions.ktorVersion}"
}
object Versions {
const val roomVersion = "2.5.0"
const val ktorVersion = "2.3.3"
}

View File

@ -22,3 +22,5 @@ kotlin.code.style=official
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
android.default.buildFeatures.aidl=true
kotlin.experimental.tryK2=true
ksp.incremental=false

1
processor/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

View File

@ -0,0 +1,18 @@
plugins {
kotlin("jvm")
id("com.google.devtools.ksp") version "1.9.21-1.0.15"
}
ksp {
arg("autoserviceKsp.verify", "true")
arg("autoserviceKsp.verbose", "true")
}
dependencies {
implementation(project(":annotations"))
implementation("com.google.auto.service:auto-service-annotations:1.1.1")
implementation("com.google.devtools.ksp:symbol-processing-api:1.9.21-1.0.15")
implementation("com.squareup:kotlinpoet:1.14.2")
ksp("dev.zacsweers.autoservice:auto-service-ksp:1.1.0")
}

View File

21
processor/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>

View File

@ -0,0 +1,84 @@
@file:OptIn(KspExperimental::class)
@file:Suppress("LocalVariableName", "UNCHECKED_CAST")
package moe.fuqiuluo.ksp.impl
import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.getAnnotationsByType
import com.google.devtools.ksp.getClassDeclarationByName
import com.google.devtools.ksp.processing.CodeGenerator
import com.google.devtools.ksp.processing.Dependencies
import com.google.devtools.ksp.processing.KSPLogger
import com.google.devtools.ksp.processing.Resolver
import com.google.devtools.ksp.processing.SymbolProcessor
import com.google.devtools.ksp.symbol.ClassKind
import com.google.devtools.ksp.symbol.KSAnnotated
import com.google.devtools.ksp.symbol.KSClassDeclaration
import com.google.devtools.ksp.symbol.KSVisitorVoid
import com.google.devtools.ksp.validate
import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.FunSpec
import moe.fuqiuluo.symbols.OneBotHandler
class OneBotHandlerProcessor(
private val codeGenerator: CodeGenerator,
private val logger: KSPLogger
): SymbolProcessor {
override fun process(resolver: Resolver): List<KSAnnotated> {
val ActionManagerNode = resolver.getClassDeclarationByName("moe.fuqiuluo.shamrock.remote.action.ActionManager")
if (ActionManagerNode == null) {
logger.error("OneBotHandlerProcessor: ActionManager not found")
return emptyList()
}
val symbols = resolver.getSymbolsWithAnnotation(OneBotHandler::class.qualifiedName!!)
val unableToProcess = symbols.filterNot { it.validate() }
val oneBotHandlers = (symbols.filter {
it is KSClassDeclaration && it.validate() && it.classKind == ClassKind.OBJECT
} as Sequence<KSClassDeclaration>).toList()
if (oneBotHandlers.isNotEmpty()) {
ActionManagerNode.accept(ActionManagerVisitor(oneBotHandlers), Unit)
}
return unableToProcess.toList()
}
inner class ActionManagerVisitor(
private val actionHandlers: List<KSClassDeclaration>
): KSVisitorVoid() {
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
val packageName = classDeclaration.packageName.asString()
// generate kotlin `init { }`
val fileSpec = FileSpec.builder(packageName, classDeclaration.qualifiedName?.asString() ?: run {
throw IllegalStateException("ActionManagerVisitor: classDeclaration.qualifiedName is null")
}).addFunction(FunSpec.builder("initManager").apply {
actionHandlers.forEach { handler ->
// fetch the params of the annotation
val annotation = handler.getAnnotationsByType(OneBotHandler::class).first()
val actionName = annotation.actionName
val alias = annotation.alias
alias.forEach { name ->
addStatement("actionMap[\"$name\"] = ${handler.simpleName.asString()}")
}
addStatement("actionMap[\"$actionName\"] = ${handler.simpleName.asString()}")
}
}.build()).apply {
addImport("moe.fuqiuluo.shamrock.remote.action.ActionManager", "actionMap")
actionHandlers.forEach {
addImport("moe.fuqiuluo.shamrock.remote.action.handlers", it.simpleName.asString())
}
}.build()
codeGenerator.createNewFile(
dependencies = Dependencies(aggregating = false),
packageName = packageName,
fileName = "Auto" + classDeclaration.simpleName.asString()
).use { outputStream ->
outputStream.writer().use {
fileSpec.writeTo(it)
}
}
}
}
}

View File

@ -0,0 +1,17 @@
package moe.fuqiuluo.ksp.providers
import com.google.auto.service.AutoService
import com.google.devtools.ksp.processing.SymbolProcessor
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
import com.google.devtools.ksp.processing.SymbolProcessorProvider
import moe.fuqiuluo.ksp.impl.OneBotHandlerProcessor
@AutoService(SymbolProcessorProvider::class)
class OneBotHandlerProcessorProvider: SymbolProcessorProvider {
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
return OneBotHandlerProcessor(
environment.codeGenerator,
environment.logger
)
}
}

1
protobuf/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/build

41
protobuf/build.gradle.kts Normal file
View File

@ -0,0 +1,41 @@
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
kotlin("plugin.serialization") version "1.9.21"
}
android {
namespace = "moe.whitechi73.protobuf"
compileSdk = 34
defaultConfig {
minSdk = 24
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation(DEPENDENCY_PROTOBUF)
implementation(kotlinx("serialization-protobuf", "1.6.2"))
implementation(kotlinx("serialization-json", "1.6.2"))
}

View File

21
protobuf/proguard-rules.pro vendored Normal file
View File

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>

View File

@ -0,0 +1,128 @@
@file:OptIn(ExperimentalSerializationApi::class)
@file:Suppress("ArrayInDataClass")
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunAddRichMediaReq(
@ProtoNumber(1) val commInfo: WeiyunCollectCommInfo? = null,
@ProtoNumber(2) val summary: WeiyunRichMediaSummary? = null,
@ProtoNumber(3) val richMediaContent: List<WeiyunRichMediaContent>? = null,
@ProtoNumber(4) val needShareUrl: Boolean = false,
)
@Serializable
data class WeiyunRichMediaSummary(
@ProtoNumber(1) val title: String? = null,
@ProtoNumber(2) val subTitle: String = "",
@ProtoNumber(3) val brief: String = "",
@ProtoNumber(4) val picList: List<WeiyunPicInfo>? = null,
@ProtoNumber(5) val contentType: UInt = UInt.MIN_VALUE,
@ProtoNumber(6) val originalUri: String = "",
@ProtoNumber(7) val publisher: String = "",
@ProtoNumber(8) val richMediaVersion: UInt = UInt.MIN_VALUE,
)
@Serializable
data class WeiyunRichMediaContent(
@ProtoNumber(1) val richMedia: WeiyunRichMedia? = null,
@ProtoNumber(2) val rawData: ByteArray? = null,
@ProtoNumber(3) val bizDataList: List<ByteArray>? = null,
@ProtoNumber(4) val picList: List<WeiyunPicInfo>? = null,
@ProtoNumber(5) val fileList: List<WeiyunFileInfo>? = null,
)
@Serializable
data class WeiyunFileInfo(
@ProtoNumber(1) val src: UInt = UInt.MIN_VALUE,
@ProtoNumber(2) val uid: ULong = ULong.MIN_VALUE,
@ProtoNumber(3) val bid: UInt = UInt.MIN_VALUE,
@ProtoNumber(4) val fid: String = "",
@ProtoNumber(5) val name: String = "",
@ProtoNumber(6) val size: ULong = ULong.MIN_VALUE,
@ProtoNumber(7) val md5: ByteArray? = null,
@ProtoNumber(8) val sha1: ByteArray? = null,
@ProtoNumber(9) val category: UInt = UInt.MIN_VALUE,
)
@Serializable
data class WeiyunRichMedia(
@ProtoNumber(1) val sections: List<WeiyunSection>? = null
)
@Serializable
data class WeiyunSection(
@ProtoNumber(1) val items: List<WeiyunItem>? = null
)
@Serializable
data class WeiyunItem(
@ProtoNumber(1) val itemType: UInt = UInt.MIN_VALUE,
@ProtoNumber(2) val paragraph: WeiyunParagraph? = null,
@ProtoNumber(3) val anchor: WeiyunAnchor? = null,
@ProtoNumber(4) val picInfo: WeiyunPicInfo? = null,
)
@Serializable
data class WeiyunPicInfo(
@ProtoNumber(1) val uri: String = "",
@ProtoNumber(2) val md5: ByteArray? = null,
@ProtoNumber(3) val sha1: ByteArray? = null,
@ProtoNumber(4) val name: String = "",
@ProtoNumber(5) val note: String = "",
@ProtoNumber(6) val width: UInt = UInt.MIN_VALUE,
@ProtoNumber(7) val height: UInt = UInt.MIN_VALUE,
@ProtoNumber(8) val size: ULong = ULong.MIN_VALUE,
@ProtoNumber(9) val type: UInt = UInt.MIN_VALUE,
@ProtoNumber(10) val owner: WeiyunAuthor? = null,
@ProtoNumber(11) val picId: String = "",
)
@Serializable
data class WeiyunAnchor(
@ProtoNumber(1) val url: String = "",
@ProtoNumber(2) val desc: String = "",
)
@Serializable
data class WeiyunParagraph(
@ProtoNumber(1) val content: String = "",
@ProtoNumber(2) val style: WeiyunStyle? = null,
)
@Serializable
data class WeiyunStyle(
@ProtoNumber(1) val color: String = "#FFFFFF",
@ProtoNumber(2) val fontFamily: String = "",
@ProtoNumber(3) val fontWeight: String = "normal",
@ProtoNumber(4) val fontSize: String = "",
)
@Serializable
data class WeiyunCollectCommInfo(
@ProtoNumber(1) val bid: UInt = UInt.MIN_VALUE,
@ProtoNumber(2) val category: UInt = UInt.MIN_VALUE,
@ProtoNumber(3) val author: WeiyunAuthor? = null,
@ProtoNumber(4) val createTime: ULong = ULong.MIN_VALUE,
@ProtoNumber(5) val seq: ULong = ULong.MIN_VALUE,
@ProtoNumber(6) val bizKey: String = "",
@ProtoNumber(7) val bizDataList: List<ByteArray>? = null,
@ProtoNumber(8) val shareUrl: String = "",
@ProtoNumber(9) val originalAppId: UInt = UInt.MIN_VALUE,
@ProtoNumber(10) val customGroupId: UInt = UInt.MIN_VALUE,
@ProtoNumber(11) val modifyTime: ULong = ULong.MIN_VALUE,
@ProtoNumber(12) val qzoneUgcKey: String = "",
)
@Serializable
data class WeiyunAuthor(
@ProtoNumber(1) val type: UInt = UInt.MIN_VALUE,
@ProtoNumber(2) val numId: ULong = ULong.MIN_VALUE,
@ProtoNumber(3) val strId: String = "",
@ProtoNumber(4) val groupId: ULong = ULong.MIN_VALUE,
@ProtoNumber(5) val groupName: String = "",
)

View File

@ -0,0 +1,13 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunAddRichMediaResp(
@ProtoNumber(1) val cid: String = "",
@ProtoNumber(2) val collectTime: ULong = ULong.MIN_VALUE,
@ProtoNumber(3) val shareUrl: String = "",
)

View File

@ -0,0 +1,10 @@
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunComm(
@ProtoNumber(1) val req: WeiyunCommonReq? = null,
@ProtoNumber(2) val resp: WeiyunCommonResp? = null
)

View File

@ -0,0 +1,15 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunCommonReq (
@ProtoNumber(2000) val getFavListReq: WeiyunGetFavListReq? = null,
@ProtoNumber(2001) val getFavContentReq: WeiyunGetFavContentReq? = null,
@ProtoNumber(2009) val addRichMediaReq: WeiyunAddRichMediaReq? = null,
@ProtoNumber(2010) val fastUploadResourceReq: WeiyunFastUploadResourceReq? = null,
)

View File

@ -0,0 +1,14 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunCommonResp(
@ProtoNumber(20000) val getFavListResp: WeiyunGetFavListResp? = null,
@ProtoNumber(20001) val getFavContentResp: WeiyunGetFavContentResp? = null,
@ProtoNumber(20009) val addRichMediaResp: WeiyunAddRichMediaResp? = null,
@ProtoNumber(20010) val fastUploadResourceResp: WeiyunFastUploadResourceResp? = null,
)

View File

@ -0,0 +1,14 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunFastUploadResourceReq(
@ProtoNumber(1) val picInfoList: List<WeiyunPicInfo>? = null,
@ProtoNumber(2) val fileInfoList: List<WeiyunFileInfo>? = null,
@ProtoNumber(3) val hostFlag: UInt = UInt.MIN_VALUE,
@ProtoNumber(4) val httpsFlag: UInt = UInt.MIN_VALUE,
)

View File

@ -0,0 +1,39 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunFastUploadResourceResp(
@ProtoNumber(1) val picResultList: List<WeiyunFastUploadPicResult>? = null,
@ProtoNumber(2) val fileResultList: List<WeiyunFastUploadFileResult>? = null,
)
@Serializable
data class WeiyunFastUploadPicResult(
@ProtoNumber(1) val result: UInt = UInt.MIN_VALUE,
@ProtoNumber(2) val picInfo: WeiyunPicInfo? = null,
)
@Serializable
data class WeiyunFastUploadFileResult(
@ProtoNumber(1) val result: UInt = UInt.MIN_VALUE,
@ProtoNumber(2) val picInfo: WeiyunPicInfo? = null,
@ProtoNumber(3) val uploadFileInfo: WeiyunUploadFileInfo? = null,
@ProtoNumber(4) val notRetransmission: UInt = UInt.MIN_VALUE,
@ProtoNumber(5) val failedTips: String = "",
)
@Serializable
data class WeiyunUploadFileInfo(
@ProtoNumber(1) val fileId: String = "",
@ProtoNumber(2) val sha1: ByteArray? = null,
@ProtoNumber(3) val checkKey: ByteArray? = null,
@ProtoNumber(4) val host: String = "",
@ProtoNumber(5) val port: UInt = UInt.MIN_VALUE,
@ProtoNumber(6) val httpsHost: String = "",
@ProtoNumber(7) val httpsPort: UInt = UInt.MIN_VALUE,
)

View File

@ -0,0 +1,11 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunGetFavContentReq(
@ProtoNumber(1) var cidList: List<String> = emptyList(),
)

View File

@ -0,0 +1,50 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunGetFavContentResp(
@ProtoNumber(1) val content: List<WeiyunContent>? = null
)
@Serializable
data class WeiyunContent(
@ProtoNumber(1) val text: WeiyunTextContent? = null,
@ProtoNumber(2) val link: WeiyunLinkContent? = null,
@ProtoNumber(3) val galley: WeiyunGalleyContent? = null,
@ProtoNumber(4) val audio: WeiyunAudioContent? = null,
@ProtoNumber(5) val video: WeiyunVideoContent? = null,
@ProtoNumber(6) val file: WeiyunFileContent? = null,
@ProtoNumber(7) val location: WeiyunLocationContent? = null,
@ProtoNumber(8) val richMedia: WeiyunRichMediaContent? = null,
)
@Serializable
data class WeiyunTextContent(
@ProtoNumber(1) val data: String,
@ProtoNumber(2) val hasEmoji: Boolean = false
)
@Serializable
class WeiyunLinkContent
@Serializable
class WeiyunGalleyContent
@Serializable
data class WeiyunAudioContent(
@ProtoNumber(1) val data: ByteArray,
)
@Serializable
class WeiyunVideoContent
@Serializable
class WeiyunFileContent
@Serializable
class WeiyunLocationContent

View File

@ -0,0 +1,19 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunGetFavListReq(
@ProtoNumber(1) val type: UInt = UInt.MIN_VALUE,
@ProtoNumber(2) val bid: UInt = UInt.MIN_VALUE,
@ProtoNumber(3) val category: UInt = UInt.MIN_VALUE,
@ProtoNumber(4) val startTime: ULong = ULong.MIN_VALUE,
@ProtoNumber(5) val orderType: UInt = UInt.MIN_VALUE,
@ProtoNumber(6) val startPos: UInt = UInt.MIN_VALUE,
@ProtoNumber(7) val pageSize: UInt = UInt.MIN_VALUE,
@ProtoNumber(8) val syncPolicy: UInt = UInt.MIN_VALUE,
@ProtoNumber(9) val reqSource: UInt = UInt.MIN_VALUE,
)

View File

@ -0,0 +1,41 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunGetFavListResp(
@ProtoNumber(1) val collections: List<WeiyunCollection>? = null,
@ProtoNumber(2) val totalCnt: UInt = UInt.MIN_VALUE,
@ProtoNumber(3) val result: UInt = UInt.MIN_VALUE,
)
@Serializable
data class WeiyunCollection(
@ProtoNumber(1) val cid: String = "",
@ProtoNumber(2) val type: Int = Int.MIN_VALUE,
@ProtoNumber(3) val status: Int = Int.MIN_VALUE,
@ProtoNumber(4) val author: WeiyunAuthor? = null,
@ProtoNumber(5) val bid: UInt = UInt.MIN_VALUE,
@ProtoNumber(6) val srcAppId: UInt = UInt.MIN_VALUE,
@ProtoNumber(7) val srcAppVer: String = "",
@ProtoNumber(8) val category: UInt = UInt.MIN_VALUE,
@ProtoNumber(9) val createTime: ULong = ULong.MIN_VALUE,
@ProtoNumber(10) val collectTime: ULong = ULong.MIN_VALUE,
@ProtoNumber(11) val modifyTime: ULong = ULong.MIN_VALUE,
@ProtoNumber(12) val seq: ULong = ULong.MIN_VALUE,
@ProtoNumber(13) val bizKey: String = "",
@ProtoNumber(14) val bizDataList: List<ByteArray>? = null,
@ProtoNumber(15) val summary: String = "",
@ProtoNumber(16) val starMark: Boolean = false,
@ProtoNumber(17) val starTime: ULong = ULong.MIN_VALUE,
@ProtoNumber(18) val shareUrl: String = "",
@ProtoNumber(19) val originalAppId: UInt = UInt.MIN_VALUE,
@ProtoNumber(20) val customGroupId: UInt = UInt.MIN_VALUE,
@ProtoNumber(21) val securityBeat: UInt = UInt.MIN_VALUE,
@ProtoNumber(22) val qzoneUgcKey: String = "",
)

View File

@ -0,0 +1,30 @@
@file:OptIn(ExperimentalSerializationApi::class)
@file:Suppress("ArrayInDataClass")
package moe.whitechi73.protobuf.fav
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class WeiyunMsgHead(
@ProtoNumber(1) val uin: ULong = ULong.MIN_VALUE,
@ProtoNumber(2) val seq: UInt = UInt.MIN_VALUE,
@ProtoNumber(3) val type: UInt = UInt.MIN_VALUE,
@ProtoNumber(4) val cmd: UInt = UInt.MIN_VALUE,
@ProtoNumber(5) val appId: UInt = UInt.MIN_VALUE,
@ProtoNumber(6) val version: UInt = UInt.MIN_VALUE,
@ProtoNumber(7) val netType: UInt = UInt.MIN_VALUE,
@ProtoNumber(8) val clientIp: String? = null,
@ProtoNumber(9) val encrypt: UInt = UInt.MIN_VALUE,
@ProtoNumber(10) val keyType: UInt = UInt.MIN_VALUE,
@ProtoNumber(11) val key: ByteArray? = null,
@ProtoNumber(14) val majorVersion: UInt = UInt.MIN_VALUE,
@ProtoNumber(15) val minorVersion: UInt = UInt.MIN_VALUE,
@ProtoNumber(101) val retCode: UInt = UInt.MIN_VALUE,
@ProtoNumber(102) val retMsg: String? = null,
@ProtoNumber(103) val promptMsg: String? = null,
@ProtoNumber(111) val totalSpace: ULong = ULong.MIN_VALUE,
@ProtoNumber(112) val usedSpace: ULong = ULong.MIN_VALUE,
)

View File

@ -0,0 +1,20 @@
package moe.whitechi73.protobuf.group_file_common
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class FolderInfo(
@SerialName("folder_id") @ProtoNumber(1) val folderId: String = "",
@SerialName("parent_folder_id") @ProtoNumber(2) val parentFolderId: String = "",
@SerialName("folder_name") @ProtoNumber(3) val folderName: String = "",
@SerialName("create_time") @ProtoNumber(4) val createTime: UInt = UInt.MIN_VALUE,
@SerialName("modify_time") @ProtoNumber(5) val modifyTime: UInt = UInt.MIN_VALUE,
@SerialName("creator_uin") @ProtoNumber(6) val createUin: ULong = ULong.MIN_VALUE,
@SerialName("creator_name") @ProtoNumber(7) val creatorName: String? = null,
@SerialName("total_file_cnt") @ProtoNumber(8) val totalFileCnt: UInt = UInt.MIN_VALUE,
@SerialName("modifier_uin") @ProtoNumber(9) val modifyUin: ULong? = null,
@SerialName("modifier_name") @ProtoNumber(10) val modifierName: String? = null,
@SerialName("used_space") @ProtoNumber(11) val usedSpace: ULong = ULong.MIN_VALUE,
)

View File

@ -0,0 +1,57 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.message
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class MessageBody(
@ProtoNumber(1) val msgHead: MessageHead? = null,
@ProtoNumber(2) val contentHead: MessageContentHead? = null,
@ProtoNumber(3) val richMsg: RichMessage? = null,
)
@Serializable
data class RichMessage(
@ProtoNumber(1) val elements: MessageElementList? = null,
@ProtoNumber(2) val rawBuffer: ByteArray? = null,
)
@Serializable
data class MessageElementList(
@ProtoNumber(2) val elements: List<MessageElement>? = null
)
@Serializable
data class MessageElement(
@ProtoNumber(51) val json: JsonElement? = null,
)
@Serializable
data class JsonElement(
@ProtoNumber(1) val data: ByteArray? = null,
)
@Serializable
data class MessageHead(
@ProtoNumber(1) val peer: Long = Long.MIN_VALUE,
@ProtoNumber(2) val peerUid: String? = null,
@ProtoNumber(3) val flag: Int = Int.MIN_VALUE,
@ProtoNumber(5) val receiver: Long? = null,
@ProtoNumber(6) val receiverUid: String? = null,
)
@Serializable
data class MessageContentHead(
@ProtoNumber(1) val msgType: Int = Int.MIN_VALUE,
@ProtoNumber(2) val msgSubType: Int = Int.MIN_VALUE,
@ProtoNumber(4) val u1: Long = Long.MIN_VALUE,
@ProtoNumber(5) val msgSeq: Long = Long.MIN_VALUE,
@ProtoNumber(6) val msgTime: Long? = null,
@ProtoNumber(7) val u2: Int? = null,
@ProtoNumber(11) val u3: Long? = null,
@ProtoNumber(12) val msgRandom: Long = Long.MIN_VALUE,
@ProtoNumber(14) val u4: Long? = null,
@ProtoNumber(28) val u5: Long? = null,
)

View File

@ -0,0 +1,14 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.oidb
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class TrpcOidb(
@ProtoNumber(1) val cmd: Int = Int.MIN_VALUE,
@ProtoNumber(2) val service: Int = Int.MIN_VALUE,
@ProtoNumber(4) val buffer: ByteArray,
@ProtoNumber(12) val flag: Int = Int.MIN_VALUE,
)

View File

@ -0,0 +1,87 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.whitechi73.protobuf.oidb.cmd0x6d7
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
import moe.whitechi73.protobuf.group_file_common.FolderInfo
@Serializable
data class Oidb0x6d7ReqBody(
@ProtoNumber(1) val createFolder: CreateFolderReq? = null,
@ProtoNumber(2) val deleteFolder: DeleteFolderReq? = null,
@ProtoNumber(3) val moveFolder: MoveFolderReq? = null,
@ProtoNumber(4) val renameFolder: RenameFolderReq? = null,
)
@Serializable
data class CreateFolderReq(
@ProtoNumber(1) val groupCode: ULong = ULong.MIN_VALUE,
@ProtoNumber(2) val appId: UInt = UInt.MIN_VALUE,
@ProtoNumber(3) val parentFolderId: String = "",
@ProtoNumber(4) val folderName: String = "",
)
@Serializable
data class DeleteFolderReq(
@ProtoNumber(1) val groupCode: ULong = ULong.MIN_VALUE,
@ProtoNumber(2) val appId: UInt = UInt.MIN_VALUE,
@ProtoNumber(3) val folderId: String = "",
)
@Serializable
data class MoveFolderReq(
@ProtoNumber(1) val groupCode: ULong = ULong.MIN_VALUE,
@ProtoNumber(2) val appId: UInt = UInt.MIN_VALUE,
@ProtoNumber(3) val folderId: String = "",
@ProtoNumber(4) val parentFolderId: String = "",
@ProtoNumber(5) val destFolderId: String = "",
)
@Serializable
data class RenameFolderReq(
@ProtoNumber(1) val groupCode: ULong = ULong.MIN_VALUE,
@ProtoNumber(2) val appId: UInt = UInt.MIN_VALUE,
@ProtoNumber(3) val folderId: String = "",
@ProtoNumber(4) val folderName: String = "",
)
@Serializable
data class Oidb0x6d7RespBody(
@ProtoNumber(1) val createFolder: CreateFolderResp? = null,
@ProtoNumber(2) val deleteFolder: DeleteFolderResp? = null,
@ProtoNumber(3) val moveFolder: MoveFolderResp? = null,
@ProtoNumber(4) val renameFolder: RenameFolderResp? = null,
)
@Serializable
data class CreateFolderResp(
@ProtoNumber(1) val retCode: Int = Int.MIN_VALUE,
@ProtoNumber(2) val retMsg: String = "",
@ProtoNumber(3) val clientWording: String = "",
@ProtoNumber(4) val folderInfo: FolderInfo? = null,
)
@Serializable
data class DeleteFolderResp(
@ProtoNumber(1) val retCode: Int = Int.MIN_VALUE,
@ProtoNumber(2) val retMsg: String = "",
@ProtoNumber(3) val clientWording: String = "",
)
@Serializable
data class MoveFolderResp(
@ProtoNumber(1) val retCode: Int = Int.MIN_VALUE,
@ProtoNumber(2) val retMsg: String = "",
@ProtoNumber(3) val clientWording: String = "",
@ProtoNumber(4) val folderInfo: FolderInfo? = null,
)
@Serializable
data class RenameFolderResp(
@ProtoNumber(1) val retCode: Int = Int.MIN_VALUE,
@ProtoNumber(2) val retMsg: String = "",
@ProtoNumber(3) val clientWording: String = "",
@ProtoNumber(4) val folderInfo: FolderInfo? = null,
)

View File

@ -0,0 +1,16 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class C2CCommonTipsEvent(
@ProtoNumber(7) val params: List<PokeParam>? = null,
@ProtoNumber(8) val xmlTips: String? = null,
)
@Serializable
data class PokeParam(
@ProtoNumber(1) val key: String = "",
@ProtoNumber(2) val value: String = "",
)

View File

@ -0,0 +1,21 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class C2CRecallEvent(
@ProtoNumber(1) val head: C2CRecallHead? = null,
)
@Serializable
data class C2CRecallHead(
@ProtoNumber(1) val operator: String? = null,
@ProtoNumber(13) val wording: RecallWording? = null,
@ProtoNumber(20) val msgSeq: Long = Long.MIN_VALUE,
)
@Serializable
data class RecallWording(
@ProtoNumber(2) val wording: String? = null
)

View File

@ -0,0 +1,6 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
// by GroupCommonTipsEvent

View File

@ -0,0 +1,19 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class FriendApplyEvent(
@ProtoNumber(1) val head: FriendApplyHead? = null,
)
@Serializable
data class FriendApplyHead(
@ProtoNumber(2) val applierUid: String = "",
@ProtoNumber(7) val srcId: Int = Int.MIN_VALUE,
@ProtoNumber(8) val subSrc: Int = Int.MIN_VALUE,
@ProtoNumber(10) val applyMsg: String? = null,
@ProtoNumber(11) val source: String? = null,
)

View File

@ -0,0 +1,11 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class GroupAdminChangeEvent(
@ProtoNumber(1) val groupCode: Long,
@ProtoNumber(4) val operation: GroupAdminChangedOperation? = null
)

View File

@ -0,0 +1,16 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class GroupAdminChangedOperation(
@ProtoNumber(1) val unsetInfo: GroupAdminSetInfo? = null,
@ProtoNumber(2) val setInfo: GroupAdminSetInfo? = null,
)
@Serializable
data class GroupAdminSetInfo(
@ProtoNumber(1) val targetUid: String? = null,
@ProtoNumber(2) val operation: Int? = null,
)

View File

@ -0,0 +1,11 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class GroupApplyEvent(
@ProtoNumber(1) val groupCode: Long = Long.MIN_VALUE,
@ProtoNumber(3) val applierUid: String = "",
@ProtoNumber(5) val applyMsg: String? = null,
)

View File

@ -0,0 +1,22 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class GroupBanEvent(
@ProtoNumber(1) val groupCode: ULong = ULong.MIN_VALUE,
@ProtoNumber(4) val operatorUid: String = "",
@ProtoNumber(5) val target: GroupBanTarget? = null,
)
@Serializable
data class GroupBanTarget(
@ProtoNumber(3) val target: GroupBanInfo? = null,
)
@Serializable
data class GroupBanInfo(
@ProtoNumber(1) val targetUid: String? = null,
@ProtoNumber(2) val rawDuration: UInt = UInt.MIN_VALUE,
)

View File

@ -0,0 +1,27 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class GroupCommonTipsEvent(
@ProtoNumber(4) val groupCode: ULong = ULong.MIN_VALUE,
@ProtoNumber(5) val uniqueTitleChangeDetail: List<GroupUniqueTitleChangeDetail>? = null,
@ProtoNumber(11) val recallDetails: GroupRecallDetails? = null,
@ProtoNumber(26) val baseTips: List<GroupBaseTips>? = null,
@ProtoNumber(33) val essenceMsgInfo: List<EssenceMsgInfo>? = null,
@ProtoNumber(37) val msgSeq: ULong = ULong.MIN_VALUE,
)
@Serializable
data class EssenceMsgInfo(
@ProtoNumber(4) val type: UInt = UInt.MIN_VALUE,
@ProtoNumber(5) val sender: ULong = ULong.MIN_VALUE,
@ProtoNumber(6) val operator: ULong = ULong.MIN_VALUE,
)
@Serializable
data class GroupBaseTips(
@ProtoNumber(2) val type: UInt = UInt.MIN_VALUE,
@ProtoNumber(7) val params: List<PokeParam>? = null
)

View File

@ -0,0 +1,10 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class GroupInviteEvent(
@ProtoNumber(1) val groupCode: Long,
@ProtoNumber(5) val inviterUid: String,
)

View File

@ -0,0 +1,16 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class GroupInvitedApplyEvent(
@ProtoNumber(2) val applyInfo: GroupInvitedApplyInfo? = null,
)
@Serializable
data class GroupInvitedApplyInfo(
@ProtoNumber(1) val type: Int = Int.MIN_VALUE,
@ProtoNumber(3) val groupCode: Long = Long.MIN_VALUE,
@ProtoNumber(5) val applierUid: String = "",
)

View File

@ -0,0 +1,12 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class GroupListChangeEvent(
@ProtoNumber(1) val groupCode: Long = Long.MIN_VALUE,
@ProtoNumber(3) val memberUid: String = "",
@ProtoNumber(4) val type: Int = Int.MIN_VALUE,
@ProtoNumber(5) val operatorUid: String = "",
)

View File

@ -0,0 +1,18 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class GroupRecallDetails(
@ProtoNumber(1) val operatorUid: String = "",
@ProtoNumber(3) val msgInfo: RecalledMessageInfo? = null,
@ProtoNumber(9) val wording: RecallWording? = null
)
@Serializable
data class RecalledMessageInfo(
@ProtoNumber(1) val msgSeq: ULong,
@ProtoNumber(2) val msgTime: ULong,
@ProtoNumber(6) val senderUid: String,
)

View File

@ -0,0 +1,10 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
@Serializable
data class GroupUniqueTitleChangeDetail(
@ProtoNumber(2) val wording: String = "",
@ProtoNumber(5) val targetUin: ULong = ULong.MIN_VALUE,
)

View File

@ -0,0 +1,26 @@
package moe.whitechi73.protobuf.push
import kotlinx.serialization.Serializable
import kotlinx.serialization.protobuf.ProtoNumber
import moe.whitechi73.protobuf.message.MessageBody
@Serializable
data class MessagePush(
@ProtoNumber(1) val msgBody: MessageBody? = null,
@ProtoNumber(4) val clientInfo: MessagePushClientInfo? = null,
)
@Serializable
data class MessagePushClientInfo(
@ProtoNumber(1) val clientIp: String? = null,
@ProtoNumber(3) val liteHead: MessagePushLiteHead? = null
)
@Serializable
data class MessagePushLiteHead(
@ProtoNumber(2) val msgType: Int = Int.MIN_VALUE,
@ProtoNumber(3) val msgSeq: ULong = ULong.MIN_VALUE,
@ProtoNumber(4) val msgRandom: ULong = ULong.MIN_VALUE,
@ProtoNumber(6) val msgSubType: Int = Int.MIN_VALUE,
@ProtoNumber(8) val sender: ULong = ULong.MIN_VALUE,
)

View File

@ -32,7 +32,7 @@ android {
}
dependencies {
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.9.0")
DEPENDENCY_ANDROIDX.forEach {
implementation(it)
}
}

View File

@ -1,6 +1,8 @@
package com.tencent.mobileqq.pb;
public class PBStringField extends PBPrimitiveField<String>{
public static PBStringField __repeatHelper__;
public PBStringField(String str, boolean z) {
}

View File

@ -0,0 +1,32 @@
package com.tencent.mobileqq.pskey.oidb.cmd0x102a;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBInt64Field;
import com.tencent.mobileqq.pb.PBRepeatField;
import com.tencent.mobileqq.pb.PBRepeatMessageField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
public class oidb_cmd0x102a {
public static class GetPSkeyRequest extends MessageMicro<GetPSkeyRequest> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{10, 16}, new String[]{"domains", "flag"}, new Object[]{"", 0}, GetPSkeyRequest.class);
public final PBRepeatField<String> domains = PBField.initRepeat(PBStringField.__repeatHelper__);
public final PBUInt32Field flag = PBField.initUInt32(0);
}
public static class GetPSkeyResponse extends MessageMicro<GetPSkeyResponse> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{10}, new String[]{"private_keys"}, new Object[]{null}, GetPSkeyResponse.class);
public final PBRepeatMessageField<PSKey> private_keys = PBField.initRepeatMessage(PSKey.class);
}
public static class PSKey extends MessageMicro<PSKey> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{10, 18, 24, 34, 40}, new String[]{"domain", "key", "key_expire", "uskey", "uskey_expire"}, new Object[]{"", "", 0L, "", 0L}, PSKey.class);
public final PBStringField domain = PBField.initString("");
public final PBStringField key = PBField.initString("");
public final PBInt64Field key_expire = PBField.initInt64(0);
public final PBStringField uskey = PBField.initString("");
public final PBInt64Field uskey_expire = PBField.initInt64(0);
}
}

View File

@ -154,7 +154,7 @@ public interface IAddFriendTempApi extends QRouteApi {
// void sendDelSingleSystemMsg(structmsg.StructMsg paramStructMsg, String paramString, int paramInt, long paramLong, AppInterface paramAppInterface);
void sendFriendSystemMsgAction(int msg_type, long msg_seq, long req_uin, int sub_type, int src_id, int sub_src_id, int group_msg_type, structmsg$SystemMsgActionInfo action_info, int system_msg_action_type, structmsg$StructMsg paramStructMsg, boolean isUncommonlyUsedFrd, AppInterface paramAppInterface);
void sendFriendSystemMsgAction(int msg_type, long msg_seq, long req_uin, int sub_type, int src_id, int sub_src_id, int group_msg_type, structmsg.SystemMsgActionInfo action_info, int system_msg_action_type, structmsg.StructMsg paramStructMsg, boolean isUncommonlyUsedFrd, AppInterface paramAppInterface);
void sendFriendSystemMsgReadedReport(AppInterface paramAppInterface);

View File

@ -0,0 +1,298 @@
package tencent.im.cs.cmd0x346;
import com.tencent.mobileqq.pb.ByteStringMicro;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBBytesField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBInt32Field;
import com.tencent.mobileqq.pb.PBRepeatField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public class cmd0x346 {
public static class ReqBody extends MessageMicro<ReqBody> {
//static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 26, 34, 42, 50, 58, 66, 74, 82, 90, 98, 106, 114, 122, 130, 138, 146, 154, 162, 170,
// SharedExtProcessor.CONFIG_ID, 816, 1600, 720002, 720010, 720018, 799994}, new String[]{
// "uint32_cmd",
// "uint32_seq",
// "msg_recv_list_query_req",
// "msg_send_list_query_req",
// "msg_renew_file_req",
// "msg_recall_file_req",
// "msg_apply_upload_req",
// "msg_apply_upload_hit_req",
// "msg_apply_forward_file_req",
// "msg_upload_succ_req",
// "msg_delete_file_req",
// "msg_download_succ_req",
// "msg_apply_download_abs_req",
// "msg_apply_download_req", // 14
// "msg_apply_list_download_req", "msg_file_query_req", "msg_apply_copy_from_req", "msg_apply_upload_req_v2", "msg_apply_upload_req_v3", "msg_apply_upload_hit_req_v2", "msg_apply_upload_hit_req_v3",
// "uint32_business_id", // 808
// "uint32_client_type", // 816
// "uint32_flag_support_mediaplatform",
// "msg_apply_copy_to_req", "msg_apply_clean_traffic_req", "msg_apply_get_traffic_req",
// "msg_extension_req"}, new Object[]{0, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, 0, 0, null, null, null, null}, ReqBody.class);
public final PBUInt32Field uint32_cmd = PBField.initUInt32(0);
public final PBUInt32Field uint32_seq = PBField.initUInt32(0);
//public RecvListQueryReq msg_recv_list_query_req = new RecvListQueryReq();
//public SendListQueryReq msg_send_list_query_req = new SendListQueryReq();
//public RenewFileReq msg_renew_file_req = new MessageMicro<RenewFileReq>() { // from class: tencent.im.cs.cmd0x346.RenewFileReq
// static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 18, 24}, new String[]{"uint64_uin", "bytes_uuid", "uint32_add_ttl"}, new Object[]{0L, ByteStringMicro.EMPTY, 0}, RenewFileReq.class);
// public final PBUInt64Field uint64_uin = PBField.initUInt64(0);
// public final PBBytesField bytes_uuid = PBField.initBytes(ByteStringMicro.EMPTY);
// public final PBUInt32Field uint32_add_ttl = PBField.initUInt32(0);
//};
//public RecallFileReq msg_recall_file_req = new RecallFileReq();
//public ApplyUploadReq msg_apply_upload_req = new ApplyUploadReq();
//public ApplyUploadHitReq msg_apply_upload_hit_req = new MessageMicro<ApplyUploadHitReq>() { // from class: tencent.im.cs.cmd0x346.ApplyUploadHitReq
// static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{80, 160, 240, 322, 402, 482, PlayerResources.ViewId.GET_MORE_TOGGLE_AREA, 640}, new String[]{"uint64_sender_uin", "uint64_recver_uin", "uint64_file_size", "str_file_name", "bytes_10m_md5", "str_local_filepath", "uint32_danger_level", "uint64_total_space"}, new Object[]{0L, 0L, 0L, "", ByteStringMicro.EMPTY, "", 0, 0L}, ApplyUploadHitReq.class);
// public final PBUInt64Field uint64_sender_uin = PBField.initUInt64(0);
// public final PBUInt64Field uint64_recver_uin = PBField.initUInt64(0);
// public final PBUInt64Field uint64_file_size = PBField.initUInt64(0);
// public final PBStringField str_file_name = PBField.initString("");
// public final PBBytesField bytes_10m_md5 = PBField.initBytes(ByteStringMicro.EMPTY);
// public final PBStringField str_local_filepath = PBField.initString("");
// public final PBUInt32Field uint32_danger_level = PBField.initUInt32(0);
// public final PBUInt64Field uint64_total_space = PBField.initUInt64(0);
//};
//public ApplyForwardFileReq msg_apply_forward_file_req = new ApplyForwardFileReq();
//public UploadSuccReq msg_upload_succ_req = new UploadSuccReq();
//public DeleteFileReq msg_delete_file_req = new DeleteFileReq();
//public DownloadSuccReq msg_download_succ_req = new DownloadSuccReq();
//public ApplyDownloadAbsReq msg_apply_download_abs_req = new ApplyDownloadAbsReq();
public ApplyDownloadReq msg_apply_download_req = new ApplyDownloadReq();
//public ApplyListDownloadReq msg_apply_list_download_req = new MessageMicro<ApplyListDownloadReq>() { // from class: tencent.im.cs.cmd0x346.ApplyListDownloadReq
// static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{80, 160, 240}, new String[]{"uint64_uin", "uint32_begin_index", "uint32_req_count"}, new Object[]{0L, 0, 0}, ApplyListDownloadReq.class);
// public final PBUInt64Field uint64_uin = PBField.initUInt64(0);
// public final PBUInt32Field uint32_begin_index = PBField.initUInt32(0);
// public final PBUInt32Field uint32_req_count = PBField.initUInt32(0);
//};
//public FileQueryReq msg_file_query_req = new FileQueryReq();
//public ApplyCopyFromReq msg_apply_copy_from_req = new MessageMicro<ApplyCopyFromReq>() { // from class: tencent.im.cs.cmd0x346.ApplyCopyFromReq
// static final MessageMicro.FieldMap __fieldMap__;
// public final PBBytesField bytes_file_md5;
// public final PBBytesField bytes_src_parentfolder;
// public final PBBytesField bytes_src_uuid;
// public final PBStringField str_file_name;
// public final PBUInt32Field uint32_danger_level;
// public final PBUInt64Field uint64_dst_uin;
// public final PBUInt64Field uint64_file_size;
// public final PBUInt64Field uint64_total_space;
// public final PBUInt64Field uint64_src_uin = PBField.initUInt64(0);
// public final PBUInt64Field uint64_src_group = PBField.initUInt64(0);
// public final PBUInt32Field uint32_src_svcid = PBField.initUInt32(0);
// static {
// ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
// __fieldMap__ = MessageMicro.initFieldMap(new int[]{80, 160, 240, 322, 402, 482, PlayerResources.ViewId.GET_MORE_TOGGLE_AREA, 640, QVipServiceAccountFolderProcessor.CMD, 800, x.CTRL_INDEX}, new String[]{"uint64_src_uin", "uint64_src_group", "uint32_src_svcid", "bytes_src_parentfolder", "bytes_src_uuid", "bytes_file_md5", "uint64_dst_uin", "uint64_file_size", "str_file_name", "uint32_danger_level", "uint64_total_space"}, new Object[]{0L, 0L, 0, byteStringMicro, byteStringMicro, byteStringMicro, 0L, 0L, "", 0, 0L}, ApplyCopyFromReq.class);
// }
// {
// ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
// this.bytes_src_parentfolder = PBField.initBytes(byteStringMicro);
// this.bytes_src_uuid = PBField.initBytes(byteStringMicro);
// this.bytes_file_md5 = PBField.initBytes(byteStringMicro);
// this.uint64_dst_uin = PBField.initUInt64(0L);
// this.uint64_file_size = PBField.initUInt64(0L);
// this.str_file_name = PBField.initString("");
// this.uint32_danger_level = PBField.initUInt32(0);
// this.uint64_total_space = PBField.initUInt64(0L);
// / }
//};
//public ApplyUploadReqV2 msg_apply_upload_req_v2 = new ApplyUploadReqV2();
//public ApplyUploadReqV3 msg_apply_upload_req_v3 = new ApplyUploadReqV3();
//public ApplyUploadHitReqV2 msg_apply_upload_hit_req_v2 = new ApplyUploadHitReqV2();
//public ApplyUploadHitReqV3 msg_apply_upload_hit_req_v3 = new MessageMicro<ApplyUploadHitReqV3>() { // from class: tencent.im.cs.cmd0x346.ApplyUploadHitReqV3
// static final MessageMicro.FieldMap __fieldMap__;
// public final PBBytesField bytes_10m_md5;
// public final PBBytesField bytes_sha;
// public final PBStringField str_local_filepath;
// public final PBUInt32Field uint32_danger_level;
// public final PBUInt64Field uint64_total_space;
// public final PBUInt64Field uint64_sender_uin = PBField.initUInt64(0);
// public final PBUInt64Field uint64_recver_uin = PBField.initUInt64(0);
// public final PBUInt64Field uint64_file_size = PBField.initUInt64(0);
// public final PBStringField str_file_name = PBField.initString("");
// static {
// ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
// __fieldMap__ = MessageMicro.initFieldMap(new int[]{80, 160, 240, 322, 402, 482, 562, 640, 720}, new String[]{"uint64_sender_uin", "uint64_recver_uin", "uint64_file_size", "str_file_name", "bytes_10m_md5", "bytes_sha", "str_local_filepath", "uint32_danger_level", "uint64_total_space"}, new Object[]{0L, 0L, 0L, "", byteStringMicro, byteStringMicro, "", 0, 0L}, ApplyUploadHitReqV3.class);
// }
// {
// ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
// this.bytes_10m_md5 = PBField.initBytes(byteStringMicro);
// this.bytes_sha = PBField.initBytes(byteStringMicro);
// this.str_local_filepath = PBField.initString("");
// this.uint32_danger_level = PBField.initUInt32(0);
// this.uint64_total_space = PBField.initUInt64(0L);
// }
//};
//public ApplyCopyToReq msg_apply_copy_to_req = new ApplyCopyToReq();
//public ApplyCleanTrafficReq msg_apply_clean_traffic_req = new MessageMicro<ApplyCleanTrafficReq>() { // from class: tencent.im.cs.cmd0x346.ApplyCleanTrafficReq
// static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[0], new String[0], new Object[0], ApplyCleanTrafficReq.class);
//};
//public ApplyGetTrafficReq msg_apply_get_traffic_req = new MessageMicro<ApplyGetTrafficReq>() { // from class: tencent.im.cs.cmd0x346.ApplyGetTrafficReq
// static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[0], new String[0], new Object[0], ApplyGetTrafficReq.class);
//};
public final PBUInt32Field uint32_business_id = PBField.initUInt32(0);
public final PBUInt32Field uint32_client_type = PBField.initUInt32(0);
public final PBUInt32Field uint32_flag_support_mediaplatform = PBField.initUInt32(0);
public ExtensionReq msg_extension_req = new ExtensionReq();
}
public static class ExtensionReq extends MessageMicro<ExtensionReq> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 26, 32, 162, 800, 720802, 721600, 722400, 723200, 724000, 724800, 725600, 726400, 727200, 728000, 728800}, new String[]{
"uint64_id", "uint64_type", "str_dst_phonenum", "int32_phone_convert_type", "bytes_sig", "uint64_route_id", "msg_del_message_req",
"uint32_download_url_type",
"uint32_ptt_format", "uint32_is_need_inner_ip", "uint32_net_type", "uint32_voice_type", "uint32_file_type", "uint32_ptt_time", "uint32_bdh_cmdid", "uint32_req_transfer_type", "uint32_is_auto"}, new Object[]{0L, 0L, "", 0, ByteStringMicro.EMPTY, 0L, null, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0},ExtensionReq.class);
public final PBUInt64Field uint64_id = PBField.initUInt64(0);
public final PBUInt64Field uint64_type = PBField.initUInt64(0);
public final PBStringField str_dst_phonenum = PBField.initString("");
public final PBInt32Field int32_phone_convert_type = PBField.initInt32(0);
public final PBBytesField bytes_sig = PBField.initBytes(ByteStringMicro.EMPTY);
public final PBUInt64Field uint64_route_id = PBField.initUInt64(0);
/*public cmd0x346$DelMessageReq msg_del_message_req = new MessageMicro<cmd0x346$DelMessageReq>() { // from class: tencent.im.cs.cmd0x346.cmd0x346$DelMessageReq
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 80, 160, 240}, new String[]{"uint64_uin_sender", "uint64_uin_receiver", "uint32_msg_time", "uint32_msg_random", "uint32_msg_seq_no"}, new Object[]{0L, 0L, 0, 0, 0}, cmd0x346$DelMessageReq.class);
public final PBUInt64Field uint64_uin_sender = PBField.initUInt64(0);
public final PBUInt64Field uint64_uin_receiver = PBField.initUInt64(0);
public final PBUInt32Field uint32_msg_time = PBField.initUInt32(0);
public final PBUInt32Field uint32_msg_random = PBField.initUInt32(0);
public final PBUInt32Field uint32_msg_seq_no = PBField.initUInt32(0);
};*/
public final PBUInt32Field uint32_download_url_type = PBField.initUInt32(0);
public final PBUInt32Field uint32_ptt_format = PBField.initUInt32(0);
public final PBUInt32Field uint32_is_need_inner_ip = PBField.initUInt32(0);
public final PBUInt32Field uint32_net_type = PBField.initUInt32(255);
public final PBUInt32Field uint32_voice_type = PBField.initUInt32(0);
public final PBUInt32Field uint32_file_type = PBField.initUInt32(0);
public final PBUInt32Field uint32_ptt_time = PBField.initUInt32(0);
public final PBUInt32Field uint32_bdh_cmdid = PBField.initUInt32(0);
public final PBUInt32Field uint32_req_transfer_type = PBField.initUInt32(0);
public final PBUInt32Field uint32_is_auto = PBField.initUInt32(0);
}
public static class ApplyDownloadReq extends MessageMicro<ApplyDownloadReq> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{80, 162, 240, 400, 482, 4000, 4008, 4802}, new String[]{
"uint64_uin", // 10
"bytes_uuid", // 20
"uint32_owner_type", // 30
"uint32_filetype", // 50
"str_fileidcrc", // 60
"uint32_ext_uintype", "uint32_need_https_url", "str_fileid"}, new Object[]{0L, ByteStringMicro.EMPTY, 0, 0, "", 0, 0, ""}, ApplyDownloadReq.class);
public final PBUInt64Field uint64_uin = PBField.initUInt64(0);
public final PBBytesField bytes_uuid = PBField.initBytes(ByteStringMicro.EMPTY);
public final PBUInt32Field uint32_owner_type = PBField.initUInt32(0);
public final PBUInt32Field uint32_filetype = PBField.initUInt32(0);
public final PBStringField str_fileidcrc = PBField.initString("");
public final PBUInt32Field uint32_ext_uintype = PBField.initUInt32(0);
public final PBUInt32Field uint32_need_https_url = PBField.initUInt32(0);
public final PBStringField str_fileid = PBField.initString("");
}
public static class RspBody extends MessageMicro<RspBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 26, 34, 42, 50, 58, 66, 74, 82, 90, 98, 106, 114, 122, 130, 138, 146, 154, 162, 170, 400, 720002, 720010, 720018, 799994}, new String[]{"uint32_cmd", "uint32_seq", "msg_recv_list_query_rsp", "msg_send_list_query_rsp", "msg_renew_file_rsp", "msg_recall_file_rsp", "msg_apply_upload_rsp", "msg_apply_upload_hit_rsp", "msg_apply_forward_file_rsp", "msg_upload_succ_rsp", "msg_delete_file_rsp", "msg_download_succ_rsp", "msg_apply_download_abs_rsp", "msg_apply_download_rsp", "msg_apply_list_download_rsp", "msg_file_query_rsp", "msg_apply_copy_from_rsp", "msg_apply_upload_rsp_v2", "msg_apply_upload_rsp_v3", "msg_apply_upload_hit_rsp_v2", "msg_apply_upload_hit_rsp_v3", "uint32_flag_use_media_platform", "msg_apply_copy_to_rsp", "msg_apply_clean_traffic_rsp", "msg_apply_get_traffic_rsp", "msg_extension_rsp"}, new Object[]{0, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, null, null, null, null}, RspBody.class);
public final PBUInt32Field uint32_cmd = PBField.initUInt32(0);
public final PBUInt32Field uint32_seq = PBField.initUInt32(0);
public ApplyDownloadRsp msg_apply_download_rsp = new ApplyDownloadRsp();
}
public static class ApplyDownloadRsp extends MessageMicro<ApplyDownloadRsp> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{80, 162, 242, 322, 402}, new String[]{"int32_ret_code", "str_ret_msg", "msg_download_info", "msg_file_info", "bytes_file_sha"}, new Object[]{0, "", null, null, ByteStringMicro.EMPTY}, ApplyDownloadRsp.class);
public final PBInt32Field int32_ret_code = PBField.initInt32(0);
public final PBStringField str_ret_msg = PBField.initString("");
public DownloadInfo msg_download_info = new DownloadInfo();
public FileInfo msg_file_info = new FileInfo();
public final PBBytesField bytes_file_sha = PBField.initBytes(ByteStringMicro.EMPTY);
}
public static class DownloadInfo extends MessageMicro<DownloadInfo> {
//static final MessageMicro.FieldMap __fieldMap__;
public final PBBytesField bytes_download_key;
public final PBBytesField bytes_media_platform_download_key;
public final PBRepeatField<String> rpt_str_downloadip_list;
public final PBStringField str_cookie;
public final PBStringField str_download_dns;
public final PBStringField str_download_domain;
public final PBStringField str_download_ip;
public final PBStringField str_download_url;
public final PBRepeatField<String> str_downloadipv6_list;
public final PBStringField str_https_download_domain;
public final PBUInt32Field uint32_https_port;
public final PBUInt32Field uint32_port;
static {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
//__fieldMap__ = MessageMicro.initFieldMap(new int[]{82, 162, 242, 320, 402, 482, 562, 640, QVipServiceAccountFolderProcessor.CMD, 882, 962, 1042}, new String[]
// {"bytes_download_key", "str_download_ip", "str_download_domain", "uint32_port", "str_download_url", "rpt_str_downloadip_list", "str_cookie", "uint32_https_port", "str_https_download_domain", "str_download_dns", "bytes_media_platform_download_key", "str_downloadipv6_list"}, new Object[]{byteStringMicro, "", "", 0, "", "", "", Integer.valueOf((int) WebSocketImpl.DEFAULT_WSS_PORT), "", "", byteStringMicro, ""}, cmd0x346$DownloadInfo.class);
}
public DownloadInfo() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.bytes_download_key = PBField.initBytes(byteStringMicro);
this.str_download_ip = PBField.initString("");
this.str_download_domain = PBField.initString("");
this.uint32_port = PBField.initUInt32(0);
this.str_download_url = PBField.initString("");
PBStringField pBStringField = PBStringField.__repeatHelper__;
this.rpt_str_downloadip_list = PBField.initRepeat(pBStringField);
this.str_cookie = PBField.initString("");
this.uint32_https_port = PBField.initUInt32(443);
this.str_https_download_domain = PBField.initString("");
this.str_download_dns = PBField.initString("");
this.bytes_media_platform_download_key = PBField.initBytes(byteStringMicro);
this.str_downloadipv6_list = PBField.initRepeat(pBStringField);
}
}
public static class FileInfo extends MessageMicro<FileInfo> {
//static final MessageMicro.FieldMap __fieldMap__;
public final PBBytesField bytes_10m_md5;
public final PBBytesField bytes_3sha;
public final PBBytesField bytes_md5;
public final PBBytesField bytes_sha;
public final PBBytesField bytes_uuid;
public final PBStringField str_file_name;
public final PBStringField str_fileidcrc;
public final PBUInt32Field uint32_abs_file_type;
public final PBUInt32Field uint32_client_type;
public final PBUInt32Field uint32_expire_time;
public final PBUInt64Field uint64_owner_uin;
public final PBUInt64Field uint64_peer_uin;
public final PBUInt64Field uint64_uin = PBField.initUInt64(0);
public final PBUInt32Field uint32_danger_evel = PBField.initUInt32(0);
public final PBUInt64Field uint64_file_size = PBField.initUInt64(0);
public final PBUInt32Field uint32_life_time = PBField.initUInt32(0);
public final PBUInt32Field uint32_upload_time = PBField.initUInt32(0);
static {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
//__fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 32, 40, 50, 58, 720, 802, 810, x.CTRL_INDEX, 960, 968, 1040, gdt_analysis_event.EVENT_GET_SUBSCRIBER_ID, 1130, h.CTRL_INDEX}, new String[]{"uint64_uin", "uint32_danger_evel", "uint64_file_size", "uint32_life_time", "uint32_upload_time", "bytes_uuid", "str_file_name", "uint32_abs_file_type", "bytes_10m_md5", "bytes_sha", "uint32_client_type", "uint64_owner_uin", "uint64_peer_uin", "uint32_expire_time", "str_fileidcrc", "bytes_md5", "bytes_3sha"}, new Object[]{0L, 0, 0L, 0, 0, byteStringMicro, "", 0, byteStringMicro, byteStringMicro, 0, 0L, 0L, 0, "", byteStringMicro, byteStringMicro}, cmd0x346$FileInfo.class);
}
public FileInfo() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.bytes_uuid = PBField.initBytes(byteStringMicro);
this.str_file_name = PBField.initString("");
this.uint32_abs_file_type = PBField.initUInt32(0);
this.bytes_10m_md5 = PBField.initBytes(byteStringMicro);
this.bytes_sha = PBField.initBytes(byteStringMicro);
this.uint32_client_type = PBField.initUInt32(0);
this.uint64_owner_uin = PBField.initUInt64(0L);
this.uint64_peer_uin = PBField.initUInt64(0L);
this.uint32_expire_time = PBField.initUInt32(0);
this.str_fileidcrc = PBField.initString("");
this.bytes_md5 = PBField.initBytes(byteStringMicro);
this.bytes_3sha = PBField.initBytes(byteStringMicro);
}
}
}

View File

@ -0,0 +1,230 @@
package tencent.im.oidb.cmd0x6d6;
import com.tencent.mobileqq.pb.ByteStringMicro;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBBoolField;
import com.tencent.mobileqq.pb.PBBytesField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBInt32Field;
import com.tencent.mobileqq.pb.PBRepeatField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class oidb_0x6d6 {
public static class ReqBody extends MessageMicro<ReqBody> {
public UploadFileReqBody upload_file_req = new UploadFileReqBody();
public ResendReqBody resend_file_req = new ResendReqBody();
public DownloadFileReqBody download_file_req = new DownloadFileReqBody();
public DeleteFileReqBody delete_file_req = new DeleteFileReqBody();
public RenameFileReqBody rename_file_req = new RenameFileReqBody();
public MoveFileReqBody move_file_req = new MoveFileReqBody();
}
public static class RspBody extends MessageMicro<RspBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{10, 18, 26, 34, 42, 50}, new String[]{"upload_file_rsp", "resend_file_rsp", "download_file_rsp", "delete_file_rsp", "rename_file_rsp", "move_file_rsp"}, new Object[]{null, null, null, null, null, null}, RspBody.class);
public UploadFileRspBody upload_file_rsp = new UploadFileRspBody();
public ResendRspBody resend_file_rsp = new ResendRspBody();
public DownloadFileRspBody download_file_rsp = new DownloadFileRspBody();
public DeleteFileRspBody delete_file_rsp = new DeleteFileRspBody();
public RenameFileRspBody rename_file_rsp = new RenameFileRspBody();
public MoveFileRspBody move_file_rsp = new MoveFileRspBody();
}
public static class ResendRspBody extends MessageMicro<ResendRspBody> {
static final MessageMicro.FieldMap __fieldMap__;
public final PBBytesField bytes_check_key;
public final PBBytesField bytes_file_key;
public final PBInt32Field int32_ret_code = PBField.initInt32(0);
public final PBStringField str_ret_msg = PBField.initString("");
public final PBStringField str_client_wording = PBField.initString("");
public final PBStringField str_upload_ip = PBField.initString("");
static {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 18, 26, 34, 42, 50}, new String[]{"int32_ret_code", "str_ret_msg", "str_client_wording", "str_upload_ip", "bytes_file_key", "bytes_check_key"}, new Object[]{0, "", "", "", byteStringMicro, byteStringMicro}, ResendRspBody.class);
}
public ResendRspBody() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.bytes_file_key = PBField.initBytes(byteStringMicro);
this.bytes_check_key = PBField.initBytes(byteStringMicro);
}
}
public static class DeleteFileRspBody extends MessageMicro<DeleteFileRspBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 18, 26}, new String[]{"int32_ret_code", "str_ret_msg", "str_client_wording"}, new Object[]{0, "", ""}, DeleteFileRspBody.class);
public final PBInt32Field int32_ret_code = PBField.initInt32(0);
public final PBStringField str_ret_msg = PBField.initString("");
public final PBStringField str_client_wording = PBField.initString("");
}
public static class MoveFileRspBody extends MessageMicro<MoveFileRspBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 18, 26, 34}, new String[]{"int32_ret_code", "str_ret_msg", "str_client_wording", "str_parent_folder_id"}, new Object[]{0, "", "", ""}, MoveFileRspBody.class);
public final PBInt32Field int32_ret_code = PBField.initInt32(0);
public final PBStringField str_ret_msg = PBField.initString("");
public final PBStringField str_client_wording = PBField.initString("");
public final PBStringField str_parent_folder_id = PBField.initString("");
}
public static class DownloadFileRspBody extends MessageMicro<DownloadFileRspBody> {
static final MessageMicro.FieldMap __fieldMap__;
public final PBBytesField bytes_cookie_val;
public final PBBytesField bytes_download_url;
public final PBBytesField bytes_md5;
public final PBBytesField bytes_sha;
public final PBBytesField bytes_sha3;
public final PBBytesField str_download_dns;
public final PBStringField str_download_dns_https;
public final PBStringField str_save_file_name;
public final PBUInt32Field uint32_preview_port;
public final PBUInt32Field uint32_preview_port_https;
public final PBInt32Field int32_ret_code = PBField.initInt32(0);
public final PBStringField str_ret_msg = PBField.initString("");
public final PBStringField str_client_wording = PBField.initString("");
public final PBStringField str_download_ip = PBField.initString("");
static {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 18, 26, 34, 42, 50, 58, 66, 74, 82, 90, 96, 106, 112}, new String[]{"int32_ret_code", "str_ret_msg", "str_client_wording", "str_download_ip", "str_download_dns", "bytes_download_url", "bytes_sha", "bytes_sha3", "bytes_md5", "bytes_cookie_val", "str_save_file_name", "uint32_preview_port", "str_download_dns_https", "uint32_preview_port_https"}, new Object[]{0, "", "", "", byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, "", 0, "", 0}, DownloadFileRspBody.class);
}
public DownloadFileRspBody() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.str_download_dns = PBField.initBytes(byteStringMicro);
this.bytes_download_url = PBField.initBytes(byteStringMicro);
this.bytes_sha = PBField.initBytes(byteStringMicro);
this.bytes_sha3 = PBField.initBytes(byteStringMicro);
this.bytes_md5 = PBField.initBytes(byteStringMicro);
this.bytes_cookie_val = PBField.initBytes(byteStringMicro);
this.str_save_file_name = PBField.initString("");
this.uint32_preview_port = PBField.initUInt32(0);
this.str_download_dns_https = PBField.initString("");
this.uint32_preview_port_https = PBField.initUInt32(0);
}
}
public static class UploadFileRspBody extends MessageMicro<UploadFileRspBody> {
static final MessageMicro.FieldMap __fieldMap__;
public final PBBoolField bool_file_exist;
public final PBBytesField bytes_check_key;
public final PBBytesField bytes_file_key;
public final PBRepeatField<String> str_upload_ip_lan_v4;
public final PBRepeatField<String> str_upload_ip_lan_v6;
public final PBUInt32Field uint32_upload_port;
public final PBInt32Field int32_ret_code = PBField.initInt32(0);
public final PBStringField str_ret_msg = PBField.initString("");
public final PBStringField str_client_wording = PBField.initString("");
public final PBStringField str_upload_ip = PBField.initString("");
public final PBStringField str_server_dns = PBField.initString("");
public final PBUInt32Field uint32_bus_id = PBField.initUInt32(0);
public final PBStringField str_file_id = PBField.initString("");
static {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 18, 26, 34, 42, 48, 58, 66, 74, 80, 98, 106, 112}, new String[]{"int32_ret_code", "str_ret_msg", "str_client_wording", "str_upload_ip", "str_server_dns", "uint32_bus_id", "str_file_id", "bytes_file_key", "bytes_check_key", "bool_file_exist", "str_upload_ip_lan_v4", "str_upload_ip_lan_v6", "uint32_upload_port"}, new Object[]{0, "", "", "", "", 0, "", byteStringMicro, byteStringMicro, Boolean.FALSE, "", "", 0}, UploadFileRspBody.class);
}
public UploadFileRspBody() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.bytes_file_key = PBField.initBytes(byteStringMicro);
this.bytes_check_key = PBField.initBytes(byteStringMicro);
this.bool_file_exist = PBField.initBool(false);
PBStringField pBStringField = PBStringField.__repeatHelper__;
this.str_upload_ip_lan_v4 = PBField.initRepeat(pBStringField);
this.str_upload_ip_lan_v6 = PBField.initRepeat(pBStringField);
this.uint32_upload_port = PBField.initUInt32(0);
}
}
public static class RenameFileRspBody extends MessageMicro<RenameFileRspBody> {
public final PBInt32Field int32_ret_code = PBField.initInt32(0);
public final PBStringField str_ret_msg = PBField.initString("");
public final PBStringField str_client_wording = PBField.initString("");
}
public static class ResendReqBody extends MessageMicro<ResendReqBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 34, 42}, new String[]{"uint64_group_code", "uint32_app_id", "uint32_bus_id", "str_file_id", "bytes_sha"}, new Object[]{0L, 0, 0, "", ByteStringMicro.EMPTY}, ResendReqBody.class);
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
public final PBUInt32Field uint32_app_id = PBField.initUInt32(0);
public final PBUInt32Field uint32_bus_id = PBField.initUInt32(0);
public final PBStringField str_file_id = PBField.initString("");
public final PBBytesField bytes_sha = PBField.initBytes(ByteStringMicro.EMPTY);
}
public static class DownloadFileReqBody extends MessageMicro<DownloadFileReqBody> {
static final MessageMicro.FieldMap __fieldMap__;
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
public final PBUInt32Field uint32_app_id = PBField.initUInt32(0);
public final PBUInt32Field uint32_bus_id = PBField.initUInt32(0);
public final PBStringField str_file_id = PBField.initString("");
public final PBBoolField bool_thumbnail_req = PBField.initBool(false);
public final PBUInt32Field uint32_url_type = PBField.initUInt32(0);
public final PBBoolField bool_preview_req = PBField.initBool(false);
public final PBUInt32Field uint32_src = PBField.initUInt32(0);
static {
Boolean bool = Boolean.FALSE;
__fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 34, 40, 48, 56, 64}, new String[]{"uint64_group_code", "uint32_app_id", "uint32_bus_id", "str_file_id", "bool_thumbnail_req", "uint32_url_type", "bool_preview_req", "uint32_src"}, new Object[]{0L, 0, 0, "", bool, 0, bool, 0}, DownloadFileReqBody.class);
}
}
public static class DeleteFileReqBody extends MessageMicro<DeleteFileReqBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 34, 42, 48, 56}, new String[]{"uint64_group_code", "uint32_app_id", "uint32_bus_id", "str_parent_folder_id", "str_file_id", "uint32_msgdb_seq", "uint32_msg_rand"}, new Object[]{0L, 0, 0, "", "", 0, 0}, DeleteFileReqBody.class);
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
public final PBUInt32Field uint32_app_id = PBField.initUInt32(0);
public final PBUInt32Field uint32_bus_id = PBField.initUInt32(0);
public final PBStringField str_parent_folder_id = PBField.initString("");
public final PBStringField str_file_id = PBField.initString("");
public final PBUInt32Field uint32_msgdb_seq = PBField.initUInt32(0);
public final PBUInt32Field uint32_msg_rand = PBField.initUInt32(0);
}
public static class MoveFileReqBody extends MessageMicro<MoveFileReqBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 34, 42, 50}, new String[]{"uint64_group_code", "uint32_app_id", "uint32_bus_id", "str_file_id", "str_parent_folder_id", "str_dest_folder_id"}, new Object[]{0L, 0, 0, "", "", ""}, MoveFileReqBody.class);
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
public final PBUInt32Field uint32_app_id = PBField.initUInt32(0);
public final PBUInt32Field uint32_bus_id = PBField.initUInt32(0);
public final PBStringField str_file_id = PBField.initString("");
public final PBStringField str_parent_folder_id = PBField.initString("");
public final PBStringField str_dest_folder_id = PBField.initString("");
}
public static class UploadFileReqBody extends MessageMicro<UploadFileReqBody> {
static final MessageMicro.FieldMap __fieldMap__;
public final PBBoolField bool_support_multi_upload;
public final PBBytesField bytes_md5;
public final PBBytesField bytes_sha;
public final PBBytesField bytes_sha3;
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
public final PBUInt32Field uint32_app_id = PBField.initUInt32(0);
public final PBUInt32Field uint32_bus_id = PBField.initUInt32(0);
public final PBUInt32Field uint32_entrance = PBField.initUInt32(0);
public final PBStringField str_parent_folder_id = PBField.initString("");
public final PBStringField str_file_name = PBField.initString("");
public final PBStringField str_local_path = PBField.initString("");
public final PBUInt64Field uint64_file_size = PBField.initUInt64(0);
static {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 32, 42, 50, 58, 64, 74, 82, 90, 120}, new String[]{"uint64_group_code", "uint32_app_id", "uint32_bus_id", "uint32_entrance", "str_parent_folder_id", "str_file_name", "str_local_path", "uint64_file_size", "bytes_sha", "bytes_sha3", "bytes_md5", "bool_support_multi_upload"}, new Object[]{0L, 0, 0, 0, "", "", "", 0L, byteStringMicro, byteStringMicro, byteStringMicro, Boolean.FALSE}, UploadFileReqBody.class);
}
public UploadFileReqBody() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.bytes_sha = PBField.initBytes(byteStringMicro);
this.bytes_sha3 = PBField.initBytes(byteStringMicro);
this.bytes_md5 = PBField.initBytes(byteStringMicro);
this.bool_support_multi_upload = PBField.initBool(false);
}
}
public static class RenameFileReqBody extends MessageMicro<RenameFileReqBody> {
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
public final PBUInt32Field uint32_app_id = PBField.initUInt32(0);
public final PBUInt32Field uint32_bus_id = PBField.initUInt32(0);
public final PBStringField str_file_id = PBField.initString("");
public final PBStringField str_parent_folder_id = PBField.initString("");
public final PBStringField str_new_file_name = PBField.initString("");
}
}

View File

@ -0,0 +1,18 @@
package tencent.im.oidb.cmd0xe37;
import com.tencent.mobileqq.pb.ByteStringMicro;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBBytesField;
import com.tencent.mobileqq.pb.PBField;
public class cmd0xe37 {
public static class Req0xe37 extends MessageMicro<Req0xe37> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{10}, new String[]{"bytes_cmd_0x346_req_body"}, new Object[]{ByteStringMicro.EMPTY}, Req0xe37.class);
public final PBBytesField bytes_cmd_0x346_req_body = PBField.initBytes(ByteStringMicro.EMPTY);
}
public static class Resp0xe37 extends MessageMicro<Resp0xe37> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{10}, new String[]{"bytes_cmd_0x346_rsp_body"}, new Object[]{ByteStringMicro.EMPTY}, Resp0xe37.class);
public final PBBytesField bytes_cmd_0x346_rsp_body = PBField.initBytes(ByteStringMicro.EMPTY);
}
}

View File

@ -0,0 +1,46 @@
package tencent.im.oidb.cmd0xeac;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBRepeatMessageField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public class oidb_0xeac {
public static class ReqBody extends MessageMicro<ReqBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24}, new String[]{"group_code", "msg_seq", "msg_random"}, new Object[]{0L, 0, 0}, ReqBody.class);
public final PBUInt64Field group_code = PBField.initUInt64(0);
public final PBUInt32Field msg_seq = PBField.initUInt32(0);
public final PBUInt32Field msg_random = PBField.initUInt32(0);
}
public static class RspBody extends MessageMicro<RspBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{10, 16, 24, 34, 80}, new String[]{"wording", "digest_uin", "digest_time", "msg", "error_code"}, new Object[]{"", 0L, 0, null, 0}, RspBody.class);
public final PBStringField wording = PBField.initString("");
public final PBUInt64Field digest_uin = PBField.initUInt64(0);
public final PBUInt32Field digest_time = PBField.initUInt32(0);
/* renamed from: msg reason: collision with root package name */
public DigestMsg f340993msg = new DigestMsg();
public final PBUInt32Field error_code = PBField.initUInt32(0);
}
public static class DigestMsg extends MessageMicro<DigestMsg> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 34, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112}, new String[]{"group_code", "msg_seq", "msg_random", "msg_content", "text_size", "pic_size", "video_size", "sender_uin", "sender_time", "add_digest_uin", "add_digest_time", "start_time", "latest_msg_seq", "op_type"}, new Object[]{0L, 0, 0, null, 0L, 0L, 0L, 0L, 0, 0L, 0, 0, 0, 0}, DigestMsg.class);
public final PBUInt64Field group_code = PBField.initUInt64(0);
public final PBUInt32Field msg_seq = PBField.initUInt32(0);
public final PBUInt32Field msg_random = PBField.initUInt32(0);
//public final PBRepeatMessageField<MsgElem> msg_content = PBField.initRepeatMessage(MsgElem.class);
public final PBUInt64Field text_size = PBField.initUInt64(0);
public final PBUInt64Field pic_size = PBField.initUInt64(0);
public final PBUInt64Field video_size = PBField.initUInt64(0);
public final PBUInt64Field sender_uin = PBField.initUInt64(0);
public final PBUInt32Field sender_time = PBField.initUInt32(0);
public final PBUInt64Field add_digest_uin = PBField.initUInt64(0);
public final PBUInt32Field add_digest_time = PBField.initUInt32(0);
public final PBUInt32Field start_time = PBField.initUInt32(0);
public final PBUInt32Field latest_msg_seq = PBField.initUInt32(0);
public final PBUInt32Field op_type = PBField.initUInt32(0);
}
}

View File

@ -0,0 +1,20 @@
package tencent.im.oidb.cmd0xed3;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public class oidb_cmd0xed3 {
public static class ReqBody extends MessageMicro<ReqBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 32, 40, 48}, new String[]{"uint64_to_uin", "uint64_group_code", "uint32_msg_seq", "uint32_msg_rand", "uint64_aio_uin", "uint32_nudge_type"}, new Object[]{0L, 0L, 0, 0, 0L, 0}, ReqBody.class);
public final PBUInt64Field uint64_to_uin = PBField.initUInt64(0);
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
public final PBUInt32Field uint32_msg_seq = PBField.initUInt32(0);
public final PBUInt32Field uint32_msg_rand = PBField.initUInt32(0);
public final PBUInt64Field uint64_aio_uin = PBField.initUInt64(0);
public final PBUInt32Field uint32_nudge_type = PBField.initUInt32(0);
}
}

View File

@ -1,19 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt32Field;
public final class structmsg$AddFrdSNInfo extends MessageMicro<structmsg$AddFrdSNInfo> {
static final FieldMap __fieldMap__;
public final PBUInt32Field uint32_not_see_dynamic = PBField.initUInt32(0);
public final PBUInt32Field uint32_set_sn = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "uint32_not_see_dynamic", "uint32_set_sn" }, new Object[] { integer, integer }, structmsg$AddFrdSNInfo.class);
}
}

View File

@ -1,54 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt32Field;
public final class structmsg$FlagInfo extends MessageMicro<structmsg$FlagInfo> {
static final FieldMap __fieldMap__;
public final PBUInt32Field FrdMsg_Discuss2ManyChat = PBField.initUInt32(0);
public final PBUInt32Field FrdMsg_GetBusiCard = PBField.initUInt32(0);
public final PBUInt32Field FrdMsg_NeedWaitingMsg = PBField.initUInt32(0);
public final PBUInt32Field FrdMsg_uint32_need_all_unread_msg = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_GetC2cInviteJoinGroup = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_GetDisbandedByAdmin = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_GetOfficialAccount = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_GetPayInGroup = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_HiddenGrp = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_Kick_Admin = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_NeedAutoAdminWording = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_NotAllowJoinGrp_InviteNotFrd = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_WordingDown = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_get_quit_pay_group_msg_flag = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_get_transfer_group_msg_flag = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_mask_invite_auto_join = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_support_invite_auto_join = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
88, 96, 104, 112, 120, 128, 136 }, new String[] {
"GrpMsg_Kick_Admin", "GrpMsg_HiddenGrp", "GrpMsg_WordingDown", "FrdMsg_GetBusiCard", "GrpMsg_GetOfficialAccount", "GrpMsg_GetPayInGroup", "FrdMsg_Discuss2ManyChat", "GrpMsg_NotAllowJoinGrp_InviteNotFrd", "FrdMsg_NeedWaitingMsg", "FrdMsg_uint32_need_all_unread_msg",
"GrpMsg_NeedAutoAdminWording", "GrpMsg_get_transfer_group_msg_flag", "GrpMsg_get_quit_pay_group_msg_flag", "GrpMsg_support_invite_auto_join", "GrpMsg_mask_invite_auto_join", "GrpMsg_GetDisbandedByAdmin", "GrpMsg_GetC2cInviteJoinGroup" }, new Object[] {
integer, integer, integer, integer, integer, integer, integer, integer, integer, integer,
integer, integer, integer, integer, integer, integer, integer }, structmsg$FlagInfo.class);
}
}

View File

@ -1,13 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBStringField;
public final class structmsg$FriendInfo extends MessageMicro<structmsg$FriendInfo> {
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18 }, new String[] { "msg_joint_friend", "msg_blacklist" }, new Object[] { "", "" }, structmsg$FriendInfo.class);
public final PBStringField msg_blacklist = PBField.initString("");
public final PBStringField msg_joint_friend = PBField.initString("");
}

View File

@ -1,27 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
public final class structmsg$GroupInfo extends MessageMicro<structmsg$GroupInfo> {
static final FieldMap __fieldMap__;
public final PBUInt32Field display_action = PBField.initUInt32(0);
public final PBUInt32Field group_auth_type = PBField.initUInt32(0);
public final PBStringField msg_alert = PBField.initString("");
public final PBStringField msg_detail_alert = PBField.initString("");
public final PBStringField msg_other_admin_done = PBField.initString("");
public final PBUInt32Field uint32_app_privilege_flag = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 26, 34, 42, 48 }, new String[] { "group_auth_type", "display_action", "msg_alert", "msg_detail_alert", "msg_other_admin_done", "uint32_app_privilege_flag" }, new Object[] { integer, integer, "", "", "", integer }, structmsg$GroupInfo.class);
}
}

View File

@ -1,21 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$MsgInviteExt extends MessageMicro<structmsg$MsgInviteExt> {
static final FieldMap __fieldMap__;
public final PBUInt32Field uint32_src_type = PBField.initUInt32(0);
public final PBUInt32Field uint32_wait_state = PBField.initUInt32(0);
public final PBUInt64Field uint64_src_code = PBField.initUInt64(0L);
static {
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24 }, new String[] { "uint32_src_type", "uint64_src_code", "uint32_wait_state" }, new Object[] { integer, Long.valueOf(0L), integer }, structmsg$MsgInviteExt.class);
}
}

View File

@ -1,18 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$MsgPayGroupExt extends MessageMicro<structmsg$MsgPayGroupExt> {
static final FieldMap __fieldMap__;
public final PBUInt64Field uint64_join_grp_time = PBField.initUInt64(0L);
public final PBUInt64Field uint64_quit_grp_time = PBField.initUInt64(0L);
static {
Long long_ = Long.valueOf(0L);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "uint64_join_grp_time", "uint64_quit_grp_time" }, new Object[] { long_, long_ }, structmsg$MsgPayGroupExt.class);
}
}

View File

@ -1,37 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBEnumField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$ReqNextSystemMsg extends MessageMicro<structmsg$ReqNextSystemMsg> {
static final FieldMap __fieldMap__;
public final PBEnumField checktype = PBField.initEnum(1);
public structmsg$FlagInfo flag = new structmsg$FlagInfo();
public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field following_group_seq = PBField.initUInt64(0L);
public final PBUInt64Field friend_msg_type_flag = PBField.initUInt64(0L);
public final PBUInt32Field language = PBField.initUInt32(0);
public final PBUInt32Field msg_num = PBField.initUInt32(0);
public final PBUInt32Field uint32_need_uid = PBField.initUInt32(0);
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
public final PBUInt32Field version = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 42, 48, 56, 64, 72, 128 }, new String[] { "msg_num", "following_friend_seq", "following_group_seq", "checktype", "flag", "language", "version", "friend_msg_type_flag", "uint32_req_msg_type", "uint32_need_uid" }, new Object[] { integer, long_, long_, Integer.valueOf(1), null, integer, integer, long_, integer, integer }, structmsg$ReqNextSystemMsg.class);
}
}

View File

@ -1,35 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBEnumField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$ReqSystemMsgAction extends MessageMicro<structmsg$ReqSystemMsgAction> {
static final FieldMap __fieldMap__;
public structmsg$SystemMsgActionInfo action_info = new structmsg$SystemMsgActionInfo();
public final PBUInt32Field group_msg_type = PBField.initUInt32(0);
public final PBUInt32Field language = PBField.initUInt32(0);
public final PBUInt64Field msg_seq = PBField.initUInt64(0L);
public final PBEnumField msg_type = PBField.initEnum(1);
public final PBUInt64Field req_uin = PBField.initUInt64(0L);
public final PBUInt32Field src_id = PBField.initUInt32(0);
public final PBUInt32Field sub_src_id = PBField.initUInt32(0);
public final PBUInt32Field sub_type = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40, 48, 56, 66, 72 }, new String[] { "msg_type", "msg_seq", "req_uin", "sub_type", "src_id", "sub_src_id", "group_msg_type", "action_info", "language" }, new Object[] { Integer.valueOf(1), long_, long_, integer, integer, integer, integer, null, integer }, structmsg$ReqSystemMsgAction.class);
}
}

View File

@ -1,49 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBBoolField;
import com.tencent.mobileqq.pb.PBEnumField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$ReqSystemMsgNew extends MessageMicro<structmsg$ReqSystemMsgNew> {
static final FieldMap __fieldMap__;
public final PBEnumField checktype = PBField.initEnum(1);
public structmsg$FlagInfo flag = new structmsg$FlagInfo();
public final PBUInt64Field friend_msg_type_flag = PBField.initUInt64(0L);
public final PBBoolField is_get_frd_ribbon = PBField.initBool(true);
public final PBBoolField is_get_grp_ribbon = PBField.initBool(true);
public final PBUInt32Field language = PBField.initUInt32(0);
public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L);
public final PBUInt32Field msg_num = PBField.initUInt32(0);
public final PBUInt32Field uint32_need_uid = PBField.initUInt32(0);
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
public final PBUInt32Field version = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
Boolean bool = Boolean.TRUE;
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
8, 16, 24, 32, 40, 50, 56, 64, 72, 80,
88, 128 }, new String[] {
"msg_num", "latest_friend_seq", "latest_group_seq", "version", "checktype", "flag", "language", "is_get_frd_ribbon", "is_get_grp_ribbon", "friend_msg_type_flag",
"uint32_req_msg_type", "uint32_need_uid" }, new Object[] {
integer, long_, long_, integer, Integer.valueOf(1), null, integer, bool, bool, long_,
integer, integer }, structmsg$ReqSystemMsgNew.class);
}
}

View File

@ -1,27 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBEnumField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$ReqSystemMsgRead extends MessageMicro<structmsg$ReqSystemMsgRead> {
static final FieldMap __fieldMap__;
public final PBEnumField checktype = PBField.initEnum(1);
public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L);
public final PBUInt32Field type = PBField.initUInt32(0);
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
static {
Long long_ = Long.valueOf(0L);
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40 }, new String[] { "latest_friend_seq", "latest_group_seq", "type", "checktype", "uint32_req_msg_type" }, new Object[] { long_, long_, integer, Integer.valueOf(1), integer }, structmsg$ReqSystemMsgRead.class);
}
}

View File

@ -1,15 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBInt32Field;
import com.tencent.mobileqq.pb.PBStringField;
public final class structmsg$RspHead extends MessageMicro<structmsg$RspHead> {
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 18 }, new String[] { "result", "msg_fail" }, new Object[] { Integer.valueOf(0), "" }, structmsg$RspHead.class);
public final PBStringField msg_fail = PBField.initString("");
public final PBInt32Field result = PBField.initInt32(0);
}

View File

@ -1,37 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.ByteStringMicro;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBBytesField;
import com.tencent.mobileqq.pb.PBEnumField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBRepeatMessageField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$RspNextSystemMsg extends MessageMicro<structmsg$RspNextSystemMsg> {
static final FieldMap __fieldMap__;
public final PBStringField bytes_game_nick = PBField.initString("");
public final PBBytesField bytes_undecid_for_qim = PBField.initBytes(ByteStringMicro.EMPTY);
public final PBEnumField checktype = PBField.initEnum(1);
public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field following_group_seq = PBField.initUInt64(0L);
public structmsg$RspHead head = new structmsg$RspHead();
public final PBRepeatMessageField<structmsg$StructMsg> msgs = PBField.initRepeatMessage(structmsg$StructMsg.class);
public final PBUInt32Field uint32_un_read_count3 = PBField.initUInt32(0);
static {
Long long_ = Long.valueOf(0L);
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 32, 40, 802, 810, 816 }, new String[] { "head", "msgs", "following_friend_seq", "following_group_seq", "checktype", "bytes_game_nick", "bytes_undecid_for_qim", "uint32_un_read_count3" }, new Object[] { null, null, long_, long_, Integer.valueOf(1), "", byteStringMicro, Integer.valueOf(0) }, structmsg$RspNextSystemMsg.class);
}
}

View File

@ -1,25 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
public final class structmsg$RspSystemMsgAction extends MessageMicro<structmsg$RspSystemMsgAction> {
static final FieldMap __fieldMap__;
public structmsg$RspHead head = new structmsg$RspHead();
public final PBStringField msg_detail = PBField.initString("");
public final PBStringField msg_invalid_decided = PBField.initString("");
public final PBUInt32Field remark_result = PBField.initUInt32(0);
public final PBUInt32Field type = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 42, 48 }, new String[] { "head", "msg_detail", "type", "msg_invalid_decided", "remark_result" }, new Object[] { null, "", integer, "", integer }, structmsg$RspSystemMsgAction.class);
}
}

View File

@ -1,66 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.ByteStringMicro;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBBytesField;
import com.tencent.mobileqq.pb.PBEnumField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBRepeatMessageField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$RspSystemMsgNew extends MessageMicro<structmsg$RspSystemMsgNew> {
static final FieldMap __fieldMap__;
public final PBStringField bytes_game_nick = PBField.initString("");
public final PBBytesField bytes_undecid_for_qim = PBField.initBytes(ByteStringMicro.EMPTY);
public final PBEnumField checktype = PBField.initEnum(1);
public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field following_group_seq = PBField.initUInt64(0L);
public final PBRepeatMessageField<structmsg$StructMsg> friendmsgs = PBField.initRepeatMessage(structmsg$StructMsg.class);
public final PBRepeatMessageField<structmsg$StructMsg> groupmsgs = PBField.initRepeatMessage(structmsg$StructMsg.class);
public final PBStringField grp_msg_display = PBField.initString("");
public structmsg$RspHead head = new structmsg$RspHead();
public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L);
public final PBStringField msg_display = PBField.initString("");
public structmsg$StructMsg msg_ribbon_friend = new structmsg$StructMsg();
public structmsg$StructMsg msg_ribbon_group = new structmsg$StructMsg();
public final PBUInt32Field uint32_has_suspicious_flag = PBField.initUInt32(0);
public final PBUInt32Field uint32_over = PBField.initUInt32(0);
public final PBUInt32Field uint32_un_read_count3 = PBField.initUInt32(0);
public final PBUInt32Field unread_friend_count = PBField.initUInt32(0);
public final PBUInt32Field unread_group_count = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
10, 16, 24, 32, 40, 48, 56, 74, 82, 90,
98, 106, 114, 120, 160, 802, 810, 816, 824 }, new String[] {
"head", "unread_friend_count", "unread_group_count", "latest_friend_seq", "latest_group_seq", "following_friend_seq", "following_group_seq", "friendmsgs", "groupmsgs", "msg_ribbon_friend",
"msg_ribbon_group", "msg_display", "grp_msg_display", "uint32_over", "checktype", "bytes_game_nick", "bytes_undecid_for_qim", "uint32_un_read_count3", "uint32_has_suspicious_flag" }, new Object[] {
null, integer, integer, long_, long_, long_, long_, null, null, null,
null, "", "", integer, Integer.valueOf(1), "", byteStringMicro, integer, integer }, structmsg$RspSystemMsgNew.class);
}
}

View File

@ -1,17 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBEnumField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt32Field;
public final class structmsg$RspSystemMsgRead extends MessageMicro<structmsg$RspSystemMsgRead> {
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 16, 24 }, new String[] { "head", "type", "checktype" }, new Object[] { null, Integer.valueOf(0), Integer.valueOf(1) }, structmsg$RspSystemMsgRead.class);
public final PBEnumField checktype = PBField.initEnum(1);
public structmsg$RspHead head = new structmsg$RspHead();
public final PBUInt32Field type = PBField.initUInt32(0);
}

View File

@ -1,31 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBEnumField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$StructMsg extends MessageMicro<structmsg$StructMsg> {
static final FieldMap __fieldMap__;
public structmsg$SystemMsg msg = new structmsg$SystemMsg();
public final PBUInt64Field msg_seq = PBField.initUInt64(0L);
public final PBUInt64Field msg_time = PBField.initUInt64(0L);
public final PBEnumField msg_type = PBField.initEnum(1);
public final PBUInt64Field req_uin = PBField.initUInt64(0L);
public final PBUInt32Field uint32_unread_flag = PBField.initUInt32(0);
public final PBUInt32Field version = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40, 48, 402 }, new String[] { "version", "msg_type", "msg_seq", "msg_time", "req_uin", "uint32_unread_flag", "msg" }, new Object[] { integer, Integer.valueOf(1), long_, long_, long_, integer, null }, structmsg$StructMsg.class);
}
}

View File

@ -1,186 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.ByteStringMicro;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBBytesField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBInt32Field;
import com.tencent.mobileqq.pb.PBRepeatMessageField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$SystemMsg extends MessageMicro<structmsg$SystemMsg> {
static final FieldMap __fieldMap__;
public final PBUInt64Field action_uin = PBField.initUInt64(0L);
public final PBStringField action_uin_nick;
public final PBBytesField action_uin_qq_nick;
public final PBBytesField action_uin_remark;
public final PBRepeatMessageField<structmsg$SystemMsgAction> actions = PBField.initRepeatMessage(structmsg$SystemMsgAction.class);
public final PBUInt64Field actor_uin = PBField.initUInt64(0L);
public final PBStringField actor_uin_nick;
public final PBBytesField bytes_addtion;
public final PBBytesField bytes_game_msg;
public final PBBytesField bytes_game_nick;
public final PBBytesField bytes_name_more;
public final PBBytesField bytes_source_desc;
public final PBBytesField bytes_transparent_group_notify;
public final PBBytesField bytes_warning_tips;
public final PBUInt32Field card_switch;
public final PBUInt64Field clone_uin = PBField.initUInt64(0L);
public final PBStringField clone_uin_nick;
public final PBBytesField eim_group_id_name;
public structmsg$FriendInfo friend_info = new structmsg$FriendInfo();
public final PBUInt64Field group_code = PBField.initUInt64(0L);
public final PBUInt32Field group_ext_flag;
public structmsg$GroupInfo group_info = new structmsg$GroupInfo();
public final PBUInt32Field group_inviter_role = PBField.initUInt32(0);
public final PBUInt32Field group_msg_type = PBField.initUInt32(0);
public final PBStringField group_name;
public final PBStringField msg_actor_describe = PBField.initString("");
public final PBStringField msg_additional = PBField.initString("");
public final PBStringField msg_additional_list = PBField.initString("");
public final PBStringField msg_decided = PBField.initString("");
public final PBStringField msg_describe = PBField.initString("");
public final PBStringField msg_detail;
public structmsg$MsgInviteExt msg_invite_extinfo = new structmsg$MsgInviteExt();
public structmsg$MsgPayGroupExt msg_pay_group_extinfo = new structmsg$MsgPayGroupExt();
public final PBStringField msg_qna;
public final PBStringField msg_source = PBField.initString("");
public final PBStringField msg_title = PBField.initString("");
public final PBBytesField pic_url;
public final PBUInt32Field relation = PBField.initUInt32(0);
public final PBUInt32Field req_uin_age;
public final PBBytesField req_uin_business_card;
public final PBInt32Field req_uin_faceid;
public final PBUInt32Field req_uin_gender;
public final PBStringField req_uin_nick;
public final PBBytesField req_uin_pre_remark;
public final PBUInt32Field reqsubtype = PBField.initUInt32(0);
public final PBUInt32Field src_id = PBField.initUInt32(0);
public final PBUInt32Field sub_src_id = PBField.initUInt32(0);
public final PBUInt32Field sub_type = PBField.initUInt32(0);
public final PBStringField uid;
public final PBUInt32Field uint32_c2c_invite_join_group_flag;
public final PBUInt32Field uint32_doubt_flag;
public final PBUInt32Field uint32_group_flagext3;
public final PBUInt32Field uint32_source_flag = PBField.initUInt32(0);
public final PBUInt64Field uint64_discuss_uin = PBField.initUInt64(0L);
public final PBUInt64Field uint64_eim_group_id = PBField.initUInt64(0L);
public final PBUInt64Field uint64_group_owner_uin;
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
8, 18, 26, 34, 42, 50, 56, 64, 74, 80,
88, 96, 104, 114, 122, 128, 138, 146, 152, 160,
168, 176, 184, 194, 202, 208, 218, 226, 232, 240,
248, 258, 266, 274, 282, 400, 410, 418, 426, 434,
442, 456, 466, 474, 482, 490, 506, 514, 522, 530,
536, 544, 552, 808, 866, 882 }, new String[] {
"sub_type", "msg_title", "msg_describe", "msg_additional", "msg_source", "msg_decided", "src_id", "sub_src_id", "actions", "group_code",
"action_uin", "group_msg_type", "group_inviter_role", "friend_info", "group_info", "actor_uin", "msg_actor_describe", "msg_additional_list", "relation", "reqsubtype",
"clone_uin", "uint64_discuss_uin", "uint64_eim_group_id", "msg_invite_extinfo", "msg_pay_group_extinfo", "uint32_source_flag", "bytes_game_nick", "bytes_game_msg", "uint32_group_flagext3", "uint64_group_owner_uin",
"uint32_doubt_flag", "bytes_warning_tips", "bytes_name_more", "bytes_addtion", "bytes_transparent_group_notify", "req_uin_faceid", "req_uin_nick", "group_name", "action_uin_nick", "msg_qna",
"msg_detail", "group_ext_flag", "actor_uin_nick", "pic_url", "clone_uin_nick", "req_uin_business_card", "eim_group_id_name", "req_uin_pre_remark", "action_uin_qq_nick", "action_uin_remark",
"req_uin_gender", "req_uin_age", "uint32_c2c_invite_join_group_flag", "card_switch", "bytes_source_desc", "uid" }, new Object[] {
integer, "", "", "", "", "", integer, integer, null, long_,
long_, integer, integer, null, null, long_, "", "", integer, integer,
long_, long_, long_, null, null, integer, byteStringMicro, byteStringMicro, integer, long_,
integer, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, integer, "", "", "", "",
"", integer, "", byteStringMicro, "", byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro,
integer, integer, integer, integer, byteStringMicro, "" }, structmsg$SystemMsg.class);
}
public structmsg$SystemMsg() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.bytes_game_nick = PBField.initBytes(byteStringMicro);
this.bytes_game_msg = PBField.initBytes(byteStringMicro);
this.uint32_group_flagext3 = PBField.initUInt32(0);
this.uint64_group_owner_uin = PBField.initUInt64(0L);
this.uint32_doubt_flag = PBField.initUInt32(0);
this.bytes_warning_tips = PBField.initBytes(byteStringMicro);
this.bytes_name_more = PBField.initBytes(byteStringMicro);
this.bytes_addtion = PBField.initBytes(byteStringMicro);
this.bytes_transparent_group_notify = PBField.initBytes(byteStringMicro);
this.req_uin_faceid = PBField.initInt32(0);
this.req_uin_nick = PBField.initString("");
this.group_name = PBField.initString("");
this.action_uin_nick = PBField.initString("");
this.msg_qna = PBField.initString("");
this.msg_detail = PBField.initString("");
this.group_ext_flag = PBField.initUInt32(0);
this.actor_uin_nick = PBField.initString("");
this.pic_url = PBField.initBytes(byteStringMicro);
this.clone_uin_nick = PBField.initString("");
this.req_uin_business_card = PBField.initBytes(byteStringMicro);
this.eim_group_id_name = PBField.initBytes(byteStringMicro);
this.req_uin_pre_remark = PBField.initBytes(byteStringMicro);
this.action_uin_qq_nick = PBField.initBytes(byteStringMicro);
this.action_uin_remark = PBField.initBytes(byteStringMicro);
this.req_uin_gender = PBField.initUInt32(0);
this.req_uin_age = PBField.initUInt32(0);
this.uint32_c2c_invite_join_group_flag = PBField.initUInt32(0);
this.card_switch = PBField.initUInt32(0);
this.bytes_source_desc = PBField.initBytes(byteStringMicro);
this.uid = PBField.initString("");
}
}

View File

@ -1,20 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
public final class structmsg$SystemMsgAction extends MessageMicro<structmsg$SystemMsgAction> {
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 34, 42 }, new String[] { "name", "result", "action", "action_info", "detail_name" }, new Object[] { "", "", Integer.valueOf(0), null, "" }, structmsg$SystemMsgAction.class);
public final PBUInt32Field action = PBField.initUInt32(0);
public structmsg$SystemMsgActionInfo action_info = new structmsg$SystemMsgActionInfo();
public final PBStringField detail_name = PBField.initString("");
public final PBStringField name = PBField.initString("");
public final PBStringField result = PBField.initString("");
}

View File

@ -1,40 +0,0 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.ByteStringMicro;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBBoolField;
import com.tencent.mobileqq.pb.PBBytesField;
import com.tencent.mobileqq.pb.PBEnumField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public final class structmsg$SystemMsgActionInfo extends MessageMicro<structmsg$SystemMsgActionInfo> {
static final FieldMap __fieldMap__;
public structmsg$AddFrdSNInfo addFrdSNInfo = new structmsg$AddFrdSNInfo();
public final PBBoolField blacklist = PBField.initBool(false);
public final PBUInt64Field group_code = PBField.initUInt64(0L);
public final PBUInt32Field group_id = PBField.initUInt32(0);
public final PBStringField msg = PBField.initString("");
public final PBStringField remark = PBField.initString("");
public final PBBytesField sig = PBField.initBytes(ByteStringMicro.EMPTY);
public final PBEnumField type = PBField.initEnum(1);
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
Boolean bool = Boolean.FALSE;
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 26, 402, 408, 418, 424, 434, 440 }, new String[] { "type", "group_code", "sig", "msg", "group_id", "remark", "blacklist", "addFrdSNInfo", "uint32_req_msg_type" }, new Object[] { Integer.valueOf(1), Long.valueOf(0L), byteStringMicro, "", integer, "", bool, null, integer }, structmsg$SystemMsgActionInfo.class);
}
}

View File

@ -0,0 +1,615 @@
package tencent.mobileim.structmsg;
import com.tencent.mobileqq.pb.ByteStringMicro;
import com.tencent.mobileqq.pb.MessageMicro;
import com.tencent.mobileqq.pb.PBBoolField;
import com.tencent.mobileqq.pb.PBBytesField;
import com.tencent.mobileqq.pb.PBEnumField;
import com.tencent.mobileqq.pb.PBField;
import com.tencent.mobileqq.pb.PBInt32Field;
import com.tencent.mobileqq.pb.PBRepeatMessageField;
import com.tencent.mobileqq.pb.PBStringField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public class structmsg {
public static class ReqSystemMsgAction extends MessageMicro< ReqSystemMsgAction> {
static final FieldMap __fieldMap__;
public SystemMsgActionInfo action_info = new SystemMsgActionInfo();
public final PBUInt32Field group_msg_type = PBField.initUInt32(0);
public final PBUInt32Field language = PBField.initUInt32(0);
public final PBUInt64Field msg_seq = PBField.initUInt64(0L);
public final PBEnumField msg_type = PBField.initEnum(1);
public final PBUInt64Field req_uin = PBField.initUInt64(0L);
public final PBUInt32Field src_id = PBField.initUInt32(0);
public final PBUInt32Field sub_src_id = PBField.initUInt32(0);
public final PBUInt32Field sub_type = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40, 48, 56, 66, 72 }, new String[] {
"msg_type", "msg_seq", "req_uin", "sub_type", "src_id", "sub_src_id", "group_msg_type", "action_info", "language"
}, new Object[] { Integer.valueOf(1), long_, long_, integer, integer, integer, integer, null, integer }, ReqSystemMsgAction.class);
}
}
public static class AddFrdSNInfo extends MessageMicro<AddFrdSNInfo> {
static final FieldMap __fieldMap__;
public final PBUInt32Field uint32_not_see_dynamic = PBField.initUInt32(0);
public final PBUInt32Field uint32_set_sn = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "uint32_not_see_dynamic", "uint32_set_sn" }, new Object[] { integer, integer }, AddFrdSNInfo.class);
}
}
public static class FlagInfo extends MessageMicro< FlagInfo> {
static final FieldMap __fieldMap__;
public final PBUInt32Field FrdMsg_Discuss2ManyChat = PBField.initUInt32(0);
public final PBUInt32Field FrdMsg_GetBusiCard = PBField.initUInt32(0);
public final PBUInt32Field FrdMsg_NeedWaitingMsg = PBField.initUInt32(0);
public final PBUInt32Field FrdMsg_uint32_need_all_unread_msg = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_GetC2cInviteJoinGroup = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_GetDisbandedByAdmin = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_GetOfficialAccount = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_GetPayInGroup = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_HiddenGrp = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_Kick_Admin = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_NeedAutoAdminWording = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_NotAllowJoinGrp_InviteNotFrd = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_WordingDown = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_get_quit_pay_group_msg_flag = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_get_transfer_group_msg_flag = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_mask_invite_auto_join = PBField.initUInt32(0);
public final PBUInt32Field GrpMsg_support_invite_auto_join = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
88, 96, 104, 112, 120, 128, 136 }, new String[] {
"GrpMsg_Kick_Admin", "GrpMsg_HiddenGrp", "GrpMsg_WordingDown", "FrdMsg_GetBusiCard", "GrpMsg_GetOfficialAccount", "GrpMsg_GetPayInGroup", "FrdMsg_Discuss2ManyChat", "GrpMsg_NotAllowJoinGrp_InviteNotFrd", "FrdMsg_NeedWaitingMsg", "FrdMsg_uint32_need_all_unread_msg",
"GrpMsg_NeedAutoAdminWording", "GrpMsg_get_transfer_group_msg_flag", "GrpMsg_get_quit_pay_group_msg_flag", "GrpMsg_support_invite_auto_join", "GrpMsg_mask_invite_auto_join", "GrpMsg_GetDisbandedByAdmin", "GrpMsg_GetC2cInviteJoinGroup" }, new Object[] {
integer, integer, integer, integer, integer, integer, integer, integer, integer, integer,
integer, integer, integer, integer, integer, integer, integer }, FlagInfo.class);
}
}
public static class FriendInfo extends MessageMicro< FriendInfo> {
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18 }, new String[] { "msg_joint_friend", "msg_blacklist" }, new Object[] { "", "" }, FriendInfo.class);
public final PBStringField msg_blacklist = PBField.initString("");
public final PBStringField msg_joint_friend = PBField.initString("");
}
public static class GroupInfo extends MessageMicro< GroupInfo> {
static final FieldMap __fieldMap__;
public final PBUInt32Field display_action = PBField.initUInt32(0);
public final PBUInt32Field group_auth_type = PBField.initUInt32(0);
public final PBStringField msg_alert = PBField.initString("");
public final PBStringField msg_detail_alert = PBField.initString("");
public final PBStringField msg_other_admin_done = PBField.initString("");
public final PBUInt32Field uint32_app_privilege_flag = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 26, 34, 42, 48 }, new String[] { "group_auth_type", "display_action", "msg_alert", "msg_detail_alert", "msg_other_admin_done", "uint32_app_privilege_flag" }, new Object[] { integer, integer, "", "", "", integer }, GroupInfo.class);
}
}
public static class MsgInviteExt extends MessageMicro< MsgInviteExt> {
static final FieldMap __fieldMap__;
public final PBUInt32Field uint32_src_type = PBField.initUInt32(0);
public final PBUInt32Field uint32_wait_state = PBField.initUInt32(0);
public final PBUInt64Field uint64_src_code = PBField.initUInt64(0L);
static {
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24 }, new String[] { "uint32_src_type", "uint64_src_code", "uint32_wait_state" }, new Object[] { integer, Long.valueOf(0L), integer }, MsgInviteExt.class);
}
}
public static class MsgPayGroupExt extends MessageMicro< MsgPayGroupExt> {
static final FieldMap __fieldMap__;
public final PBUInt64Field uint64_join_grp_time = PBField.initUInt64(0L);
public final PBUInt64Field uint64_quit_grp_time = PBField.initUInt64(0L);
static {
Long long_ = Long.valueOf(0L);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "uint64_join_grp_time", "uint64_quit_grp_time" }, new Object[] { long_, long_ }, MsgPayGroupExt.class);
}
}
public static class ReqNextSystemMsg extends MessageMicro< ReqNextSystemMsg> {
static final FieldMap __fieldMap__;
public final PBEnumField checktype = PBField.initEnum(1);
public FlagInfo flag = new FlagInfo();
public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field following_group_seq = PBField.initUInt64(0L);
public final PBUInt64Field friend_msg_type_flag = PBField.initUInt64(0L);
public final PBUInt32Field language = PBField.initUInt32(0);
public final PBUInt32Field msg_num = PBField.initUInt32(0);
public final PBUInt32Field uint32_need_uid = PBField.initUInt32(0);
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
public final PBUInt32Field version = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 42, 48, 56, 64, 72, 128 }, new String[] { "msg_num", "following_friend_seq", "following_group_seq", "checktype", "flag", "language", "version", "friend_msg_type_flag", "uint32_req_msg_type", "uint32_need_uid" }, new Object[] { integer, long_, long_, Integer.valueOf(1), null, integer, integer, long_, integer, integer }, ReqNextSystemMsg.class);
}
}
public static class ReqSystemMsgNew extends MessageMicro< ReqSystemMsgNew> {
static final FieldMap __fieldMap__;
public final PBEnumField checktype = PBField.initEnum(1);
public FlagInfo flag = new FlagInfo();
public final PBUInt64Field friend_msg_type_flag = PBField.initUInt64(0L);
public final PBBoolField is_get_frd_ribbon = PBField.initBool(true);
public final PBBoolField is_get_grp_ribbon = PBField.initBool(true);
public final PBUInt32Field language = PBField.initUInt32(0);
public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L);
public final PBUInt32Field msg_num = PBField.initUInt32(0);
public final PBUInt32Field uint32_need_uid = PBField.initUInt32(0);
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
public final PBUInt32Field version = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
Boolean bool = Boolean.TRUE;
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
8, 16, 24, 32, 40, 50, 56, 64, 72, 80,
88, 128 }, new String[] {
"msg_num", "latest_friend_seq", "latest_group_seq", "version", "checktype", "flag", "language", "is_get_frd_ribbon", "is_get_grp_ribbon", "friend_msg_type_flag",
"uint32_req_msg_type", "uint32_need_uid" }, new Object[] {
integer, long_, long_, integer, Integer.valueOf(1), null, integer, bool, bool, long_,
integer, integer }, ReqSystemMsgNew.class);
}
}
public static class ReqSystemMsgRead extends MessageMicro< ReqSystemMsgRead> {
static final FieldMap __fieldMap__;
public final PBEnumField checktype = PBField.initEnum(1);
public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L);
public final PBUInt32Field type = PBField.initUInt32(0);
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
static {
Long long_ = Long.valueOf(0L);
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40 }, new String[] { "latest_friend_seq", "latest_group_seq", "type", "checktype", "uint32_req_msg_type" }, new Object[] { long_, long_, integer, Integer.valueOf(1), integer }, ReqSystemMsgRead.class);
}
}
public static class RspHead extends MessageMicro< RspHead> {
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 18 }, new String[] { "result", "msg_fail" }, new Object[] { Integer.valueOf(0), "" }, RspHead.class);
public final PBStringField msg_fail = PBField.initString("");
public final PBInt32Field result = PBField.initInt32(0);
}
public static class RspNextSystemMsg extends MessageMicro< RspNextSystemMsg> {
static final FieldMap __fieldMap__;
public final PBStringField bytes_game_nick = PBField.initString("");
public final PBBytesField bytes_undecid_for_qim = PBField.initBytes(ByteStringMicro.EMPTY);
public final PBEnumField checktype = PBField.initEnum(1);
public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field following_group_seq = PBField.initUInt64(0L);
public RspHead head = new RspHead();
public final PBRepeatMessageField< StructMsg> msgs = PBField.initRepeatMessage( StructMsg.class);
public final PBUInt32Field uint32_un_read_count3 = PBField.initUInt32(0);
static {
Long long_ = Long.valueOf(0L);
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 32, 40, 802, 810, 816 }, new String[] { "head", "msgs", "following_friend_seq", "following_group_seq", "checktype", "bytes_game_nick", "bytes_undecid_for_qim", "uint32_un_read_count3" }, new Object[] { null, null, long_, long_, Integer.valueOf(1), "", byteStringMicro, Integer.valueOf(0) }, RspNextSystemMsg.class);
}
}
public static class RspSystemMsgAction extends MessageMicro< RspSystemMsgAction> {
static final FieldMap __fieldMap__;
public RspHead head = new RspHead();
public final PBStringField msg_detail = PBField.initString("");
public final PBStringField msg_invalid_decided = PBField.initString("");
public final PBUInt32Field remark_result = PBField.initUInt32(0);
public final PBUInt32Field type = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 42, 48 }, new String[] { "head", "msg_detail", "type", "msg_invalid_decided", "remark_result" }, new Object[] { null, "", integer, "", integer }, RspSystemMsgAction.class);
}
}
public static class RspSystemMsgNew extends MessageMicro< RspSystemMsgNew> {
static final FieldMap __fieldMap__;
public final PBStringField bytes_game_nick = PBField.initString("");
public final PBBytesField bytes_undecid_for_qim = PBField.initBytes(ByteStringMicro.EMPTY);
public final PBEnumField checktype = PBField.initEnum(1);
public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field following_group_seq = PBField.initUInt64(0L);
public final PBRepeatMessageField< StructMsg> friendmsgs = PBField.initRepeatMessage( StructMsg.class);
public final PBRepeatMessageField< StructMsg> groupmsgs = PBField.initRepeatMessage( StructMsg.class);
public final PBStringField grp_msg_display = PBField.initString("");
public RspHead head = new RspHead();
public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L);
public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L);
public final PBStringField msg_display = PBField.initString("");
public StructMsg msg_ribbon_friend = new StructMsg();
public StructMsg msg_ribbon_group = new StructMsg();
public final PBUInt32Field uint32_has_suspicious_flag = PBField.initUInt32(0);
public final PBUInt32Field uint32_over = PBField.initUInt32(0);
public final PBUInt32Field uint32_un_read_count3 = PBField.initUInt32(0);
public final PBUInt32Field unread_friend_count = PBField.initUInt32(0);
public final PBUInt32Field unread_group_count = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
10, 16, 24, 32, 40, 48, 56, 74, 82, 90,
98, 106, 114, 120, 160, 802, 810, 816, 824 }, new String[] {
"head", "unread_friend_count", "unread_group_count", "latest_friend_seq", "latest_group_seq", "following_friend_seq", "following_group_seq", "friendmsgs", "groupmsgs", "msg_ribbon_friend",
"msg_ribbon_group", "msg_display", "grp_msg_display", "uint32_over", "checktype", "bytes_game_nick", "bytes_undecid_for_qim", "uint32_un_read_count3", "uint32_has_suspicious_flag" }, new Object[] {
null, integer, integer, long_, long_, long_, long_, null, null, null,
null, "", "", integer, Integer.valueOf(1), "", byteStringMicro, integer, integer }, RspSystemMsgNew.class);
}
}
public static class RspSystemMsgRead extends MessageMicro< RspSystemMsgRead> {
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 16, 24 }, new String[] { "head", "type", "checktype" }, new Object[] { null, Integer.valueOf(0), Integer.valueOf(1) }, RspSystemMsgRead.class);
public final PBEnumField checktype = PBField.initEnum(1);
public RspHead head = new RspHead();
public final PBUInt32Field type = PBField.initUInt32(0);
}
public static class StructMsg extends MessageMicro< StructMsg> {
static final FieldMap __fieldMap__;
public SystemMsg msg = new SystemMsg();
public final PBUInt64Field msg_seq = PBField.initUInt64(0L);
public final PBUInt64Field msg_time = PBField.initUInt64(0L);
public final PBEnumField msg_type = PBField.initEnum(1);
public final PBUInt64Field req_uin = PBField.initUInt64(0L);
public final PBUInt32Field uint32_unread_flag = PBField.initUInt32(0);
public final PBUInt32Field version = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40, 48, 402 }, new String[] { "version", "msg_type", "msg_seq", "msg_time", "req_uin", "uint32_unread_flag", "msg" }, new Object[] { integer, Integer.valueOf(1), long_, long_, long_, integer, null }, StructMsg.class);
}
}
public static class SystemMsg extends MessageMicro< SystemMsg> {
static final FieldMap __fieldMap__;
public final PBUInt64Field action_uin = PBField.initUInt64(0L);
public final PBStringField action_uin_nick;
public final PBBytesField action_uin_qq_nick;
public final PBBytesField action_uin_remark;
public final PBRepeatMessageField< SystemMsgAction> actions = PBField.initRepeatMessage( SystemMsgAction.class);
public final PBUInt64Field actor_uin = PBField.initUInt64(0L);
public final PBStringField actor_uin_nick;
public final PBBytesField bytes_addtion;
public final PBBytesField bytes_game_msg;
public final PBBytesField bytes_game_nick;
public final PBBytesField bytes_name_more;
public final PBBytesField bytes_source_desc;
public final PBBytesField bytes_transparent_group_notify;
public final PBBytesField bytes_warning_tips;
public final PBUInt32Field card_switch;
public final PBUInt64Field clone_uin = PBField.initUInt64(0L);
public final PBStringField clone_uin_nick;
public final PBBytesField eim_group_id_name;
public FriendInfo friend_info = new FriendInfo();
public final PBUInt64Field group_code = PBField.initUInt64(0L);
public final PBUInt32Field group_ext_flag;
public GroupInfo group_info = new GroupInfo();
public final PBUInt32Field group_inviter_role = PBField.initUInt32(0);
public final PBUInt32Field group_msg_type = PBField.initUInt32(0);
public final PBStringField group_name;
public final PBStringField msg_actor_describe = PBField.initString("");
public final PBStringField msg_additional = PBField.initString("");
public final PBStringField msg_additional_list = PBField.initString("");
public final PBStringField msg_decided = PBField.initString("");
public final PBStringField msg_describe = PBField.initString("");
public final PBStringField msg_detail;
public MsgInviteExt msg_invite_extinfo = new MsgInviteExt();
public MsgPayGroupExt msg_pay_group_extinfo = new MsgPayGroupExt();
public final PBStringField msg_qna;
public final PBStringField msg_source = PBField.initString("");
public final PBStringField msg_title = PBField.initString("");
public final PBBytesField pic_url;
public final PBUInt32Field relation = PBField.initUInt32(0);
public final PBUInt32Field req_uin_age;
public final PBBytesField req_uin_business_card;
public final PBInt32Field req_uin_faceid;
public final PBUInt32Field req_uin_gender;
public final PBStringField req_uin_nick;
public final PBBytesField req_uin_pre_remark;
public final PBUInt32Field reqsubtype = PBField.initUInt32(0);
public final PBUInt32Field src_id = PBField.initUInt32(0);
public final PBUInt32Field sub_src_id = PBField.initUInt32(0);
public final PBUInt32Field sub_type = PBField.initUInt32(0);
public final PBStringField uid;
public final PBUInt32Field uint32_c2c_invite_join_group_flag;
public final PBUInt32Field uint32_doubt_flag;
public final PBUInt32Field uint32_group_flagext3;
public final PBUInt32Field uint32_source_flag = PBField.initUInt32(0);
public final PBUInt64Field uint64_discuss_uin = PBField.initUInt64(0L);
public final PBUInt64Field uint64_eim_group_id = PBField.initUInt64(0L);
public final PBUInt64Field uint64_group_owner_uin;
static {
Integer integer = Integer.valueOf(0);
Long long_ = Long.valueOf(0L);
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
8, 18, 26, 34, 42, 50, 56, 64, 74, 80,
88, 96, 104, 114, 122, 128, 138, 146, 152, 160,
168, 176, 184, 194, 202, 208, 218, 226, 232, 240,
248, 258, 266, 274, 282, 400, 410, 418, 426, 434,
442, 456, 466, 474, 482, 490, 506, 514, 522, 530,
536, 544, 552, 808, 866, 882 }, new String[] {
"sub_type", "msg_title", "msg_describe", "msg_additional", "msg_source", "msg_decided", "src_id", "sub_src_id", "actions", "group_code",
"action_uin", "group_msg_type", "group_inviter_role", "friend_info", "group_info", "actor_uin", "msg_actor_describe", "msg_additional_list", "relation", "reqsubtype",
"clone_uin", "uint64_discuss_uin", "uint64_eim_group_id", "msg_invite_extinfo", "msg_pay_group_extinfo", "uint32_source_flag", "bytes_game_nick", "bytes_game_msg", "uint32_group_flagext3", "uint64_group_owner_uin",
"uint32_doubt_flag", "bytes_warning_tips", "bytes_name_more", "bytes_addtion", "bytes_transparent_group_notify", "req_uin_faceid", "req_uin_nick", "group_name", "action_uin_nick", "msg_qna",
"msg_detail", "group_ext_flag", "actor_uin_nick", "pic_url", "clone_uin_nick", "req_uin_business_card", "eim_group_id_name", "req_uin_pre_remark", "action_uin_qq_nick", "action_uin_remark",
"req_uin_gender", "req_uin_age", "uint32_c2c_invite_join_group_flag", "card_switch", "bytes_source_desc", "uid" }, new Object[] {
integer, "", "", "", "", "", integer, integer, null, long_,
long_, integer, integer, null, null, long_, "", "", integer, integer,
long_, long_, long_, null, null, integer, byteStringMicro, byteStringMicro, integer, long_,
integer, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, integer, "", "", "", "",
"", integer, "", byteStringMicro, "", byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro,
integer, integer, integer, integer, byteStringMicro, "" }, SystemMsg.class);
}
public SystemMsg() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.bytes_game_nick = PBField.initBytes(byteStringMicro);
this.bytes_game_msg = PBField.initBytes(byteStringMicro);
this.uint32_group_flagext3 = PBField.initUInt32(0);
this.uint64_group_owner_uin = PBField.initUInt64(0L);
this.uint32_doubt_flag = PBField.initUInt32(0);
this.bytes_warning_tips = PBField.initBytes(byteStringMicro);
this.bytes_name_more = PBField.initBytes(byteStringMicro);
this.bytes_addtion = PBField.initBytes(byteStringMicro);
this.bytes_transparent_group_notify = PBField.initBytes(byteStringMicro);
this.req_uin_faceid = PBField.initInt32(0);
this.req_uin_nick = PBField.initString("");
this.group_name = PBField.initString("");
this.action_uin_nick = PBField.initString("");
this.msg_qna = PBField.initString("");
this.msg_detail = PBField.initString("");
this.group_ext_flag = PBField.initUInt32(0);
this.actor_uin_nick = PBField.initString("");
this.pic_url = PBField.initBytes(byteStringMicro);
this.clone_uin_nick = PBField.initString("");
this.req_uin_business_card = PBField.initBytes(byteStringMicro);
this.eim_group_id_name = PBField.initBytes(byteStringMicro);
this.req_uin_pre_remark = PBField.initBytes(byteStringMicro);
this.action_uin_qq_nick = PBField.initBytes(byteStringMicro);
this.action_uin_remark = PBField.initBytes(byteStringMicro);
this.req_uin_gender = PBField.initUInt32(0);
this.req_uin_age = PBField.initUInt32(0);
this.uint32_c2c_invite_join_group_flag = PBField.initUInt32(0);
this.card_switch = PBField.initUInt32(0);
this.bytes_source_desc = PBField.initBytes(byteStringMicro);
this.uid = PBField.initString("");
}
}
public static class SystemMsgAction extends MessageMicro< SystemMsgAction> {
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 34, 42 }, new String[] { "name", "result", "action", "action_info", "detail_name" }, new Object[] { "", "", Integer.valueOf(0), null, "" }, SystemMsgAction.class);
public final PBUInt32Field action = PBField.initUInt32(0);
public SystemMsgActionInfo action_info = new SystemMsgActionInfo();
public final PBStringField detail_name = PBField.initString("");
public final PBStringField name = PBField.initString("");
public final PBStringField result = PBField.initString("");
}
public static class SystemMsgActionInfo extends MessageMicro< SystemMsgActionInfo> {
static final FieldMap __fieldMap__;
public AddFrdSNInfo addFrdSNInfo = new AddFrdSNInfo();
public final PBBoolField blacklist = PBField.initBool(false);
public final PBUInt64Field group_code = PBField.initUInt64(0L);
public final PBUInt32Field group_id = PBField.initUInt32(0);
public final PBStringField msg = PBField.initString("");
public final PBStringField remark = PBField.initString("");
public final PBBytesField sig = PBField.initBytes(ByteStringMicro.EMPTY);
public final PBEnumField type = PBField.initEnum(1);
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
static {
Integer integer = Integer.valueOf(0);
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
Boolean bool = Boolean.FALSE;
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 26, 402, 408, 418, 424, 434, 440 }, new String[] { "type", "group_code", "sig", "msg", "group_id", "remark", "blacklist", "addFrdSNInfo", "uint32_req_msg_type" }, new Object[] { Integer.valueOf(1), Long.valueOf(0L), byteStringMicro, "", integer, "", bool, null, integer }, SystemMsgActionInfo.class);
}
}
}

View File

@ -36,3 +36,6 @@ include(
":xposed",
":qqinterface"
)
include(":protobuf")
include(":processor")
include(":annotations")

View File

@ -1,9 +1,9 @@
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
//id("io.realm.kotlin")
id("kotlin-kapt")
kotlin("plugin.serialization") version "1.8.10"
id("com.google.devtools.ksp") version "1.9.21-1.0.15"
kotlin("plugin.serialization") version "1.9.21"
}
android {
@ -49,54 +49,48 @@ android {
}
}
kotlin {
sourceSets.all {
languageSettings {
languageVersion = "2.0"
}
}
}
dependencies {
compileOnly ("de.robv.android.xposed:api:82")
compileOnly (project(":qqinterface"))
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.9.0")
// 业务场景不适配
//implementation("io.realm.kotlin:library-base:1.11.0")
//implementation("io.realm.kotlin:library-sync:1.11.0")
val ktorVersion = "2.3.3"
//implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1")
implementation("io.github.xn32:json5k:0.3.0")
implementation("org.jetbrains.kotlinx:kotlinx-io-jvm:0.1.16")
implementation("io.ktor:ktor-server-core:$ktorVersion")
implementation("io.ktor:ktor-server-host-common:$ktorVersion")
implementation("io.ktor:ktor-server-status-pages:$ktorVersion")
implementation("io.ktor:ktor-server-netty:$ktorVersion")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
implementation("io.ktor:ktor-server-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-cio:$ktorVersion")
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
//implementation("io.ktor:ktor-serialization-kotlinx-protobuf:$ktorVersion")
implementation("io.ktor:ktor-network-tls-certificates:$ktorVersion")
/**
* 为什么不用Ktor的WebSocket呢
* 因为那玩意使用了安卓9才有的Java API
*/
implementation("org.java-websocket:Java-WebSocket:1.5.4")
implementation(project(":protobuf"))
implementation(project(":annotations"))
ksp(project(":processor"))
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
implementation("androidx.exifinterface:exifinterface:1.3.6")
implementation("com.google.protobuf:protobuf-java:3.24.0")
val roomVersion = "2.5.0"
implementation("androidx.room:room-runtime:$roomVersion")
//annotationProcessor("androidx.room:room-compiler:$roomVersion")
// To use Kotlin annotation processing tool (kapt)
kapt("androidx.room:room-compiler:$roomVersion")
// To use Kotlin Symbol Processing (KSP)
//ksp("androidx.room:room-compiler:$roomVersion")
// optional - Kotlin Extensions and Coroutines support for Room
implementation("androidx.room:room-ktx:$roomVersion")
DEPENDENCY_ANDROIDX.forEach {
implementation(it)
}
implementation(DEPENDENCY_JAVA_WEBSOCKET)
implementation(DEPENDENCY_PROTOBUF)
implementation(DEPENDENCY_JSON5K)
implementation(room("runtime"))
kapt(room("compiler"))
implementation(room("ktx"))
implementation(kotlinx("io-jvm", "0.1.16"))
implementation(kotlinx("serialization-protobuf", "1.6.2"))
implementation(ktor("server", "core"))
implementation(ktor("server", "host-common"))
implementation(ktor("server", "status-pages"))
implementation(ktor("server", "netty"))
implementation(ktor("server", "content-negotiation"))
implementation(ktor("client", "core"))
implementation(ktor("client", "content-negotiation"))
implementation(ktor("client", "cio"))
implementation(ktor("serialization", "kotlinx-json"))
implementation(ktor("network", "tls-certificates"))
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
@ -105,3 +99,4 @@ dependencies {
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
}

View File

@ -1,24 +0,0 @@
package moe.fuqiuluo.xposed
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("moe.fuqiuluo.xposed.test", appContext.packageName)
}
}

View File

@ -1,69 +0,0 @@
package moe.fuqiuluo.proto
import com.google.protobuf.ByteString
import moe.fuqiuluo.proto.ProtoUtils.walkPairTags
fun <K, V> protobufOf(vararg pairs: Pair<K, V>): ProtoMap {
val map = ProtoMap()
pairs.forEach {
val (k, v) = it
when (k) {
is Number -> map[k.toInt()] = ProtoUtils.any2proto(v!!)
is Pair<*, *> -> {
val tags = walkPairTags(k)
map.set(*tags.toIntArray(), v = ProtoUtils.any2proto(v!!))
}
else -> error("Not support type for tag: ${k.toString()}")
}
}
return map
}
fun protobufMapOf(struct: (ProtoMap) -> Unit): ProtoMap {
val map = ProtoMap()
struct.invoke(map)
return map
}
val Number.proto: ProtoNumber
get() = ProtoNumber(this)
val ByteString.proto: ProtoByteString
get() = ProtoByteString(this)
val ByteArray.proto: ProtoByteString
get() = ProtoByteString(ByteString.copyFrom(this))
val String.proto: ProtoByteString
get() = ProtoByteString(ByteString.copyFromUtf8(this))
val ProtoValue.asString: ByteString
get() = (this as ProtoByteString).value
val ProtoValue.asNumber: Number
get() = (this as ProtoNumber).value
val ProtoValue.asInt: Int
get() = (this as ProtoNumber).value.toInt()
val ProtoValue.asLong: Long
get() = (this as ProtoNumber).value.toLong()
val ProtoValue.asULong: Long
get() = (this as ProtoNumber).value.toLong() and Long.MAX_VALUE
val ProtoValue.asMap: ProtoMap
get() = (this as ProtoMap)
val ProtoValue.asList: ProtoList
get() = (this as ProtoList)
val ProtoValue.asByteArray: ByteArray
get() = if (this is ProtoMap) {
bytes?.toByteArray() ?: toByteArray()
} else {
(this as ProtoByteString).toByteArray()
}
val ProtoValue.asUtf8String: String
get() = asByteArray.decodeToString()

View File

@ -1,43 +0,0 @@
package moe.fuqiuluo.proto
import com.google.protobuf.ByteString
import com.google.protobuf.CodedOutputStream
import kotlinx.serialization.json.JsonElement
import moe.fuqiuluo.shamrock.tools.json
import moe.fuqiuluo.shamrock.tools.toHexString
class ProtoByteString(
val value: ByteString
): ProtoValue, Iterable<Byte> by value {
override fun toJson(): JsonElement {
return toByteArray().toHexString().json
}
override fun computeSize(tag: Int): Int {
return CodedOutputStream.computeBytesSize(tag, value)
}
override fun writeTo(output: CodedOutputStream, tag: Int) {
output.writeBytes(tag, value)
}
fun toByteArray(): ByteArray {
return value.toByteArray()
}
override fun equals(other: Any?): Boolean {
return this === other
}
override fun hashCode(): Int {
return System.identityHashCode(this)
}
fun toUtfString(): String {
return value.toStringUtf8()
}
override fun toString(): String {
return "ByteString(${value.toByteArray().toHexString()})"
}
}

View File

@ -1,53 +0,0 @@
package moe.fuqiuluo.proto
import com.google.protobuf.CodedOutputStream
import kotlinx.serialization.json.JsonElement
import moe.fuqiuluo.shamrock.tools.jsonArray
class ProtoList(
val value: ArrayList<ProtoValue>
): ProtoValue {
constructor(): this(arrayListOf())
override fun toJson(): JsonElement {
val array = arrayListOf<JsonElement>()
value.forEach {
array.add(it.toJson())
}
return array.jsonArray
}
override fun computeSize(tag: Int): Int {
var size = 0
value.forEach {
size += it.computeSize(tag)
}
return size
}
override fun add(v: ProtoValue) {
value.add(v)
}
override fun size(): Int {
return value.size
}
override fun writeTo(output: CodedOutputStream, tag: Int) {
value.forEach {
it.writeTo(output, tag)
}
}
override fun equals(other: Any?): Boolean {
return this === other
}
override fun hashCode(): Int {
return System.identityHashCode(this)
}
override fun toString(): String {
return toJson().toString()
}
}

View File

@ -1,164 +0,0 @@
package moe.fuqiuluo.proto
import com.google.protobuf.ByteString
import com.google.protobuf.CodedOutputStream
import com.google.protobuf.WireFormat
import kotlinx.serialization.json.JsonElement
import moe.fuqiuluo.shamrock.tools.jsonObject
class ProtoMap(
val value: HashMap<Int, ProtoValue>,
val bytes: ByteString?
): ProtoValue {
constructor(): this(hashMapOf(), null)
constructor(value: HashMap<Int, ProtoValue>): this(value, null)
override fun has(vararg tags: Int): Boolean {
var curMap: ProtoMap = this
tags.forEachIndexed { index, tag ->
if (tag !in curMap) {
return false
}
if (index == tags.size - 1) {
return true
}
curMap = curMap[tag].asMap
}
return true
}
override fun contains(tag: Int): Boolean {
return value.containsKey(tag)
}
override fun set(tag: Int, v: ProtoValue) {
if (!contains(tag)) {
value[tag] = v
} else {
val oldValue = value[tag]!!
if (oldValue is ProtoList) {
oldValue.add(v)
} else {
value[tag] = ProtoList(arrayListOf(oldValue, v))
}
}
}
override fun set(tag: Int, v: Number) {
if (!contains(tag)) {
value[tag] = ProtoNumber(v)
} else {
val oldValue = value[tag]!!
if (oldValue is ProtoList) {
oldValue.add(v.proto)
} else {
value[tag] = ProtoList(arrayListOf(oldValue, v.proto))
}
}
}
override fun get(vararg tags: Int): ProtoValue {
var curMap = value
tags.forEachIndexed { index, tag ->
if (index == tags.size - 1) {
return curMap[tag] ?: error("pb[${tags.joinToString(", ")}][$index] Tag $tag not found")
}
curMap[tag]?.let { v ->
if (v is ProtoMap) {
curMap = v.value
} else {
return v
}
} ?: error("pb[${tags.joinToString(", ")}][$index] Tag $tag not found")
}
error("Instance is not ProtoMap for get(${tags.first()})")
}
override fun size(): Int {
return value.size
}
operator fun set(vararg tags: Int, v: ProtoValue) {
var curProtoMap: ProtoMap = this
tags.forEachIndexed { index, tag ->
if (index == tags.size - 1) {
return@forEachIndexed
}
if (!curProtoMap.contains(tag)) {
val tmp = ProtoMap()
curProtoMap[tag] = tmp
curProtoMap = tmp
} else {
curProtoMap = curProtoMap[tag].asMap
}
}
curProtoMap[tags.last()] = v
}
operator fun set(vararg tags: Int, struct: (ProtoMap) -> Unit) {
val map = ProtoMap()
struct.invoke(map)
set(*tags, v = map)
}
operator fun set(vararg tags: Int, v: String) {
set(*tags, v = v.proto)
}
operator fun set(vararg tags: Int, v: ByteArray) {
set(*tags, v = v.proto)
}
operator fun set(vararg tags: Int, v: Number) {
set(*tags, v = v.proto)
}
operator fun set(vararg tags: Int, v: ByteString) {
set(*tags, v = v.proto)
}
operator fun set(vararg tags: Int, v: Any) {
set(*tags, v = ProtoUtils.any2proto(v))
}
override fun toJson(): JsonElement {
val hashMap = hashMapOf<String, JsonElement>()
value.forEach { (tag, field) ->
hashMap[tag.toString()] = field.toJson()
}
return hashMap.jsonObject
}
override fun computeSize(tag: Int): Int {
var size = CodedOutputStream.computeTagSize(tag)
val dataSize = computeSizeDirectly()
size += ProtoUtils.computeRawVarint32Size(dataSize)
size += dataSize
return size
}
override fun writeTo(output: CodedOutputStream, tag: Int) {
output.writeTag(tag, WireFormat.WIRETYPE_LENGTH_DELIMITED)
val dataSize = computeSizeDirectly()
output.writeUInt32NoTag(dataSize)
value.forEach { (tag, proto) ->
proto.writeTo(output, tag)
}
}
override fun computeSizeDirectly(): Int {
var size = 0
value.forEach { (tag, proto) ->
size += proto.computeSize(tag)
}
return size
}
override fun toString(): String {
return toJson().toString()
}
fun toByteArray(): ByteArray {
return ProtoUtils.encodeToByteArray(this)
}
}

View File

@ -1,45 +0,0 @@
package moe.fuqiuluo.proto
import com.google.protobuf.CodedOutputStream
import kotlinx.serialization.json.JsonElement
import moe.fuqiuluo.shamrock.tools.json
class ProtoNumber(
val value: Number
): ProtoValue {
override fun toJson(): JsonElement {
return value.json
}
override fun computeSize(tag: Int): Int {
return when (value) {
is Int -> CodedOutputStream.computeInt32Size(tag, value)
is Long -> CodedOutputStream.computeInt64Size(tag, value)
is Float -> CodedOutputStream.computeFloatSize(tag, value)
is Double -> CodedOutputStream.computeDoubleSize(tag, value)
else -> error("ProcCodec not support number type: ${value::class.simpleName}")
}
}
override fun writeTo(output: CodedOutputStream, tag: Int) {
when (value) {
is Int -> output.writeInt32(tag, value)
is Long -> output.writeInt64(tag, value)
is Float -> output.writeFloat(tag, value)
is Double -> output.writeDouble(tag, value)
else -> error("ProcCodec not support number type: ${value::class.simpleName}")
}
}
override fun equals(other: Any?): Boolean {
return this === other
}
override fun hashCode(): Int {
return System.identityHashCode(this)
}
override fun toString(): String {
return "Number($value)"
}
}

View File

@ -1,115 +0,0 @@
package moe.fuqiuluo.proto
import com.google.protobuf.ByteString
import com.google.protobuf.CodedOutputStream
import com.google.protobuf.UnknownFieldSet
object ProtoUtils {
fun decodeFromByteArray(data: ByteArray): ProtoMap {
val unknownFieldSet = UnknownFieldSet.parseFrom(data)
val dest = ProtoMap(hashMapOf(), ByteString.copyFrom(data))
printUnknownFieldSet(unknownFieldSet, dest)
return dest
}
fun encodeToByteArray(protoMap: ProtoMap): ByteArray {
val size = protoMap.computeSizeDirectly()
val dest = ByteArray(size)
val output = CodedOutputStream.newInstance(dest)
protoMap.value.forEach { (tag, proto) ->
proto.writeTo(output, tag)
}
output.checkNoSpaceLeft()
return dest
}
internal fun computeRawVarint32Size(size: Int): Int {
if (size and -128 == 0) {
return 1
}
if (size and -16384 == 0) {
return 2
}
if (-2097152 and size == 0) {
return 3
}
return if (size and -268435456 == 0) 4 else 5
}
internal fun any2proto(any: Any): ProtoValue {
return when(any) {
is Number -> any.proto
is ByteArray -> any.proto
is String -> any.proto
is ByteString -> any.proto
is Array<*> -> ProtoList(arrayListOf(*any.map { any2proto(it!!) }.toTypedArray()))
is Collection<*> -> ProtoList(arrayListOf(*any.map { any2proto(it!!) }.toTypedArray()))
is Map<*, *> -> ProtoMap().also {
any.forEach { (k, v) ->
when (k) {
is Number -> it[k.toInt()] = any2proto(v!!)
is Pair<*, *> -> {
val tags = walkPairTags(k)
it.set(*tags.toIntArray(), v = any2proto(v!!))
}
else -> error("Not support type for tag: ${k.toString()}")
}
}
}
is Pair<*, *> -> {
val (tag, v) = any
val value = any2proto(v!!)
when (tag) {
is Pair<*, *> -> ProtoMap().apply {
val tags = walkPairTags(tag)
set(*tags.toIntArray(), v = value)
}
is Number -> ProtoMap(hashMapOf(tag.toInt() to value))
else -> error("Not support type for tag: ${tag.toString()}")
}
}
else -> error("Not support type: ${any::class.simpleName}")
}
}
fun walkPairTags(pair: Pair<*, *>, tags: MutableList<Int> = mutableListOf()): List<Int> {
val (k, v) = pair
if (k is Number) {
tags.add(k.toInt())
} else {
walkPairTags(k as Pair<*, *>, tags)
}
tags.add(v as Int)
return tags
}
private fun printUnknownFieldSet(set: UnknownFieldSet, dest: ProtoMap) {
set.asMap().forEach { (tag, field) ->
field.varintList.forEach {
dest[tag] = it
}
field.fixed32List.forEach {
dest[tag] = it
}
field.fixed64List.forEach {
dest[tag] = it
}
field.lengthDelimitedList.forEach {
try {
val unknownFieldSet = UnknownFieldSet.parseFrom(it)
val map = ProtoMap(hashMapOf(), it)
printUnknownFieldSet(unknownFieldSet, map)
dest[tag] = map
} catch (e: Throwable) {
dest[tag] = it.proto
}
}
field.groupList.forEach {
val map = ProtoMap()
printUnknownFieldSet(it, map)
dest[tag] = map
}
}
}
}

View File

@ -1,44 +0,0 @@
package moe.fuqiuluo.proto
import com.google.protobuf.CodedOutputStream
import kotlinx.serialization.json.JsonElement
sealed interface ProtoValue {
fun toJson(): JsonElement
fun computeSize(tag: Int): Int
fun writeTo(output: CodedOutputStream, tag: Int)
fun computeSizeDirectly(): Int {
return 0
}
fun has(vararg tags: Int): Boolean {
return false
}
operator fun contains(tag: Int): Boolean {
return false
}
operator fun set(tag: Int, v: ProtoValue) {
return
}
operator fun set(tag: Int, v: Number) {
return
}
operator fun get(vararg tags: Int): ProtoValue {
error("Instance is not ProtoMap for (${tags.first()})")
}
fun add(v: ProtoValue) {
error("Instance is not ProtoList")
}
fun size(): Int {
return 0
}
}

View File

@ -1,5 +0,0 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.fuqiuluo.qqinterface.entries
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.Serializable

View File

@ -13,17 +13,16 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withTimeoutOrNull
import moe.fuqiuluo.proto.protobufOf
import kotlinx.serialization.encodeToByteArray
import kotlinx.serialization.protobuf.ProtoBuf
import moe.fuqiuluo.shamrock.utils.PlatformUtils
import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher
import moe.fuqiuluo.shamrock.xposed.helper.PacketHandler
import moe.fuqiuluo.shamrock.xposed.helper.internal.DynamicReceiver
import moe.fuqiuluo.shamrock.xposed.helper.internal.IPCRequest
import moe.whitechi73.protobuf.oidb.TrpcOidb
import mqq.app.MobileQQ
import tencent.im.oidb.oidb_sso
import kotlin.concurrent.timer
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
internal abstract class BaseSvc {
companion object {
@ -95,12 +94,15 @@ internal abstract class BaseSvc {
fun sendTrpcOidb(cmd: String, cmdId: Int, serviceId: Int, buffer: ByteArray, seq: Int = -1) {
val to = createToServiceMsg(cmd)
to.putWupBuffer(protobufOf(
1 to cmdId,
2 to serviceId,
4 to buffer,
12 to 0
).toByteArray())
val oidb = TrpcOidb(
cmd = cmdId,
service = serviceId,
buffer = buffer,
flag = 0
)
to.putWupBuffer(ProtoBuf.encodeToByteArray(oidb))
to.addAttribute("req_pb_protocol_flag", true)
if (seq != -1) {
to.addAttribute("shamrock_seq", seq)

View File

@ -1,7 +1,9 @@
package moe.fuqiuluo.qqinterface.servlet
import com.tencent.mobileqq.pb.ByteStringMicro
import moe.fuqiuluo.proto.protobufOf
import kotlinx.serialization.decodeFromByteArray
import kotlinx.serialization.encodeToByteArray
import kotlinx.serialization.protobuf.ProtoBuf
import moe.fuqiuluo.qqinterface.servlet.structures.*
import moe.fuqiuluo.qqinterface.servlet.transfile.RichProtoSvc
import moe.fuqiuluo.shamrock.helper.Level
@ -10,56 +12,100 @@ import moe.fuqiuluo.shamrock.tools.EMPTY_BYTE_ARRAY
import moe.fuqiuluo.shamrock.tools.slice
import moe.fuqiuluo.shamrock.tools.toHexString
import moe.fuqiuluo.shamrock.utils.DeflateTools
import moe.whitechi73.protobuf.oidb.cmd0x6d7.CreateFolderReq
import moe.whitechi73.protobuf.oidb.cmd0x6d7.DeleteFolderReq
import moe.whitechi73.protobuf.oidb.cmd0x6d7.MoveFolderReq
import moe.whitechi73.protobuf.oidb.cmd0x6d7.Oidb0x6d7ReqBody
import moe.whitechi73.protobuf.oidb.cmd0x6d7.Oidb0x6d7RespBody
import moe.whitechi73.protobuf.oidb.cmd0x6d7.RenameFolderReq
import tencent.im.oidb.cmd0x6d6.oidb_0x6d6
import tencent.im.oidb.cmd0x6d8.oidb_0x6d8
import tencent.im.oidb.oidb_sso
import moe.whitechi73.protobuf.group_file_common.FolderInfo as GroupFileCommonFolderInfo
internal object FileSvc: BaseSvc() {
fun createFileFolder(groupId: String, folderName: String) {
sendOidb("OidbSvc.0x6d7_0", 1751, 0, protobufOf(
1 to mapOf(
1 to groupId.toLong(),
2 to 3,
3 to "/",
4 to folderName
suspend fun createFileFolder(groupId: String, folderName: String, parentFolderId: String = "/"): Result<GroupFileCommonFolderInfo> {
val data = ProtoBuf.encodeToByteArray(Oidb0x6d7ReqBody(
createFolder = CreateFolderReq(
groupCode = groupId.toULong(),
appId = 3u,
parentFolderId = parentFolderId,
folderName = folderName
)
).toByteArray())
}
fun deleteGroupFolder(groupId: String, folderUid: String) {
sendOidb("OidbSvc.0x6d7_1", 1751, 1, protobufOf(
2 to mapOf(
1 to groupId.toLong(),
2 to 3,
3 to folderUid,
)
).toByteArray())
}
fun deleteGroupFile(groupId: String, bizId: Int, fileUid: String) {
/*
val kernelService = NTServiceFetcher.kernelService
val sessionService = kernelService.wrapperSession
val richMediaService = sessionService.richMediaService
val result = withTimeoutOrNull(3000L) {
suspendCancellableCoroutine {
richMediaService.deleteGroupFile(groupId.toLong(), fileUid, bizId) { code, _, result ->
it.resume(code to result.result)
}
}
))
val resultBuffer = sendOidbAW("OidbSvc.0x6d7_0", 1751, 0, data)
?: return Result.failure(Exception("unable to fetch result"))
val oidbPkg = oidb_sso.OIDBSSOPkg()
oidbPkg.mergeFrom(resultBuffer.slice(4))
val rsp = ProtoBuf.decodeFromByteArray<Oidb0x6d7RespBody>(oidbPkg.bytes_bodybuffer.get().toByteArray())
if (rsp.createFolder?.retCode != 0) {
return Result.failure(Exception("unable to create folder: ${rsp.createFolder?.retCode}"))
}
return Result.success(rsp.createFolder!!.folderInfo!!)
}
return if (result == null) Result.failure(RuntimeException("delete group file timeout")) else Result.success(result)*/
// 调用QQ内部实现会导致闪退
sendOidb("OidbSvc.0x6d6_3", 1750, 3, protobufOf(
4 to mapOf(
1 to groupId.toLong(),
2 to 3,
3 to bizId,
4 to "/",
5 to fileUid
suspend fun deleteGroupFolder(groupId: String, folderUid: String): Boolean {
val buffer = sendOidbAW("OidbSvc.0x6d7_1", 1751, 1, ProtoBuf.encodeToByteArray(Oidb0x6d7ReqBody(
deleteFolder = DeleteFolderReq(
groupCode = groupId.toULong(),
appId = 3u,
folderId = folderUid
)
).toByteArray())
))) ?: return false
val oidbPkg = oidb_sso.OIDBSSOPkg()
oidbPkg.mergeFrom(buffer.slice(4))
val rsp = ProtoBuf.decodeFromByteArray<Oidb0x6d7RespBody>(oidbPkg.bytes_bodybuffer.get().toByteArray())
return rsp.deleteFolder?.retCode == 0
}
suspend fun moveGroupFolder(groupId: String, folderUid: String, newParentFolderUid: String): Boolean {
val buffer = sendOidbAW("OidbSvc.0x6d7_2", 1751, 2, ProtoBuf.encodeToByteArray(Oidb0x6d7ReqBody(
moveFolder = MoveFolderReq(
groupCode = groupId.toULong(),
appId = 3u,
folderId = folderUid,
parentFolderId = "/"
)
))) ?: return false
val oidbPkg = oidb_sso.OIDBSSOPkg()
oidbPkg.mergeFrom(buffer.slice(4))
val rsp = ProtoBuf.decodeFromByteArray<Oidb0x6d7RespBody>(oidbPkg.bytes_bodybuffer.get().toByteArray())
return rsp.moveFolder?.retCode == 0
}
suspend fun renameFolder(groupId: String, folderUid: String, name: String): Boolean {
val buffer = sendOidbAW("OidbSvc.0x6d7_3", 1751, 3, ProtoBuf.encodeToByteArray(Oidb0x6d7ReqBody(
renameFolder = RenameFolderReq(
groupCode = groupId.toULong(),
appId = 3u,
folderId = folderUid,
folderName = name
)
))) ?: return false
val oidbPkg = oidb_sso.OIDBSSOPkg()
oidbPkg.mergeFrom(buffer.slice(4))
val rsp = ProtoBuf.decodeFromByteArray<Oidb0x6d7RespBody>(oidbPkg.bytes_bodybuffer.get().toByteArray())
return rsp.renameFolder?.retCode == 0
}
suspend fun deleteGroupFile(groupId: String, bizId: Int, fileUid: String): Boolean {
val oidb0x6d6ReqBody = oidb_0x6d6.ReqBody().apply {
delete_file_req.set(oidb_0x6d6.DeleteFileReqBody().apply {
uint64_group_code.set(groupId.toLong())
uint32_app_id.set(3)
uint32_bus_id.set(bizId)
str_parent_folder_id.set("/")
str_file_id.set(fileUid)
})
}
val result = sendOidbAW("OidbSvc.0x6d6_3", 1750, 3, oidb0x6d6ReqBody.toByteArray())
?: return false
val oidbPkg = oidb_sso.OIDBSSOPkg()
oidbPkg.mergeFrom(result.slice(4))
val rsp = oidb_0x6d6.RspBody().apply {
mergeFrom(oidbPkg.bytes_bodybuffer.get().toByteArray())
}
return rsp.delete_file_rsp.int32_ret_code.get() == 0
}
suspend fun getGroupFileSystemInfo(groupId: Long): FileSystemInfo {

View File

@ -16,13 +16,8 @@ import kotlinx.coroutines.suspendCancellableCoroutine
import moe.fuqiuluo.shamrock.tools.slice
import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher
import mqq.app.AppRuntime
import tencent.mobileim.structmsg.`structmsg$FlagInfo`
import tencent.mobileim.structmsg.`structmsg$ReqSystemMsgNew`
import tencent.mobileim.structmsg.`structmsg$RspSystemMsgNew`
import tencent.mobileim.structmsg.structmsg
import kotlin.coroutines.resume
import tencent.mobileim.structmsg.`structmsg$SystemMsgActionInfo` as ActionInfo
import tencent.mobileim.structmsg.`structmsg$AddFrdSNInfo` as AddFrdSNInfo
import tencent.mobileim.structmsg.`structmsg$StructMsg` as StructMsg
internal object FriendSvc: BaseSvc() {
@ -43,30 +38,31 @@ internal object FriendSvc: BaseSvc() {
if (app !is AppInterface)
throw RuntimeException("AppRuntime cannot cast to AppInterface")
val service = QRoute.api(IAddFriendTempApi::class.java)
val action = ActionInfo()
val action = structmsg.SystemMsgActionInfo()
action.type.set(if (approve != false) 2 else 3)
action.group_id.set(0)
action.remark.set(remark)
val snInfo = AddFrdSNInfo()
val snInfo = structmsg.AddFrdSNInfo()
snInfo.uint32_not_see_dynamic.set(if (notSee != false) 1 else 0)
snInfo.uint32_set_sn.set(0)
action.addFrdSNInfo.set(snInfo)
service.sendFriendSystemMsgAction(1, msgSeq, uin, 1, 2004, 11, 0, action, 0, StructMsg(), false,
service.sendFriendSystemMsgAction(1, msgSeq, uin, 1, 2004, 11, 0, action, 0,
structmsg.StructMsg(), false,
app
)
}
suspend fun requestFriendSystemMsgNew(msgNum: Int, latestFriendSeq: Long = 0, latestGroupSeq: Long = 0, retryCnt: Int = 3): List<StructMsg>? {
suspend fun requestFriendSystemMsgNew(msgNum: Int, latestFriendSeq: Long = 0, latestGroupSeq: Long = 0, retryCnt: Int = 3): List<structmsg.StructMsg>? {
if (retryCnt < 0) {
return ArrayList()
}
val req = `structmsg$ReqSystemMsgNew`()
val req = structmsg.ReqSystemMsgNew()
req.msg_num.set(msgNum)
req.latest_friend_seq.set(latestFriendSeq)
req.latest_group_seq.set(latestGroupSeq)
req.version.set(1000)
req.checktype.set(2)
val flag = `structmsg$FlagInfo`()
val flag = structmsg.FlagInfo()
// flag.GrpMsg_Kick_Admin.set(1)
// flag.GrpMsg_HiddenGrp.set(1)
// flag.GrpMsg_WordingDown.set(1)
@ -95,7 +91,7 @@ internal object FriendSvc: BaseSvc() {
ArrayList()
} else {
try {
val msg = `structmsg$RspSystemMsgNew`()
val msg = structmsg.RspSystemMsgNew()
msg.mergeFrom(respBuffer.slice(4))
return msg.friendmsgs.get()
} catch (err: Throwable) {

View File

@ -46,10 +46,6 @@ import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.decodeFromStream
import kotlinx.serialization.json.jsonObject
import moe.fuqiuluo.proto.ProtoUtils
import moe.fuqiuluo.proto.asInt
import moe.fuqiuluo.proto.asUtf8String
import moe.fuqiuluo.proto.protobufOf
import moe.fuqiuluo.qqinterface.servlet.TicketSvc.getLongUin
import moe.fuqiuluo.qqinterface.servlet.TicketSvc.getUin
import moe.fuqiuluo.qqinterface.servlet.structures.GroupAtAllRemainInfo
@ -85,17 +81,16 @@ import tencent.im.oidb.cmd0x89a.oidb_0x89a
import tencent.im.oidb.cmd0x8a0.oidb_0x8a0
import tencent.im.oidb.cmd0x8a7.cmd0x8a7
import tencent.im.oidb.cmd0x8fc.Oidb_0x8fc
import tencent.im.oidb.cmd0xeac.oidb_0xeac
import tencent.im.oidb.cmd0xeb7.oidb_0xeb7
import tencent.im.oidb.cmd0xed3.oidb_cmd0xed3
import tencent.im.oidb.oidb_sso
import tencent.im.troop.honor.troop_honor
import tencent.mobileim.structmsg.structmsg
import java.lang.reflect.Method
import java.lang.reflect.Modifier
import java.nio.ByteBuffer
import kotlin.coroutines.resume
import tencent.mobileim.structmsg.`structmsg$FlagInfo` as FlagInfo
import tencent.mobileim.structmsg.`structmsg$ReqSystemMsgNew` as ReqSystemMsgNew
import tencent.mobileim.structmsg.`structmsg$RspSystemMsgNew` as RspSystemMsgNew
import tencent.mobileim.structmsg.`structmsg$StructMsg` as StructMsg
internal object GroupSvc: BaseSvc() {
private val RefreshTroopMemberInfoLock by lazy {
@ -155,11 +150,12 @@ internal object GroupSvc: BaseSvc() {
}
fun poke(groupId: String, userId: String) {
sendOidb("OidbSvc.0xed3", 3795, 1, protobufOf(
1 to userId.toLong(),
2 to groupId.toLong(),
3 to 0
).toByteArray())
val req = oidb_cmd0xed3.ReqBody().apply {
uint64_group_code.set(groupId.toLong())
uint64_to_uin.set(userId.toLong())
uint32_msg_seq.set(0)
}
sendOidb("OidbSvc.0xed3", 3795, 1, req.toByteArray())
}
suspend fun getGroupMemberList(groupId: String, refresh: Boolean): Result<List<TroopMemberInfo>> {
@ -272,46 +268,42 @@ internal object GroupSvc: BaseSvc() {
}
suspend fun setEssenceMessage(groupId: Long, seq: Long, rand: Long): Pair<Boolean, String> {
val array = protobufOf(
1 to groupId,
2 to seq,
3 to rand
).toByteArray()
val buffer = sendOidbAW("OidbSvc.0xeac_1", 3756, 1, array)
?: return Pair(false, "unknown error")
val buffer = sendOidbAW("OidbSvc.0xeac_1", 3756, 1, oidb_0xeac.ReqBody().apply {
group_code.set(groupId)
msg_seq.set(seq.toInt())
msg_random.set(rand.toInt())
}.toByteArray()) ?: return Pair(false, "unknown error")
val body = oidb_sso.OIDBSSOPkg()
body.mergeFrom(buffer.slice(4))
val result = ProtoUtils.decodeFromByteArray(body.bytes_bodybuffer.get().toByteArray())
return if (result.has(1)) {
LogCenter.log("设置群精华失败: ${result[1].asUtf8String}")
Pair(false, "设置群精华失败: ${result[1].asUtf8String}")
val result = oidb_0xeac.RspBody().mergeFrom(body.bytes_bodybuffer.get().toByteArray())
return if (result.wording.has()) {
LogCenter.log("设置群精华失败: ${result.wording.get()}")
Pair(false, "设置群精华失败: ${result.wording.get()}")
} else {
LogCenter.log("设置群精华 -> $groupId:$seq")
LogCenter.log("设置群精华 -> $groupId: $seq")
Pair(true, "ok")
}
}
suspend fun deleteEssenceMessage(groupId: Long, seq: Long, rand: Long): Pair<Boolean, String> {
val array = protobufOf(
1 to groupId,
2 to seq,
3 to rand
).toByteArray()
val buffer = sendOidbAW("OidbSvc.0xeac_2", 3756, 2, array)
val buffer = sendOidbAW("OidbSvc.0xeac_2", 3756, 2, oidb_0xeac.ReqBody().apply {
group_code.set(groupId)
msg_seq.set(seq.toInt())
msg_random.set(rand.toInt())
}.toByteArray())
val body = oidb_sso.OIDBSSOPkg()
if (buffer == null) {
return Pair(false, "unknown error")
}
body.mergeFrom(buffer.slice(4))
val result = ProtoUtils.decodeFromByteArray(body.bytes_bodybuffer.get().toByteArray())
return if (result.has(1)) {
LogCenter.log("移除群精华失败: ${result[1].asUtf8String}")
Pair(false, "移除群精华失败: ${result[1].asUtf8String}")
val result = oidb_0xeac.RspBody().mergeFrom(body.bytes_bodybuffer.get().toByteArray())
return if (result.wording.has()) {
LogCenter.log("移除群精华失败: ${result.wording.get()}")
Pair(false, "移除群精华失败: ${result.wording.get()}")
} else {
LogCenter.log("移除群精华 -> $groupId:$seq")
LogCenter.log("移除群精华 -> $groupId: $seq")
Pair(true, "ok")
}
}
fun setGroupAdmin(groupId: Long, userId: Long, enable: Boolean) {
@ -550,12 +542,12 @@ internal object GroupSvc: BaseSvc() {
}
}
suspend fun getTroopMemberInfoByUid(groupId: String, uid: String): Result<MemberInfo> {
suspend fun getTroopMemberInfoByUid(groupId: Long, uid: String): Result<MemberInfo> {
val kernelService = NTServiceFetcher.kernelService
val sessionService = kernelService.wrapperSession
val groupService = sessionService.groupService
val info = suspendCancellableCoroutine {
groupService.getTransferableMemberInfo(groupId.toLong()) { code, _, data ->
groupService.getTransferableMemberInfo(groupId) { code, _, data ->
if (code != 0) {
it.resume(null)
return@getTransferableMemberInfo
@ -740,72 +732,56 @@ internal object GroupSvc: BaseSvc() {
notSee: Boolean? = false,
subType: String
): Result<String>{
// 实在找不到接口了 发pb吧
val buffer: ByteArray
when (subType) {
"invite" -> {
buffer = protobufOf(
1 to 1,
2 to msgSeq,
3 to uin, // self
4 to 1,
5 to 3,
6 to 10016,
7 to 2,
8 to mapOf(
1 to if (approve != false) 11 else 12,
2 to gid
),
9 to 1000
).toByteArray()
}
"add" -> {
buffer = protobufOf(
1 to 2,
2 to msgSeq,
3 to uin,
4 to 1,
5 to 2,
6 to 30024,
7 to 1,
8 to mapOf(
1 to if (approve != false) 11 else 12,
2 to gid,
50 to msg,
53 to if (notSee != false) 1 else 0
),
9 to 1000
).toByteArray()
}
else -> {
return Result.failure(Exception("不支持的sub_type"))
}
}
val respBuffer = sendBufferAW("ProfileService.Pb.ReqSystemMsgAction.Group", true, buffer)
?: return Result.failure(Exception("操作失败"))
val result = ProtoUtils.decodeFromByteArray(respBuffer.slice(4))
return if (result.has(1, 1)) {
if (result[1, 1].asInt == 0) {
Result.success(result[2].asUtf8String)
val req = structmsg.ReqSystemMsgAction().apply {
if (subType == "invite") {
msg_type.set(1)
src_id.set(3)
sub_src_id.set(10016)
group_msg_type.set(2)
} else {
Result.failure(Exception(result[1, 2].asUtf8String))
msg_type.set(2)
src_id.set(2)
sub_src_id.set(30024)
group_msg_type.set(1)
}
msg_seq.set(msgSeq)
req_uin.set(uin)
sub_type.set(1)
action_info.set(structmsg.SystemMsgActionInfo().apply {
type.set(if (approve != false) 11 else 12)
group_code.set(gid)
if (subType == "add") {
this.msg.set(msg)
this.blacklist.set(notSee != false)
}
})
language.set(1000)
}
val respBuffer = sendBufferAW("ProfileService.Pb.ReqSystemMsgAction.Group", true, req.toByteArray())
?: return Result.failure(Exception("操作失败"))
val rsp = structmsg.RspSystemMsgAction().mergeFrom(respBuffer.slice(4))
return if (rsp.head.result.has()) {
if (rsp.head.result.get() == 0) {
Result.success(rsp.msg_detail.get())
} else {
Result.failure(Exception(rsp.head.msg_fail.get()))
}
} else {
Result.failure(Exception("操作失败"))
}
}
suspend fun requestGroupSystemMsgNew(msgNum: Int, reqMsgType: Int = 1, latestFriendSeq: Long = 0, latestGroupSeq: Long = 0, retryCnt: Int = 5): List<StructMsg> {
suspend fun requestGroupSystemMsgNew(msgNum: Int, reqMsgType: Int = 1, latestFriendSeq: Long = 0, latestGroupSeq: Long = 0, retryCnt: Int = 5): List<structmsg.StructMsg> {
if (retryCnt < 0) {
return ArrayList()
}
val req = ReqSystemMsgNew()
val req = structmsg.ReqSystemMsgNew()
req.msg_num.set(msgNum)
req.latest_friend_seq.set(latestFriendSeq)
req.latest_group_seq.set(latestGroupSeq)
req.version.set(1000)
req.checktype.set(3)
val flag = FlagInfo()
val flag = structmsg.FlagInfo()
flag.GrpMsg_Kick_Admin.set(1)
flag.GrpMsg_HiddenGrp.set(1)
flag.GrpMsg_WordingDown.set(1)
@ -834,7 +810,7 @@ internal object GroupSvc: BaseSvc() {
ArrayList()
} else {
try {
val msg = RspSystemMsgNew()
val msg = structmsg.RspSystemMsgNew()
msg.mergeFrom(respBuffer.slice(4))
return msg.groupmsgs.get().orEmpty()
} catch (err: Throwable) {
@ -873,7 +849,7 @@ internal object GroupSvc: BaseSvc() {
messageSeq = msgSeq,
messageContent = obj["msg_content"] ?: EmptyJsonArray
)
val mapping = MessageHelper.getMsgMappingBySeq(MsgConstant.KCHATTYPEGROUP, msgSeq)
val mapping = MessageHelper.getMsgMappingBySeq(MsgConstant.KCHATTYPEGROUP, groupId.toString(), msgSeq)
if (mapping != null) {
msg.messageId = mapping.msgHashId
}

View File

@ -10,33 +10,36 @@ import io.ktor.utils.io.core.writeFully
import io.ktor.utils.io.core.writeInt
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withTimeoutOrNull
import moe.fuqiuluo.proto.protobufOf
import moe.fuqiuluo.shamrock.helper.MessageHelper
import kotlinx.serialization.encodeToByteArray
import kotlinx.serialization.protobuf.ProtoBuf
import moe.fuqiuluo.shamrock.remote.action.handlers.GetHistoryMsg
import moe.fuqiuluo.shamrock.remote.service.listener.AioListener
import moe.fuqiuluo.shamrock.tools.broadcast
import moe.fuqiuluo.shamrock.utils.DeflateTools
import moe.whitechi73.protobuf.message.JsonElement
import moe.whitechi73.protobuf.message.MessageBody
import moe.whitechi73.protobuf.message.MessageContentHead
import moe.whitechi73.protobuf.message.MessageElement
import moe.whitechi73.protobuf.message.MessageElementList
import moe.whitechi73.protobuf.message.MessageHead
import moe.whitechi73.protobuf.message.RichMessage
import moe.whitechi73.protobuf.push.MessagePush
import mqq.app.MobileQQ
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
import kotlin.math.abs
import kotlin.random.Random
import kotlin.random.nextInt
import kotlin.random.nextLong
internal object PacketSvc: BaseSvc() {
/**
* 伪造收到Json卡片消息
*/
suspend fun fakeSelfRecvJsonMsg(msgService: IKernelMsgService, content: String): Long {
return fakeReceiveSelfMsg(msgService) { arrayOf(
mapOf(
51 to 1 to (byteArrayOf(1) + DeflateTools.compress(content.toByteArray()))
)
) }
return fakeReceiveSelfMsg(msgService) {
listOf(MessageElement(
json = JsonElement((byteArrayOf(1) + DeflateTools.compress(content.toByteArray())))
))
}
}
private suspend fun fakeReceiveSelfMsg(msgService: IKernelMsgService, builder: () -> Array<Map<*, *>>): Long {
private suspend fun fakeReceiveSelfMsg(msgService: IKernelMsgService, builder: () -> List<MessageElement>): Long {
val latestMsg = withTimeoutOrNull(3000) {
suspendCancellableCoroutine {
msgService.getMsgs(Contact(MsgConstant.KCHATTYPEC2C, app.currentUid, ""), 0L, 1, true) { code, why, msgs ->
@ -45,30 +48,33 @@ internal object PacketSvc: BaseSvc() {
}
}?.data?.firstOrNull()
val msgSeq = (latestMsg?.msgSeq ?: 0) + 1
fakeReceive("trpc.msg.olpush.OlPushService.MsgPush", 10000, protobufOf(
1 to mapOf(
1 to mapOf(
1 to app.currentUin.toLong(),
2 to app.currentUid,
3 to 1001,
5 to app.currentUin.toLong(),
6 to app.currentUid
val msgPush = MessagePush(
msgBody = MessageBody(
msgHead = MessageHead(
peer = app.longAccountUin,
peerUid = app.currentUid,
flag = 1001,
receiver = app.longAccountUin,
receiverUid = app.currentUid
),
2 to mapOf(
1 to 166,
3 to 11,
4 to msgSeq,
5 to msgSeq,
6 to (System.currentTimeMillis() / 1000).toInt(),
7 to 1,
11 to msgSeq,
12 to msgService.getMsgUniqueId(System.currentTimeMillis()),
14 to msgSeq - 2,
28 to msgSeq
contentHead = MessageContentHead(
msgType = 166,
msgSubType = 11,
msgSeq = msgSeq,
u1 = msgSeq,
msgTime = System.currentTimeMillis() / 1000,
u2 = 1,
u3 = msgSeq,
msgRandom = msgService.getMsgUniqueId(System.currentTimeMillis()),
u4 = msgSeq - 2,
u5 = msgSeq
),
3 to 1 to 2 to builder()
richMsg = RichMessage(MessageElementList(builder()))
)
).toByteArray())
)
fakeReceive("trpc.msg.olpush.OlPushService.MsgPush", 10000, ProtoBuf.encodeToByteArray(msgPush))
return withTimeoutOrNull(5000L) {
suspendCancellableCoroutine {
AioListener.messageLessListenerMap[msgSeq] = {

View File

@ -1,3 +1,5 @@
@file:OptIn(ExperimentalSerializationApi::class)
package moe.fuqiuluo.qqinterface.servlet
import android.graphics.BitmapFactory
@ -12,7 +14,9 @@ import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.io.core.BytePacketBuilder
import kotlinx.io.core.readBytes
import kotlinx.io.core.writeFully
import moe.fuqiuluo.proto.protobufMapOf
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.encodeToByteArray
import kotlinx.serialization.protobuf.ProtoBuf
import moe.fuqiuluo.shamrock.helper.Level
import moe.fuqiuluo.shamrock.helper.LogCenter
import moe.fuqiuluo.shamrock.tools.hex2ByteArray
@ -20,6 +24,18 @@ import moe.fuqiuluo.shamrock.tools.toHexString
import moe.fuqiuluo.shamrock.utils.DeflateTools
import moe.fuqiuluo.shamrock.utils.MD5
import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher
import moe.whitechi73.protobuf.fav.WeiyunAddRichMediaReq
import moe.whitechi73.protobuf.fav.WeiyunAuthor
import moe.whitechi73.protobuf.fav.WeiyunCollectCommInfo
import moe.whitechi73.protobuf.fav.WeiyunComm
import moe.whitechi73.protobuf.fav.WeiyunCommonReq
import moe.whitechi73.protobuf.fav.WeiyunFastUploadResourceReq
import moe.whitechi73.protobuf.fav.WeiyunGetFavContentReq
import moe.whitechi73.protobuf.fav.WeiyunGetFavListReq
import moe.whitechi73.protobuf.fav.WeiyunMsgHead
import moe.whitechi73.protobuf.fav.WeiyunPicInfo
import moe.whitechi73.protobuf.fav.WeiyunRichMediaContent
import moe.whitechi73.protobuf.fav.WeiyunRichMediaSummary
import mqq.manager.TicketManager
import oicq.wlogin_sdk.request.Ticket
import oicq.wlogin_sdk.request.WtTicketPromise
@ -56,40 +72,30 @@ internal object QFavSvc: BaseSvc() {
startPos: Int,
pageSize: Int,
): Result<NetResp> {
val data = protobufMapOf {
it[1] = mapOf(
20000 to mapOf(
/**
* "type", "bid", "category", "start_time", "order_type", "start_pos", "page_size", "sync_policy", "req_source"
*/
1 to 0,
2 to 0,
3 to category,
//4 to System.currentTimeMillis() - 1000 * 60,
//4 to System.currentTimeMillis(),
4 to 0,
5 to 0,
6 to startPos,
7 to pageSize,
8 to 0,
9 to 0
)
val baseReq = WeiyunCommonReq(
getFavListReq = WeiyunGetFavListReq(
type = 0u,
bid = 0u,
category = category.toUInt(),
startTime = 0u,
orderType = 0u,
startPos = startPos.toUInt(),
pageSize = pageSize.toUInt(),
syncPolicy = 0u,
reqSource = 0u
)
}.toByteArray()
return sendWeiyunReq(20000, data)
)
return sendWeiyunReq(20000, baseReq)
}
suspend fun getItemContent(
id: String
): Result<NetResp> {
val data = protobufMapOf {
it[1] = mapOf(
20001 to mapOf(
1 to id
)
return sendWeiyunReq(20001, WeiyunCommonReq(
getFavContentReq = WeiyunGetFavContentReq(
cidList = arrayListOf(id)
)
}.toByteArray()
return sendWeiyunReq(20001, data)
))
}
suspend fun addImageMsg(
@ -104,57 +110,60 @@ internal object QFavSvc: BaseSvc() {
md5: String,
): Result<NetResp> {
val md5Bytes = md5.hex2ByteArray()
val data = protobufMapOf {
it[1] = mapOf(
20009 to mapOf(
1 to mapOf(
1 to 1, // bid
2 to 1, // category
3 to mapOf( // author
1 to if (groupId == 0L) 1 else 2, // type
2 to uin, // num_id
3 to name, // str_id
4 to groupId, // group_id
5 to groupName // group_name
),
4 to System.currentTimeMillis() - 2000, // create_time
5 to System.currentTimeMillis() - 1000, // sequence
7 to """{"recordAudioOnly":false,"audioOnly":false,"fileOnly":false}""",
9 to 0, // original_app_id
10 to 0 // custom_group_id
return sendWeiyunReq(20009, WeiyunCommonReq(
addRichMediaReq = WeiyunAddRichMediaReq(
commInfo = WeiyunCollectCommInfo(
bid = 1u,
category = 1u,
author = WeiyunAuthor(
type = if (groupId == 0L) 1u else 2u,
numId = uin.toULong(),
strId = name,
groupId = groupId.toULong(),
groupName = groupName
),
2 to mapOf(
1 to "",
3 to "[图片]",
4 to mapOf(
1 to picUrl,
2 to md5Bytes,
3 to md5,
6 to width,
7 to height,
8 to size,
9 to 0,
11 to pid
),
5 to 1
),
3 to mapOf(
2 to """<img src="$picUrl" />""",
4 to mapOf(
1 to picUrl,
2 to md5Bytes,
3 to md5,
6 to width,
7 to height,
8 to size,
9 to 0,
11 to pid
createTime = System.currentTimeMillis().toULong() - 2000u,
seq = System.currentTimeMillis().toULong() - 1000u,
bizDataList = arrayListOf("""{"recordAudioOnly":false,"audioOnly":false,"fileOnly":false}""".toByteArray()),
originalAppId = 0u,
customGroupId = 0u
),
summary = WeiyunRichMediaSummary(
title = "",
brief = "[图片]",
picList = arrayListOf(
WeiyunPicInfo(
uri = picUrl,
md5 = md5Bytes,
sha1 = md5.toByteArray(),
name = "",
note = "",
width = width.toUInt(),
height = height.toUInt(),
size = size.toULong(),
type = 0u,
picId = pid
)
)
)
),
contentType = 1u
),
richMediaContent = listOf(WeiyunRichMediaContent(
rawData = """<img src="$picUrl" />""".toByteArray(),
picList = listOf(WeiyunPicInfo(
uri = picUrl,
md5 = md5Bytes,
sha1 = md5.toByteArray(),
name = "",
note = "",
width = width.toUInt(),
height = height.toUInt(),
size = size.toULong(),
type = 0u,
picId = pid
))
))
)
}.toByteArray()
return sendWeiyunReq(20009, data)
))
}
suspend fun applyUpImageMsg(
@ -169,29 +178,26 @@ internal object QFavSvc: BaseSvc() {
return Result.failure(IllegalArgumentException("image file not exists"))
}
val md5 = MD5.genFileMd5(image.absolutePath)
val data = protobufMapOf {
it[1] = mapOf(
20010 to mapOf(
1 to mapOf(
2 to md5,
4 to md5.toHexString(),
10 to mapOf( // author
1 to if (groupId == 0L) 1 else 2, // type
2 to uin, // num_id
3 to name, // str_id
4 to groupId, // group_id
5 to groupName // group_name
),
6 to width, // width
7 to height,
8 to image.length(),
9 to 1, // type
11 to "/storage/emulated/0/DCIM/ShamrockUpload.jpeg" // pic_id
return sendWeiyunReq(20010, WeiyunCommonReq(
fastUploadResourceReq = WeiyunFastUploadResourceReq(
picInfoList = listOf(WeiyunPicInfo(
md5 = md5,
name = md5.toHexString(),
width = width.toUInt(),
height = height.toUInt(),
size = image.length().toULong(),
type = 1u,
picId = "/storage/emulated/0/DCIM/temp.jpeg",
owner = WeiyunAuthor(
type = if (groupId == 0L) 1u else 2u,
numId = uin.toULong(),
strId = name,
groupId = groupId.toULong(),
groupName = groupName
)
)
)),
)
}.toByteArray()
return sendWeiyunReq(20010, data)
))
}
suspend fun addRichMediaMsg(
@ -202,66 +208,32 @@ internal object QFavSvc: BaseSvc() {
time: Long = System.currentTimeMillis(),
content: String
): Result<NetResp> {
val data = protobufMapOf {
it[1] = mapOf(
20009 to mapOf(
1 to mapOf(
/**
* 1 => bid
* 2 => category
* 3 => author
* 4 => create_time
* 5 => sequence
* 6 => biz_key
* 7 => biz_data_list
* 8 => share_url
* 9 => original_app_id
* 10 => custom_group_id
* 506 => modify_time
* 507 => qzone_ugc_key
*/
1 to 1, // bid
2 to 1, // category
3 to mapOf( // author
1 to if (groupId == 0L) 1 else 2, // type
2 to uin, // num_id
3 to name, // str_id
4 to groupId, // group_id
5 to groupName // group_name
),
4 to time - 2000, // create_time
5 to time - 1000, // sequence
9 to 0, // original_app_id
10 to 0 // custom_group_id
return sendWeiyunReq(20009, WeiyunCommonReq(
addRichMediaReq = WeiyunAddRichMediaReq(
commInfo = WeiyunCollectCommInfo(
bid = 1u,
category = 1u,
author = WeiyunAuthor(
type = if (groupId == 0L) 1u else 2u,
numId = uin.toULong(),
strId = name,
groupId = groupId.toULong(),
groupName = groupName
),
2 to mapOf(
/**
* 1 => title
* 2 => sub_title
* 3 => brief
* 4 => pic_list
* 5 => content_type
* 6 => original_uri
* 7 => publisher
* 8 => rich_media_version
*/
3 to content,
5 to 1
),
3 to mapOf(
/**
* 1 => rich_media
* 2 => raw_data
* 3 => biz_data_list
* 4 => pic_list
* 5 => file_list
*/
2 to content.textToHtml()
)
)
createTime = time.toULong() - 2000u,
seq = time.toULong() - 1000u,
originalAppId = 0u,
customGroupId = 0u
),
summary = WeiyunRichMediaSummary(
brief = content,
contentType = 1u
),
richMediaContent = listOf(WeiyunRichMediaContent(
rawData = content.textToHtml().toByteArray(),
))
)
}.toByteArray()
return sendWeiyunReq(20009, data)
))
}
private fun String.textToHtml(): String {
@ -327,7 +299,7 @@ internal object QFavSvc: BaseSvc() {
suspend fun sendWeiyunReq(
cmd: Int,
body: ByteArray,
req: WeiyunCommonReq,
outputStream: ByteArrayOutputStream = ByteArrayOutputStream(),
): Result<NetResp> {
return suspendCancellableCoroutine {
@ -346,7 +318,7 @@ internal object QFavSvc: BaseSvc() {
}
val pSKey = getWeiYunPSKey()
httpNetReq.mHttpMethod = HttpNetReq.HTTP_POST
httpNetReq.mSendData = DeflateTools.gzip(packData(packHead(cmd, pSKey), body))
httpNetReq.mSendData = DeflateTools.gzip(packData(packHead(cmd, pSKey), ProtoBuf.encodeToByteArray(WeiyunComm(req = req))))
httpNetReq.mOutStream = outputStream
httpNetReq.mStartDownOffset = 0L
httpNetReq.mReqProperties["Shamrock"] = "true"
@ -366,39 +338,19 @@ internal object QFavSvc: BaseSvc() {
}
private fun packHead(cmd: Int, pskey: String): ByteArray {
/**
* 1 => uin
* 2 => seq
* 3 => type
* 4 => cmd
* 5 => appid
* 6 => version
* 7 => nettype
* 8 => clientip
* 9 => encrypt
* 10 => keytype
* 11 => encryptkey
* 14 => major_version
* 15 => minor_version
* 101 => retcode
* 102 => retmsg
* 103 => promptmsg
* 111 => total_space
* 112 => used_space
*/
return protobufMapOf {
it[1] = app.longAccountUin
it[2] = seq++ // seq
it[3] = 1 // type
it[4] = cmd
it[5] = APPID
it[6] = VERSION // VERSION
it[7] = 3 // nettype
it[10] = 27 // keytype
it[11] = pskey
it[14] = MAJOR_VERSION
it[15] = MINOR_VERSION
}.toByteArray()
return ProtoBuf.encodeToByteArray(WeiyunMsgHead(
uin = app.longAccountUin.toULong(),
seq = seq++.toUInt(),
type = 1u,
cmd = cmd.toUInt(),
appId = APPID.toUInt(),
version = VERSION.toUInt(),
netType = 3u,
keyType = 27u,
key = pskey.toByteArray(),
majorVersion = MAJOR_VERSION.toUInt(),
minorVersion = MINOR_VERSION.toUInt(),
))
}
private fun packData(head: ByteArray, body: ByteArray): ByteArray {

View File

@ -1,12 +1,9 @@
package moe.fuqiuluo.qqinterface.servlet
import com.tencent.mobileqq.app.QQAppInterface
import com.tencent.mobileqq.pskey.oidb.cmd0x102a.oidb_cmd0x102a
import io.ktor.client.request.get
import io.ktor.client.request.header
import moe.fuqiuluo.proto.ProtoUtils
import moe.fuqiuluo.proto.asUtf8String
import moe.fuqiuluo.proto.protobufOf
import moe.fuqiuluo.qqinterface.servlet.BaseSvc
import moe.fuqiuluo.shamrock.tools.GlobalClientNoRedirect
import moe.fuqiuluo.shamrock.tools.slice
import mqq.app.MobileQQ
@ -108,26 +105,22 @@ internal object TicketSvc: BaseSvc() {
return manager.getSuperkey(uin) ?: ""
}
suspend fun getLessPSKey(domain: String): String? {
val resp = sendOidbAW("OidbSvcTcp.0x102a", 4138, 0, protobufOf(
1 to arrayOf(domain),
//2 to 3
).toByteArray()) ?: return null
suspend fun getLessPSKey(vararg domain: String): Result<List<oidb_cmd0x102a.PSKey>> {
val req = oidb_cmd0x102a.GetPSkeyRequest()
req.domains.set(domain.toList())
val buffer = sendOidbAW("OidbSvcTcp.0x102a", 4138, 0, req.toByteArray())
?: return Result.failure(Exception("getLessPSKey failed"))
val body = oidb_sso.OIDBSSOPkg()
body.mergeFrom(resp.slice(4))
val pb = ProtoUtils.decodeFromByteArray(body.bytes_bodybuffer.get().toByteArray())
return if (pb.has(1, 2)) {
pb[1][2].asUtf8String
} else {
null
}
body.mergeFrom(buffer.slice(4))
val rsp = oidb_cmd0x102a.GetPSkeyResponse().mergeFrom(body.bytes_bodybuffer.get().toByteArray())
return Result.success(rsp.private_keys.get())
}
suspend fun getPSKey(uin: String, domain: String): String? {
return (app.getManager(QQAppInterface.TICKET_MANAGER) as TicketManager).getPskey(uin, domain).let {
if (it.isNullOrBlank()) getLessPSKey(domain) else it
if (it.isNullOrBlank())
getLessPSKey(domain).getOrNull()?.firstOrNull()?.key?.get()
else it
}
}
@ -141,7 +134,7 @@ internal object TicketSvc: BaseSvc() {
var url = "https://ui.ptlogin2.qq.com/cgi-bin/login?pt_hide_ad=1&style=9&appid=$appid&pt_no_auth=1&pt_wxtest=1&daid=$daid&s_url=$jumpurl"
var cookie = GlobalClientNoRedirect.get(url).headers.getAll("Set-Cookie")?.joinToString(";")
url = "https://ssl.ptlogin2.qq.com/jump?u1=$jumpurl&pt_report=1&daid=$daid&style=9&keyindex=19&clientuin=$uin&clientkey=$clientkey"
var head = GlobalClientNoRedirect.get(url) {
GlobalClientNoRedirect.get(url) {
header("Cookie", cookie)
}.let {
cookie = it.headers.getAll("Set-Cookie")?.joinToString(";")

View File

@ -1,20 +1,12 @@
package moe.fuqiuluo.qqinterface.servlet.transfile
import com.tencent.av.utils.api.IAudioHelperApi
import com.tencent.mobileqq.qroute.QRoute
import com.tencent.mobileqq.pb.ByteStringMicro
import com.tencent.mobileqq.transfile.FileMsg
import com.tencent.mobileqq.transfile.api.IProtoReqManager
import com.tencent.mobileqq.transfile.protohandler.RichProto
import com.tencent.mobileqq.transfile.protohandler.RichProtoProc
import kotlinx.coroutines.suspendCancellableCoroutine
import moe.fuqiuluo.proto.ProtoUtils
import moe.fuqiuluo.proto.asByteArray
import moe.fuqiuluo.proto.asInt
import moe.fuqiuluo.proto.asList
import moe.fuqiuluo.proto.asUtf8String
import moe.fuqiuluo.proto.protobufOf
import moe.fuqiuluo.qqinterface.servlet.BaseSvc
import moe.fuqiuluo.shamrock.helper.ContactHelper
import moe.fuqiuluo.shamrock.helper.Level
import moe.fuqiuluo.shamrock.helper.LogCenter
import moe.fuqiuluo.shamrock.tools.hex2ByteArray
@ -23,6 +15,9 @@ import moe.fuqiuluo.shamrock.tools.toHexString
import moe.fuqiuluo.shamrock.utils.PlatformUtils
import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher
import mqq.app.MobileQQ
import tencent.im.cs.cmd0x346.cmd0x346
import tencent.im.oidb.cmd0x6d6.oidb_0x6d6
import tencent.im.oidb.cmd0xe37.cmd0xe37
import tencent.im.oidb.oidb_sso
import kotlin.coroutines.resume
@ -32,27 +27,29 @@ internal object RichProtoSvc: BaseSvc() {
fileId: String,
bizId: Int = 102
): String {
val buffer = sendOidbAW("OidbSvcTrpcTcp.0x6d6_2", 1750, 2, protobufOf(
3 to mapOf(
1 to peerId,
2 to 3,
3 to bizId,
4 to fileId,
)
).toByteArray())
val buffer = sendOidbAW("OidbSvcTrpcTcp.0x6d6_2", 1750, 2, oidb_0x6d6.ReqBody().apply {
download_file_req.set(oidb_0x6d6.DownloadFileReqBody().apply {
uint64_group_code.set(peerId)
uint32_app_id.set(3)
uint32_bus_id.set(bizId)
str_file_id.set(fileId)
})
}.toByteArray())
if (buffer == null) {
return ""
} else {
val body = oidb_sso.OIDBSSOPkg()
body.mergeFrom(buffer.slice(4))
val result = ProtoUtils.decodeFromByteArray(body.bytes_bodybuffer.get().toByteArray())
if (body.uint32_result.get() != 0 || result[3, 1].asInt != 0) {
val result = oidb_0x6d6.RspBody().mergeFrom(body.bytes_bodybuffer.get().toByteArray())
if (body.uint32_result.get() != 0
|| result.download_file_rsp.int32_ret_code.get() != 0) {
return ""
}
val domain = if (result.has(3, 5)) ("https://" + result[3, 4].asUtf8String) else ("http://" + result[3, 5].asUtf8String)
val downloadUrl = result[3, 6].asByteArray.toHexString()
val domain = if (!result.download_file_rsp.str_download_dns.has())
("https://" + result.download_file_rsp.str_download_ip.get())
else ("http://" + result.download_file_rsp.str_download_dns.get())
val downloadUrl = result.download_file_rsp.bytes_download_url.get().toByteArray().toHexString()
val appId = MobileQQ.getMobileQQ().appId
val version = PlatformUtils.getQQVersion(MobileQQ.getContext())
@ -65,23 +62,25 @@ internal object RichProtoSvc: BaseSvc() {
subId: String,
retryCnt: Int = 0
): String {
val buffer = sendOidbAW("OidbSvc.0xe37_1200", 3639, 1200, protobufOf(
1 to 1200,
2 to 1 /* QRoute.api(IAudioHelperApi::class.java).genDebugSeq().toInt() */, /* seq */
14 to mapOf(
10 to app.longAccountUin,
20 to fileId,
30 to 2, /* ver */
60 to subId,
601 to 0
),
101 to 3, // uint32_business_id
102 to 104, /* client_type */
200 to 1, /* uint32_flag_support_mediaplatform */
99999 to mapOf(
90200 to 1 // uint32_download_url_type
)
).toByteArray())
val buffer = sendOidbAW("OidbSvc.0xe37_1200", 3639, 1200, cmd0xe37.Req0xe37().apply {
bytes_cmd_0x346_req_body.set(ByteStringMicro.copyFrom(cmd0x346.ReqBody().apply {
uint32_cmd.set(1200)
uint32_seq.set(1)
msg_apply_download_req.set(cmd0x346.ApplyDownloadReq().apply {
uint64_uin.set(app.longAccountUin)
bytes_uuid.set(ByteStringMicro.copyFrom(fileId.toByteArray()))
uint32_owner_type.set(2)
str_fileidcrc.set(subId)
})
uint32_business_id.set(3)
uint32_client_type.set(104)
uint32_flag_support_mediaplatform.set(1)
msg_extension_req.set(cmd0x346.ExtensionReq().apply {
uint32_download_url_type.set(1)
})
}.toByteArray()))
}.toByteArray())
if (buffer == null) {
if (retryCnt < 3) {
@ -91,17 +90,19 @@ internal object RichProtoSvc: BaseSvc() {
} else {
val body = oidb_sso.OIDBSSOPkg()
body.mergeFrom(buffer.slice(4))
val result = ProtoUtils.decodeFromByteArray(body.bytes_bodybuffer.get().toByteArray())
if (body.uint32_result.get() != 0 || result[14, 10].asInt != 0) {
val result = cmd0x346.RspBody().mergeFrom(cmd0xe37.Resp0xe37().mergeFrom(
body.bytes_bodybuffer.get().toByteArray()
).bytes_cmd_0x346_rsp_body.get().toByteArray())
if (body.uint32_result.get() != 0 ||
result.msg_apply_download_rsp.int32_ret_code.has() && result.msg_apply_download_rsp.int32_ret_code.get() != 0) {
return ""
}
val oldData = result[14, 30]
val oldData = result.msg_apply_download_rsp.msg_download_info
//val newData = result[14, 40] NTQQ 文件信息
val domain = if (oldData.has(90)) ("https://" + oldData[90].asUtf8String) else ("http://" + oldData[60].asList.value.first().asUtf8String)
val params = oldData[50].asUtf8String
val domain = if (oldData.str_download_dns.has()) ("https://" + oldData.str_download_dns.get()) else ("http://" + oldData.rpt_str_downloadip_list.get().first())
val params = oldData.str_download_url.get()
val appId = MobileQQ.getMobileQQ().appId
val version = PlatformUtils.getQQVersion(MobileQQ.getContext())

Some files were not shown because too many files have changed in this diff Show More