mirror of
https://github.com/whitechi73/OpenShamrock.git
synced 2024-08-14 05:12:17 +00:00
Compare commits
196 Commits
Author | SHA1 | Date | |
---|---|---|---|
fb00e5c1ff | |||
7bfb9b7b61 | |||
c43689822b | |||
7952453137 | |||
2f61f6da00 | |||
db252b6b6c | |||
137c354acc | |||
1c7f6bd034 | |||
649d8771ca | |||
af7b0f732e | |||
12738fd52c | |||
b165e1c0c2 | |||
29c1ad8bc9 | |||
262af4108b | |||
a22dc50f14 | |||
e629981218 | |||
103381c17a | |||
7540ef04bb | |||
30b48c6677 | |||
48e4648110 | |||
b10b10d4a2 | |||
036f8a49ac | |||
67f52b8df0 | |||
dd1b909bb0 | |||
72c3c7bdf7 | |||
e0e7a9fc2e | |||
b3d853dec3 | |||
e0a4aad3cd | |||
328e656859 | |||
c97f79335a | |||
e07e75747a | |||
9482641c38 | |||
a485e72ddf | |||
c7265ba628 | |||
c39c2a172f | |||
64b7b00253 | |||
ec132d224e | |||
9c9fbfa753 | |||
4b5932b319 | |||
0c91028469 | |||
48b720bdd7 | |||
2038d81ce8 | |||
81be383b5f | |||
0fb88e3e44 | |||
e92b04ad0f | |||
160d1a11ac | |||
b9cfe73eae | |||
8d6d984849 | |||
25fe9fab37 | |||
ba7058a838 | |||
0858395e60 | |||
fdd769d9ff | |||
f47ae69653 | |||
f311ae3797 | |||
5a941f889f | |||
69e50c6f93 | |||
f7ac3a5d23 | |||
b6b54a805e | |||
131f56a468 | |||
e45e9e7fa0 | |||
cac0aad1f2 | |||
2c1bd9e726 | |||
2645e8f451 | |||
e92c227bba | |||
a31fe92c0b | |||
70cb876439 | |||
9aa4c37354 | |||
d44150ea1a | |||
0360c81bee | |||
cb904c1f1c | |||
bc754db959 | |||
8df799a6e4 | |||
71dd9469ca | |||
79788d2cdc | |||
c28c9981c4 | |||
8fadd0016a | |||
77504d68fd | |||
1490450178 | |||
88beaf8b6f | |||
df25b0bc76 | |||
d07eea7766 | |||
5000453002 | |||
35c82fcc51 | |||
89a4912ed7 | |||
aeabc66067 | |||
ccbfc9a1e1 | |||
31936feb98 | |||
538db69754 | |||
25ea5bd6a8 | |||
460cd84258 | |||
3f9613c43c | |||
34eccda233 | |||
741d2c7a84 | |||
6ee5ceb321 | |||
6107ec6ffb | |||
4ef014a8ac | |||
135a7c2f56 | |||
420f11784d | |||
951e7462c4 | |||
1b0550b5e1 | |||
919c4a7d80 | |||
dcb2b0a26f | |||
d388e5df0c | |||
5776524579 | |||
1d0a0731fb | |||
4dafa75944 | |||
85cdc86b07 | |||
cd19426d1b | |||
48b1b40e1c | |||
50d469cc45 | |||
37f74d5284 | |||
adb7b12c16 | |||
27791cc848 | |||
bd45523e25 | |||
c0f2242679 | |||
c309a2b3ed | |||
48c9048a00 | |||
4d2f7a794b | |||
ab6e431872 | |||
9423df2670 | |||
a2b3e42eee | |||
d9a045bbf0 | |||
42ca17339e | |||
003c4d4456 | |||
ec39aa7bc3 | |||
4e3870a512 | |||
97534b01a6 | |||
61bed61bfb | |||
a0ff4782db | |||
41dd1de8f8 | |||
fa6634d6af | |||
6201d12f5f | |||
b2adc5cedf | |||
0bb871bf01 | |||
dc969440ee | |||
b9b6e133d0 | |||
b5a9884448 | |||
bffb7caf04 | |||
2c3466b4c3 | |||
007e5fef2f | |||
48773cc47c | |||
b2ad4438ab | |||
2fdcfe332b | |||
7d8772ebf6 | |||
2a75160ef8 | |||
76bd58d984 | |||
39120bdeae | |||
7b07698f7b | |||
5c10a5a04e | |||
3a0dc41329 | |||
64c800c945 | |||
ecb3cea5a5 | |||
8e0ae6f85b | |||
9d893b481d | |||
85aaa54e4e | |||
c6dad5677c | |||
80a4a208b9 | |||
ae663e6b2e | |||
780f3577a5 | |||
3518f974cc | |||
911b003f7f | |||
69bc80e9b3 | |||
da0b74db1a | |||
7212938df3 | |||
ae1e78b267 | |||
b7266e490f | |||
6b4a429821 | |||
4a4507dfcd | |||
f63bcabf1b | |||
4932b36ee1 | |||
8c307c4f6e | |||
8d8846fafb | |||
544e216ddb | |||
4fedab719b | |||
75a567d5cd | |||
1a814e565a | |||
5ea260c24b | |||
2d57dc021d | |||
dabe2ea886 | |||
673902e514 | |||
5062ff7c3a | |||
0de6f851a6 | |||
c758b1576d | |||
5ba8bd11e2 | |||
679b7619ce | |||
282233131a | |||
edf857bcb6 | |||
cd1d1e928a | |||
45d6421153 | |||
8c6f529b4b | |||
b23620b5ef | |||
e09e00fcd3 | |||
0d35d5834b | |||
ee8dc75be3 | |||
5f91be547e | |||
7439622cd6 |
3
.github/ISSUE_TEMPLATE/bug.md
vendored
3
.github/ISSUE_TEMPLATE/bug.md
vendored
@ -6,7 +6,7 @@ labels: bug
|
||||
---
|
||||
|
||||
警告: 在进一步操作之前,请检查下列选项。如果您忽视此模板或者没有提供关键信息,您的 Issue 将直接被关闭
|
||||
- 确保您使用的是 [最新开发版本](https://github.com/whitechi73/Shamrock/actions/workflows/build-apk.yml) 的 Shamrock.
|
||||
- 确保您使用的是 [最新开发版本](https://github.com/whitechi73/OpenShamrock/actions/workflows/build-apk.yml) 的 Shamrock.
|
||||
- 确保您的问题尚未在 Issues 列表中提出.
|
||||
- 确保您的问题不是由于您的代码错误导致的.
|
||||
|
||||
@ -22,5 +22,6 @@ labels: bug
|
||||
|
||||
- Shamrock 版本:
|
||||
- Android 版本:
|
||||
- LSPosed 框架版本:
|
||||
- 设备的制造商和型号:
|
||||
- 设备的 CPU 架构:
|
||||
|
2
.github/ISSUE_TEMPLATE/feature.md
vendored
2
.github/ISSUE_TEMPLATE/feature.md
vendored
@ -7,7 +7,7 @@ labels: enhancement
|
||||
|
||||
警告: 在进一步操作之前,请检查下列选项。如果您忽视此模板或者没有提供关键信息,您的 Issue 将直接被关闭
|
||||
|
||||
- 确保您使用的是 [最新开发版本](https://github.com/whitechi73/Shamrock/actions/workflows/build-apk.yml) 的 Shamrock.
|
||||
- 确保您使用的是 [最新开发版本](https://github.com/whitechi73/OpenShamrock/actions/workflows/build-apk.yml) 的 Shamrock.
|
||||
- 确保您的功能请求尚未在 Issues 列表中提出.
|
||||
- 确保您的功能请求是与 Shamrock 相关的,且可以实现.
|
||||
|
||||
|
65
.github/workflows/build-apk.yml
vendored
65
.github/workflows/build-apk.yml
vendored
@ -13,24 +13,38 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build APK
|
||||
name: Build Shamrock
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-java@v3
|
||||
with:
|
||||
distribution: "temurin"
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup JDK 17
|
||||
uses: actions/setup-java@v4.0.0
|
||||
with:
|
||||
java-version: 17
|
||||
cache: 'gradle'
|
||||
distribution: "adopt"
|
||||
|
||||
- name: Setup cmake
|
||||
run: |
|
||||
echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "cmake;3.22.1" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null
|
||||
echo "sdk.dir=${ANDROID_HOME}" > local.properties
|
||||
- name: Cache Gradle Dependencies
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
!~/.gradle/caches/build-cache-*
|
||||
key: gradle-deps-core-${{ hashFiles('**/build.gradle.kts') }}
|
||||
restore-keys: gradle-deps
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v2.9.0
|
||||
- name: Cache Gradle Build
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches/build-cache-*
|
||||
~/.gradle/buildOutputCleanup/cache.properties
|
||||
key: gradle-builds-core-${{ github.sha }}
|
||||
restore-keys: gradle-builds
|
||||
|
||||
- name: Build with Gradle
|
||||
run: |
|
||||
@ -46,42 +60,41 @@ jobs:
|
||||
KEY_ALIAS: ${{ secrets.SIGN_ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.SIGN_KEY_PASSWORD }}
|
||||
|
||||
- name: Install aapt
|
||||
run: sudo apt-get update && sudo apt-get install -y aapt
|
||||
|
||||
- name: Set Shamrock Version
|
||||
run: |
|
||||
apk_file=${{ env.APK_FILE_ALL }}
|
||||
apk_dump=$(aapt dump badging "$apk_file")
|
||||
version_name=$(sed -n "s/.*versionName='\([^']*\)'.*/\1/p" <<< "$apk_dump")
|
||||
echo "SHAMROCK_VERSION=$version_name" >> $GITHUB_ENV
|
||||
version_name_all=$(basename -s .apk "${{ env.APK_FILE_ALL }}")
|
||||
version_name_arm64=$(basename -s .apk "${{ env.APK_FILE_ARM64 }}")
|
||||
version_name_x86_64=$(basename -s .apk "${{ env.APK_FILE_X86_64 }}")
|
||||
echo "SHAMROCK_VERSION_ALL=$version_name_all" >> $GITHUB_ENV
|
||||
echo "SHAMROCK_VERSION_ARM64=$version_name_arm64" >> $GITHUB_ENV
|
||||
echo "SHAMROCK_VERSION_x86_64=$version_name_x86_64" >> $GITHUB_ENV
|
||||
|
||||
- name: Show Artifacts SHA256
|
||||
run: |
|
||||
echo "### Build Success :rocket:" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|ABI|SHA256|" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|:--------:|:----------|" >> $GITHUB_STEP_SUMMARY
|
||||
all=($(sha256sum ${{ env.APK_FILE_ALL }}))
|
||||
all=($(sha256sum "${{ env.APK_FILE_ALL }}"))
|
||||
echo "|all|$all" >> $GITHUB_STEP_SUMMARY
|
||||
arm64=($(sha256sum ${{ env.APK_FILE_ARM64 }}))
|
||||
arm64=($(sha256sum "${{ env.APK_FILE_ARM64 }}"))
|
||||
echo "|arm64|$arm64" >> $GITHUB_STEP_SUMMARY
|
||||
x86_64=($(sha256sum ${{ env.APK_FILE_X86_64 }}))
|
||||
x86_64=($(sha256sum "${{ env.APK_FILE_X86_64 }}"))
|
||||
echo "|x86_64|$x86_64" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Upload ALL APK RELEASE
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Shamrock-v${{ env.SHAMROCK_VERSION }}-all
|
||||
path: ${{ env.APK_FILE_ALL }}
|
||||
name: "${{ env.SHAMROCK_VERSION_ALL }}"
|
||||
path: "${{ env.APK_FILE_ALL }}"
|
||||
|
||||
- name: Upload ARM64 APK RELEASE
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Shamrock-v${{ env.SHAMROCK_VERSION }}-arm64
|
||||
path: ${{ env.APK_FILE_ARM64 }}
|
||||
name: "${{ env.SHAMROCK_VERSION_ARM64 }}"
|
||||
path: "${{ env.APK_FILE_ARM64 }}"
|
||||
|
||||
- name: Upload X86_64 APK RELEASE
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Shamrock-v${{ env.SHAMROCK_VERSION }}-x86_64
|
||||
path: ${{ env.APK_FILE_X86_64 }}
|
||||
name: "${{ env.SHAMROCK_VERSION_x86_64 }}"
|
||||
path: "${{ env.APK_FILE_X86_64 }}"
|
57
.github/workflows/codeql.yml
vendored
57
.github/workflows/codeql.yml
vendored
@ -1,57 +0,0 @@
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
schedule:
|
||||
- cron: '24 7 * * 4'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 360
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'cpp', 'java' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3.6.0
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
|
||||
- name: Setup JDK 17
|
||||
uses: actions/setup-java@v3.12.0
|
||||
with:
|
||||
distribution: "temurin"
|
||||
java-version: 17
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v2.8.0
|
||||
|
||||
- name: Setup cmake
|
||||
run: |
|
||||
echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "cmake;3.22.1" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null
|
||||
echo "sdk.dir=${ANDROID_HOME}" > local.properties
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
chmod +x ./gradlew
|
||||
./gradlew :app:assembleAppRelease
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
73
.github/workflows/release.yml
vendored
73
.github/workflows/release.yml
vendored
@ -1,73 +0,0 @@
|
||||
name: Shamrock Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-java@v3
|
||||
with:
|
||||
distribution: "temurin"
|
||||
java-version: 17
|
||||
cache: 'gradle'
|
||||
|
||||
- name: Setup cmake
|
||||
run: |
|
||||
echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "cmake;3.22.1" --sdk_root=${ANDROID_SDK_ROOT} &> /dev/null
|
||||
echo "sdk.dir=${ANDROID_HOME}" > local.properties
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/gradle-build-action@v2.9.0
|
||||
|
||||
- name: Build with Gradle
|
||||
run: |
|
||||
echo ${{ secrets.SIGN_KEYSTORE_BASE64 }} | base64 -d > keystore.jks
|
||||
chmod +x ./gradlew
|
||||
./gradlew :app:assembleRelease --build-cache --parallel --daemon --warning-mode all --stacktrace
|
||||
echo "APK_FILE_ALL=$(find app/build/outputs/apk/app/release -name '*.apk')" >> $GITHUB_ENV
|
||||
echo "APK_FILE_ARM64=$(find app/build/outputs/apk/arm64/release -name '*.apk')" >> $GITHUB_ENV
|
||||
echo "APK_FILE_X86_64=$(find app/build/outputs/apk/x64/release -name '*.apk')" >> $GITHUB_ENV
|
||||
env:
|
||||
KEYSTORE_PATH: "../keystore.jks"
|
||||
KEYSTORE_PASSWORD: ${{ secrets.SIGN_KEYSTORE_PASSWORD }}
|
||||
KEY_ALIAS: ${{ secrets.SIGN_ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.SIGN_KEY_PASSWORD }}
|
||||
|
||||
- name: Install aapt
|
||||
run: sudo apt-get update && sudo apt-get install -y aapt
|
||||
|
||||
- name: Set Shamrock Version
|
||||
run: |
|
||||
apk_file=${{ env.APK_FILE_ALL }}
|
||||
apk_dump=$(aapt dump badging "$apk_file")
|
||||
version_name=$(sed -n "s/.*versionName='\([^']*\)'.*/\1/p" <<< "$apk_dump")
|
||||
echo "SHAMROCK_VERSION=$version_name" >> $GITHUB_ENV
|
||||
|
||||
- name: Show Artifacts SHA256
|
||||
run: |
|
||||
echo "### Build Success :rocket:" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|ABI|SHA256|" >> $GITHUB_STEP_SUMMARY
|
||||
echo "|:--------:|:----------|" >> $GITHUB_STEP_SUMMARY
|
||||
all=($(sha256sum ${{ env.APK_FILE_ALL }}))
|
||||
echo "|all|$all" >> $GITHUB_STEP_SUMMARY
|
||||
arm64=($(sha256sum ${{ env.APK_FILE_ARM64 }}))
|
||||
echo "|arm64|$arm64" >> $GITHUB_STEP_SUMMARY
|
||||
x86_64=($(sha256sum ${{ env.APK_FILE_X86_64 }}))
|
||||
echo "|x86_64|$x86_64" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Release
|
||||
uses: marvinpinto/action-automatic-releases@latest
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
automatic_release_tag: Shamrock v${{ env.SHAMROCK_VERSION }}
|
||||
files: |
|
||||
${{ env.APK_FILE_ALL }}
|
||||
${{ env.APK_FILE_ARM64 }}
|
||||
${{ env.APK_FILE_X86_64 }}
|
13
README.md
13
README.md
@ -10,16 +10,17 @@
|
||||
![][onebot-12]
|
||||
[![][license]](LICENSE)
|
||||
|
||||
[下载][download-link] | [部署][deploy-link] | [接口][api-link] | [文档][docs-link] | [加群][group-link]
|
||||
[下载][download-link] | [部署][deploy-link] | [接口][api-link] | [文档][docs-link]
|
||||
|
||||
</div>
|
||||
|
||||
## 简介
|
||||
|
||||
☘ 基于 Xposed 实现 OneBot 标准的 QQ 机器人框架,原作者[**fuqiuluo**](https://github.com/fuqiuluo)已脱离开发,接下来由白池接手哦!本项目为OpenShamrock,不会有任何收费行为,欢迎大家的加入!
|
||||
☘ 基于 Lsposed(**Non**-Riru) 实现 OneBot 标准的 QQ 机器人框架,原作者[**fuqiuluo**](https://github.com/fuqiuluo)已脱离开发,接下来由白池接手哦!本项目为OpenShamrock,不会有任何收费行为,欢迎大家的加入!
|
||||
|
||||
> 本项目仅提供学习与交流用途,请在24小时内删除。
|
||||
> 本项目目的是研究 Xposed 和 LSPosed 框架的使用。 Epic 框架开发相关知识。
|
||||
> Riru可能导致封禁,请减少使用。
|
||||
> 如有违反法律,请联系删除。
|
||||
> 请勿在任何平台宣传,宣扬,转发本项目,请勿恶意修改企业安装包造成相关企业产生损失,如有违背,必将追责到底。
|
||||
> 官方论坛,[点我直达](https://forum.libfekit.so/)!
|
||||
@ -29,8 +30,6 @@
|
||||
- 一键移植:本项目基于 go-cqhttp 的文档进行开发实现。
|
||||
- 平行部署:可多平台部署,未来将会支持 Docker 部署的教程。
|
||||
|
||||
> 若您追求小而轻便的Bot服务, [Chronocat](https://chronocat.vercel.app/)是您的不二之选。
|
||||
|
||||
## 权限声明
|
||||
|
||||
> 如出现未在此处声明的权限,请警惕 Shamrock 是否被修改/植入恶意代码
|
||||
@ -45,7 +44,7 @@
|
||||
|
||||
## 贡献说明
|
||||
|
||||
<img src="https://github.com/whitechi73/OpenShamrock/assets/98259561/f04d60bc-ec40-41fc-bc15-62c146f1a1f1" width="160px"> **我可爱吗?欢迎你的到来,这里是一个很大的地方,有着无限可能,主要是有你啦!**
|
||||
<img src="https://github.com/whitechi73/OpenShamrock/assets/98259561/f04d60bc-ec40-41fc-bc15-62c146f1a1f1" width="160px" alt="Shamrock"> **我可爱吗?欢迎你的到来,这里是一个很大的地方,有着无限可能,主要是有你啦!**
|
||||
|
||||
## 开源协议
|
||||
|
||||
@ -96,9 +95,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
[docs-link]: https://whitechi73.github.io/OpenShamrock/
|
||||
|
||||
[group-link]: https://whitechi73.github.io/OpenShamrock/group.html
|
||||
|
||||
[hook-system]: https://github.com/whitechi73/OpenShamrock/wiki/perm_hook_android
|
||||
[hook-system]: https://github.com/whitechi73/OpenShamrock/blob/master/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/loader/KeepAlive.kt
|
||||
|
||||
[voice-support]: https://whitechi73.github.io/OpenShamrock/advanced/voice.html
|
||||
|
||||
|
1
annotations/.gitignore
vendored
Normal file
1
annotations/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/build
|
9
annotations/build.gradle.kts
Normal file
9
annotations/build.gradle.kts
Normal file
@ -0,0 +1,9 @@
|
||||
plugins {
|
||||
id("java-library")
|
||||
id("org.jetbrains.kotlin.jvm")
|
||||
}
|
||||
|
||||
java {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
package moe.fuqiuluo.symbols
|
||||
|
||||
@Retention(AnnotationRetention.SOURCE)
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
annotation class OneBotHandler(
|
||||
val actionName: String,
|
||||
val alias: Array<String> = []
|
||||
)
|
13
annotations/src/main/java/moe/fuqiuluo/symbols/XposedHook.kt
Normal file
13
annotations/src/main/java/moe/fuqiuluo/symbols/XposedHook.kt
Normal file
@ -0,0 +1,13 @@
|
||||
package moe.fuqiuluo.symbols
|
||||
|
||||
enum class Process {
|
||||
ALL,
|
||||
MAIN,
|
||||
MSF
|
||||
}
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
annotation class XposedHook(
|
||||
val process: Process = Process.ALL,
|
||||
val priority: Int = 10
|
||||
)
|
@ -1,35 +1,29 @@
|
||||
import com.android.build.api.dsl.ApplicationExtension
|
||||
|
||||
fun gitCommitHash(): String {
|
||||
val builder = ProcessBuilder("git", "rev-parse", "--short", "HEAD")
|
||||
val process = builder.start()
|
||||
val reader = process.inputReader()
|
||||
val hash = reader.readText().trim()
|
||||
return if (hash.isNotEmpty()) ".$hash" else ""
|
||||
}
|
||||
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 {
|
||||
namespace = "moe.fuqiuluo.shamrock"
|
||||
ndkVersion = "25.1.8937393"
|
||||
compileSdk = 33
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "moe.fuqiuluo.shamrock"
|
||||
minSdk = 24
|
||||
targetSdk = 33
|
||||
versionCode = (System.currentTimeMillis() / 1000).toInt()
|
||||
versionName = "1.0.6-dev" + gitCommitHash()
|
||||
minSdk = 27
|
||||
targetSdk = 34
|
||||
versionCode = getVersionCode()
|
||||
versionName = "1.0.8" + ".r${getGitCommitCount()}." + getVersionName()
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables {
|
||||
useSupportLibrary = true
|
||||
}
|
||||
@Suppress("UnstableApiUsage")
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
cppFlags += ""
|
||||
@ -50,8 +44,7 @@ android {
|
||||
android.applicationVariants.all {
|
||||
outputs.map { it as com.android.build.gradle.internal.api.BaseVariantOutputImpl }
|
||||
.forEach {
|
||||
val abi = it.outputFileName.split("-")[1].split(".apk")[0]
|
||||
val abiName = when (abi) {
|
||||
val abiName = when (val abi = it.outputFileName.split("-")[1].split(".apk")[0]) {
|
||||
"app" -> "all"
|
||||
"x64" -> "x86_64"
|
||||
else -> abi
|
||||
@ -69,6 +62,7 @@ android {
|
||||
println("Full architecture and full compilation.")
|
||||
abiFilters.add("arm64-v8a")
|
||||
abiFilters.add("x86_64")
|
||||
abiFilters.add("x86")
|
||||
}
|
||||
}
|
||||
create("arm64") {
|
||||
@ -98,7 +92,7 @@ android {
|
||||
compose = true
|
||||
}
|
||||
composeOptions {
|
||||
kotlinCompilerExtensionVersion = "1.4.3"
|
||||
kotlinCompilerExtensionVersion = "1.5.4"
|
||||
}
|
||||
packaging {
|
||||
jniLibs {
|
||||
@ -133,6 +127,11 @@ android {
|
||||
}
|
||||
|
||||
configureAppSigningConfigsForRelease(project)
|
||||
packagingOptions {
|
||||
jniLibs {
|
||||
useLegacyPackaging = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun configureAppSigningConfigsForRelease(project: Project) {
|
||||
@ -154,15 +153,47 @@ fun configureAppSigningConfigsForRelease(project: Project) {
|
||||
release {
|
||||
signingConfig = signingConfigs.findByName("release")
|
||||
}
|
||||
debug {
|
||||
signingConfig = signingConfigs.findByName("release")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getGitCommitCount(): Int {
|
||||
val out = ByteArrayOutputStream()
|
||||
exec {
|
||||
commandLine("git", "rev-list", "--count", "HEAD")
|
||||
standardOutput = out
|
||||
}
|
||||
return out.toString().trim().toInt()
|
||||
}
|
||||
|
||||
fun getGitCommitHash(): String {
|
||||
val out = ByteArrayOutputStream()
|
||||
exec {
|
||||
commandLine("git", "rev-parse", "--short", "HEAD")
|
||||
standardOutput = out
|
||||
}
|
||||
return out.toString().trim()
|
||||
}
|
||||
|
||||
fun getVersionCode(): Int {
|
||||
return (System.currentTimeMillis() / 1000L).toInt()
|
||||
}
|
||||
|
||||
fun getVersionName(): String {
|
||||
return getGitCommitHash()
|
||||
}
|
||||
|
||||
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")
|
||||
@ -171,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")
|
||||
|
@ -3,10 +3,6 @@
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<application
|
||||
android:name=".app.MyApplication"
|
||||
@ -18,6 +14,7 @@
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.Shamrock"
|
||||
android:zygotePreloadName="@string/app_name"
|
||||
android:multiArch="true"
|
||||
tools:targetApi="31">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
@ -34,7 +31,7 @@
|
||||
|
||||
<provider
|
||||
android:name=".ui.service.internal.MultifunctionalProvider"
|
||||
android:authorities="moe.fuqiuluo.xqbot.provider"
|
||||
android:authorities="moe.fuqiuluo.108.provider"
|
||||
android:exported="true"
|
||||
android:grantUriPermissions="true"
|
||||
tools:ignore="ExportedContentProvider" />
|
||||
@ -47,7 +44,7 @@
|
||||
android:value="基于 Xposed 实现 OneBot 标准的 QQ 机器人框架" />
|
||||
<meta-data
|
||||
android:name="xposedminversion"
|
||||
android:value="23" />
|
||||
android:value="93" />
|
||||
<meta-data
|
||||
android:name="xposedscope"
|
||||
android:resource="@array/xposed_scope" />
|
||||
|
@ -9,52 +9,61 @@ inline void replace_string(std::string& str, const std::string& from, const std:
|
||||
}
|
||||
}
|
||||
|
||||
inline int utf8_next_len(const std::string& str, size_t offset)
|
||||
{
|
||||
uint8_t c = (uint8_t)str[offset];
|
||||
if (c >= 0xFC)
|
||||
return 6;
|
||||
else if (c >= 0xF8)
|
||||
return 5;
|
||||
else if (c >= 0xF0)
|
||||
return 4;
|
||||
else if (c >= 0xE0)
|
||||
return 3;
|
||||
else if (c >= 0xC0)
|
||||
return 2;
|
||||
else if (c > 0x00)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void decode_cqcode(const std::string& code, std::vector<std::unordered_map<std::string, std::string>>& dest) {
|
||||
std::string cache;
|
||||
bool is_start = false;
|
||||
std::string key_tmp;
|
||||
std::unordered_map<std::string, std::string> kv;
|
||||
for(int i = 0; i < code.size(); i++) {
|
||||
auto c = code[i];
|
||||
if (c == '[') {
|
||||
for(size_t i = 0; i < code.size(); i++) {
|
||||
int utf8_char_len = utf8_next_len(code, i);
|
||||
if(utf8_char_len == 0) {
|
||||
continue;
|
||||
}
|
||||
std::string_view c(&code[i],utf8_char_len);
|
||||
if (c == "[") {
|
||||
if (is_start) {
|
||||
throw illegal_code();
|
||||
} else {
|
||||
if (!cache.empty()) {
|
||||
std::unordered_map<std::string, std::string> kv;
|
||||
replace_string(cache, "[", "[");
|
||||
replace_string(cache, "]", "]");
|
||||
replace_string(cache, "&", "&");
|
||||
kv.emplace("_type", "text");
|
||||
kv.emplace("text", cache);
|
||||
dest.push_back(kv);
|
||||
cache.clear();
|
||||
}
|
||||
auto c1 = code[i + 1];
|
||||
if (c1 == 'C') {
|
||||
i++;
|
||||
auto c2 = code[i + 1];
|
||||
if(c2 == 'Q') {
|
||||
i++;
|
||||
auto c3 = code[i + 1];
|
||||
if (c3 == ':') {
|
||||
i++;
|
||||
is_start = true;
|
||||
} else {
|
||||
cache += c;
|
||||
cache += c1;
|
||||
cache += c2;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
cache += c;
|
||||
cache += c1;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
std::string_view cq_flag(&code[i],4);
|
||||
if(cq_flag == "[CQ:"){
|
||||
is_start = true;
|
||||
i += 3;
|
||||
}else{
|
||||
cache += c;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (c == '=') {
|
||||
else if (c == "=") {
|
||||
if (is_start) {
|
||||
if (cache.empty()) {
|
||||
throw illegal_code();
|
||||
@ -70,17 +79,17 @@ void decode_cqcode(const std::string& code, std::vector<std::unordered_map<std::
|
||||
cache += c;
|
||||
}
|
||||
}
|
||||
else if (c == ',') {
|
||||
else if (c == ",") {
|
||||
if (is_start) {
|
||||
if (kv.count("_type") == 0 && !cache.empty()) {
|
||||
kv.emplace("_type", cache);
|
||||
cache.clear();
|
||||
} else {
|
||||
if (!key_tmp.empty()) {
|
||||
replace_string(cache, "&", "&");
|
||||
replace_string(cache, "[", "[");
|
||||
replace_string(cache, "]", "]");
|
||||
replace_string(cache, ",", ",");
|
||||
replace_string(cache, "&", "&");
|
||||
kv.emplace(key_tmp, cache);
|
||||
cache.clear();
|
||||
key_tmp.clear();
|
||||
@ -90,15 +99,17 @@ void decode_cqcode(const std::string& code, std::vector<std::unordered_map<std::
|
||||
cache += c;
|
||||
}
|
||||
}
|
||||
else if (c == ']') {
|
||||
else if (c == "]") {
|
||||
if (is_start) {
|
||||
if (!cache.empty()) {
|
||||
if (!key_tmp.empty()) {
|
||||
replace_string(cache, "&", "&");
|
||||
replace_string(cache, "[", "[");
|
||||
replace_string(cache, "]", "]");
|
||||
replace_string(cache, ",", ",");
|
||||
replace_string(cache, "&", "&");
|
||||
kv.emplace(key_tmp, cache);
|
||||
} else {
|
||||
kv.emplace("_type", cache);
|
||||
}
|
||||
dest.push_back(kv);
|
||||
kv.clear();
|
||||
@ -112,10 +123,14 @@ void decode_cqcode(const std::string& code, std::vector<std::unordered_map<std::
|
||||
}
|
||||
else {
|
||||
cache += c;
|
||||
i += (utf8_char_len - 1);
|
||||
}
|
||||
}
|
||||
if (!cache.empty()) {
|
||||
std::unordered_map<std::string, std::string> kv;
|
||||
replace_string(cache, "[", "[");
|
||||
replace_string(cache, "]", "]");
|
||||
replace_string(cache, "&", "&");
|
||||
kv.emplace("_type", "text");
|
||||
kv.emplace("text", cache);
|
||||
dest.push_back(kv);
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_moe_fuqiuluo_shamrock_xposed_actions_PullConfig_testNativeLibrary(JNIEnv *env, jobject thiz) {
|
||||
Java_moe_fuqiuluo_shamrock_xposed_hooks_PullConfig_testNativeLibrary(JNIEnv *env, jobject thiz) {
|
||||
return env->NewStringUTF("加载Shamrock库成功~");
|
||||
}
|
||||
|
||||
@ -37,6 +37,26 @@ Java_moe_fuqiuluo_shamrock_utils_MD5_genFileMd5Hex(JNIEnv *env, jobject thiz, js
|
||||
return env->NewStringUTF(md5Hex.c_str());
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jbyteArray JNICALL
|
||||
Java_moe_fuqiuluo_shamrock_utils_MD5_genFileMd5(JNIEnv *env, jobject thiz, jstring file_path) {
|
||||
auto cPathStr = env->GetStringUTFChars(file_path, nullptr);
|
||||
std::filesystem::path filePath(cPathStr);
|
||||
if (!std::filesystem::exists(filePath)) {
|
||||
jclass exClass = env->FindClass("java/io/FileNotFoundException");
|
||||
env->ThrowNew(exClass, "目标文件不存在");
|
||||
env->DeleteLocalRef(exClass);
|
||||
return nullptr;
|
||||
}
|
||||
auto file = std::ifstream(filePath.c_str(), std::ios::binary);
|
||||
MD5 md5;
|
||||
md5.update(file);
|
||||
auto md5Bytes = md5.digest();
|
||||
auto jByteArray = env->NewByteArray(16);
|
||||
env->SetByteArrayRegion(jByteArray, 0, 16, reinterpret_cast<const jbyte*>(md5Bytes));
|
||||
return jByteArray;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_moe_fuqiuluo_shamrock_utils_MD5_getMd5Hex(JNIEnv *env, jobject thiz, jbyteArray bytes) {
|
||||
|
@ -52,6 +52,7 @@ import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.shadow
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.compose.ui.res.painterResource
|
||||
@ -84,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
|
||||
@ -120,6 +122,7 @@ private fun AppMainView() {
|
||||
val coreVersion = remember { mutableStateOf(getShamrockVersion(context)) }
|
||||
val coreName = remember { mutableStateOf("Xposed") }
|
||||
val voiceSwitch = remember { mutableStateOf(false) }
|
||||
@Suppress("LocalVariableName") val LocalString = LocalString.init()
|
||||
|
||||
if (!AppRuntime.isInit) {
|
||||
AppRuntime.state = remember {
|
||||
@ -140,23 +143,22 @@ private fun AppMainView() {
|
||||
mutableStateOf("2854200454")
|
||||
}
|
||||
it.nick = remember {
|
||||
mutableStateOf("测试昵称")
|
||||
mutableStateOf(LocalString.testName)
|
||||
}
|
||||
}
|
||||
|
||||
AppRuntime.requestCount = remember { mutableIntStateOf(0) }
|
||||
|
||||
AppRuntime.isInit = false
|
||||
AppRuntime.isInit = true
|
||||
}
|
||||
|
||||
val ctx = LocalContext.current
|
||||
@Suppress("LocalVariableName") val LocalString = LocalString
|
||||
LaunchedEffect(isFined.value) {
|
||||
if (isFined.value) {
|
||||
AppRuntime.log("日志框架激活成功,开放操作许可。")
|
||||
AppRuntime.log(LocalString.logCentralLoadSuccessfully)
|
||||
Toast.makeText(ctx, LocalString.frameworkYes, Toast.LENGTH_SHORT).show()
|
||||
} else {
|
||||
AppRuntime.log("日志框架处于未激活状态,请检查。")
|
||||
AppRuntime.log(LocalString.logCentralLoadFailed)
|
||||
Toast.makeText(ctx, LocalString.frameworkNo, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
@ -224,6 +224,16 @@ object ShamrockConfig {
|
||||
preferences.edit().putBoolean("debug", v).apply()
|
||||
}
|
||||
|
||||
fun isAntiTrace(ctx: Context): Boolean {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
return preferences.getBoolean("anti_qq_trace", true)
|
||||
}
|
||||
|
||||
fun setAntiTrace(ctx: Context, v: Boolean) {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
preferences.edit().putBoolean("anti_qq_trace", v).apply()
|
||||
}
|
||||
|
||||
fun isInjectPacket(ctx: Context): Boolean {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
return preferences.getBoolean("inject_packet", false)
|
||||
@ -239,6 +249,16 @@ object ShamrockConfig {
|
||||
return preferences.getBoolean("enable_auto_start", false)
|
||||
}
|
||||
|
||||
fun disableAutoSyncSetting(ctx: Context): Boolean {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
return preferences.getBoolean("disable_auto_sync_setting", false)
|
||||
}
|
||||
|
||||
fun enableAliveReply(ctx: Context): Boolean {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
return preferences.getBoolean("alive_reply", false)
|
||||
}
|
||||
|
||||
fun allowShell(ctx: Context): Boolean {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
return preferences.getBoolean("shell", false)
|
||||
@ -249,6 +269,16 @@ object ShamrockConfig {
|
||||
preferences.edit().putBoolean("enable_auto_start", v).apply()
|
||||
}
|
||||
|
||||
fun setDisableAutoSyncSetting(ctx: Context, v: Boolean) {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
preferences.edit().putBoolean("disable_auto_sync_setting", v).apply()
|
||||
}
|
||||
|
||||
fun setAliveReply(ctx: Context, v: Boolean) {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
preferences.edit().putBoolean("alive_reply", v).apply()
|
||||
}
|
||||
|
||||
fun setShellStatus(ctx: Context, v: Boolean) {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
preferences.edit().putBoolean("shell", v).apply()
|
||||
@ -259,19 +289,19 @@ object ShamrockConfig {
|
||||
return preferences.getBoolean("enable_self_msg", false)
|
||||
}
|
||||
|
||||
fun enableSyncMsgAsSentMsg(ctx: Context): Boolean {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
return preferences.getBoolean("enable_sync_msg_as_sent_msg", false)
|
||||
}
|
||||
|
||||
fun setEnableSelfMsg(ctx: Context, v: Boolean) {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
preferences.edit().putBoolean("enable_self_msg", v).apply()
|
||||
}
|
||||
|
||||
fun isEchoNumber(ctx: Context): Boolean {
|
||||
fun setEnableSyncMsgAsSentMsg(ctx: Context, v: Boolean) {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
return preferences.getBoolean("echo_number", false)
|
||||
}
|
||||
|
||||
fun setEchoNumber(ctx: Context, v: Boolean) {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
preferences.edit().putBoolean("echo_number", v).apply()
|
||||
preferences.edit().putBoolean("enable_sync_msg_as_sent_msg", v).apply()
|
||||
}
|
||||
|
||||
fun getConfigMap(ctx: Context): Map<String, Any?> {
|
||||
@ -293,12 +323,16 @@ object ShamrockConfig {
|
||||
"ssl_pwd" to preferences.getString("ssl_pwd", ""),
|
||||
"inject_packet" to preferences.getBoolean("inject_packet", false),
|
||||
"debug" to preferences.getBoolean("debug", false),
|
||||
"auto_clear" to preferences.getBoolean("auto_clear", false),
|
||||
"anti_qq_trace" to preferences.getBoolean("anti_qq_trace", true),
|
||||
//"auto_clear" to preferences.getBoolean("auto_clear", false),
|
||||
"ssl_private_pwd" to preferences.getString("ssl_private_pwd", ""),
|
||||
"key_store" to preferences.getString("key_store", ""),
|
||||
"enable_self_msg" to preferences.getBoolean("enable_self_msg", false),
|
||||
"echo_number" to preferences.getBoolean("echo_number", false),
|
||||
"shell" to preferences.getBoolean("shell", false),
|
||||
"alive_reply" to preferences.getBoolean("alive_reply", false),
|
||||
"enable_sync_msg_as_sent_msg" to preferences.getBoolean("enable_sync_msg_as_sent_msg", false),
|
||||
"disable_auto_sync_setting" to preferences.getBoolean("disable_auto_sync_setting", false),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,7 @@ import moe.fuqiuluo.shamrock.ui.app.AppRuntime
|
||||
import moe.fuqiuluo.shamrock.ui.app.Level
|
||||
import moe.fuqiuluo.shamrock.ui.app.ShamrockConfig
|
||||
import moe.fuqiuluo.shamrock.ui.theme.GlobalColor
|
||||
import moe.fuqiuluo.shamrock.ui.theme.LocalString
|
||||
import moe.fuqiuluo.shamrock.ui.theme.ThemeColor
|
||||
import moe.fuqiuluo.shamrock.ui.tools.InputDialog
|
||||
|
||||
@ -70,7 +71,7 @@ fun DashboardFragment(
|
||||
AccountCard(nick, uin)
|
||||
InformationCard(ctx)
|
||||
APIInfoCard(ctx)
|
||||
FunctionCard(scope, ctx, "功能设置")
|
||||
FunctionCard(scope, ctx, LocalString.functionSetting)
|
||||
SSLCard(ctx)
|
||||
}
|
||||
}
|
||||
@ -80,7 +81,7 @@ private fun SSLCard(ctx: Context) {
|
||||
ActionBox(
|
||||
modifier = Modifier.padding(top = 12.dp),
|
||||
painter = painterResource(id = R.drawable.baseline_security_24),
|
||||
title = "SSL配置"
|
||||
title = LocalString.sslSetting
|
||||
) {
|
||||
Column {
|
||||
Divider(
|
||||
@ -277,9 +278,7 @@ private fun APIInfoCard(
|
||||
text = authToken,
|
||||
hint = "请填写鉴权token",
|
||||
error = "输入的参数不合法",
|
||||
checker = {
|
||||
it.length in 0 .. 36
|
||||
},
|
||||
checker = { true },
|
||||
confirm = {
|
||||
ShamrockConfig.setToken(ctx, authToken.value)
|
||||
AppRuntime.log("设置鉴权Token为[${authToken.value}]。")
|
||||
|
@ -1,6 +1,6 @@
|
||||
package moe.fuqiuluo.shamrock.ui.fragment
|
||||
|
||||
import android.widget.Toast
|
||||
import android.content.Context
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.absolutePadding
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
@ -22,6 +22,7 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import moe.fuqiuluo.shamrock.R
|
||||
import moe.fuqiuluo.shamrock.ui.app.AppRuntime
|
||||
import moe.fuqiuluo.shamrock.ui.app.Level
|
||||
import moe.fuqiuluo.shamrock.ui.app.ShamrockConfig
|
||||
import moe.fuqiuluo.shamrock.ui.theme.GlobalColor
|
||||
import moe.fuqiuluo.shamrock.ui.theme.LocalString
|
||||
@ -46,10 +47,11 @@ fun LabFragment() {
|
||||
}
|
||||
NoticeTextDialog(
|
||||
openDialog = showNoticeDialog,
|
||||
title = "温馨提示",
|
||||
text = "实验室功能会导致一些奇怪的问题,请谨慎使用!"
|
||||
title = LocalString.warnTitle,
|
||||
text = LocalString.labWarning
|
||||
)
|
||||
|
||||
val LocalString = LocalString
|
||||
ActionBox(
|
||||
modifier = Modifier.padding(top = 12.dp),
|
||||
painter = painterResource(id = R.drawable.baseline_preview_24),
|
||||
@ -63,19 +65,19 @@ fun LabFragment() {
|
||||
)
|
||||
|
||||
Function(
|
||||
title = "中二病模式",
|
||||
desc = "也许会导致奇怪的问题,大抵就是你看不懂罢了。",
|
||||
title = LocalString.b2Mode,
|
||||
desc = LocalString.b2ModeDesc,
|
||||
descColor = it,
|
||||
isSwitch = ShamrockConfig.is2B(ctx)
|
||||
) {
|
||||
ShamrockConfig.set2B(ctx, it)
|
||||
scope.toast(ctx, "重启生效哦!")
|
||||
scope.toast(ctx, LocalString.restartToast)
|
||||
return@Function true
|
||||
}
|
||||
|
||||
Function(
|
||||
title = "显示调试日志",
|
||||
desc = "会导致日志刷屏。",
|
||||
title = LocalString.showDebugLog,
|
||||
desc = LocalString.showDebugLogDesc,
|
||||
descColor = it,
|
||||
isSwitch = ShamrockConfig.isDebug(ctx)
|
||||
) {
|
||||
@ -89,8 +91,103 @@ fun LabFragment() {
|
||||
ActionBox(
|
||||
modifier = Modifier.padding(top = 12.dp),
|
||||
painter = painterResource(id = R.drawable.round_logo_dev_24),
|
||||
title = "实验功能"
|
||||
) {
|
||||
title = "基础设置"
|
||||
) { color ->
|
||||
Column {
|
||||
Divider(
|
||||
modifier = Modifier,
|
||||
color = GlobalColor.Divider,
|
||||
thickness = 0.2.dp
|
||||
)
|
||||
|
||||
/*
|
||||
Function(
|
||||
title = "自动清理QQ垃圾",
|
||||
desc = "也许会导致奇怪的问题(无效)。",
|
||||
descColor = color,
|
||||
isSwitch = ShamrockConfig.isAutoClean(ctx)
|
||||
) {
|
||||
ShamrockConfig.setAutoClean(ctx, it)
|
||||
ShamrockConfig.pushUpdate(ctx)
|
||||
return@Function false
|
||||
}*/
|
||||
|
||||
Function(
|
||||
title = "自回复测试",
|
||||
desc = "发送[ping],机器人发送一个具有调试信息的返回。",
|
||||
descColor = color,
|
||||
isSwitch = ShamrockConfig.enableAliveReply(ctx)
|
||||
) {
|
||||
ShamrockConfig.setAliveReply(ctx, it)
|
||||
return@Function true
|
||||
}
|
||||
|
||||
Function(
|
||||
title = "开启Shell接口",
|
||||
desc = "可能导致设备被入侵,请勿随意开启。",
|
||||
descColor = color,
|
||||
isSwitch = ShamrockConfig.allowShell(ctx)
|
||||
) {
|
||||
ShamrockConfig.setShellStatus(ctx, it)
|
||||
return@Function true
|
||||
}
|
||||
|
||||
Function(
|
||||
title = "自动唤醒QQ",
|
||||
desc = "QQ进程死亡时重新打开QQ进程,前提本进程存活。",
|
||||
descColor = color,
|
||||
isSwitch = ShamrockConfig.enableAutoStart(ctx)
|
||||
) {
|
||||
ShamrockConfig.setAutoStart(ctx, it)
|
||||
return@Function true
|
||||
}
|
||||
|
||||
Function(
|
||||
title = "禁止Shamrock同步设置",
|
||||
desc = "禁止Shamrock同步设置,防止恢复手动修改后的配置文件。",
|
||||
descColor = color,
|
||||
isSwitch = ShamrockConfig.disableAutoSyncSetting(ctx)
|
||||
) {
|
||||
ShamrockConfig.setDisableAutoSyncSetting(ctx, it)
|
||||
return@Function true
|
||||
}
|
||||
|
||||
kotlin.runCatching {
|
||||
ctx.getSharedPreferences("shared_config", Context.MODE_WORLD_READABLE)
|
||||
}.onSuccess {
|
||||
Function(
|
||||
title = LocalString.persistentText,
|
||||
desc = LocalString.persistentTextDesc,
|
||||
descColor = color,
|
||||
isSwitch = it.getBoolean("persistent", false)
|
||||
) { v ->
|
||||
it.edit().putBoolean("persistent", v).apply()
|
||||
scope.toast(ctx, LocalString.restartSysToast)
|
||||
return@Function true
|
||||
}
|
||||
|
||||
Function(
|
||||
title = "禁用Doze模式",
|
||||
desc = "禁止系统进入节能模式。",
|
||||
descColor = color,
|
||||
isSwitch = it.getBoolean("hook_doze", false)
|
||||
) { value ->
|
||||
it.edit().putBoolean("hook_doze", value).apply()
|
||||
scope.toast(ctx, LocalString.restartSysToast)
|
||||
return@Function true
|
||||
}
|
||||
}.onFailure {
|
||||
AppRuntime.log("无法启用附加选项,LSPosed模块未激活或者不支持XSharedPreferences", Level.WARN)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ActionBox(
|
||||
modifier = Modifier.padding(top = 12.dp),
|
||||
painter = painterResource(id = R.drawable.sharp_lock_24),
|
||||
title = "安全性设置"
|
||||
) { color ->
|
||||
Column {
|
||||
Divider(
|
||||
modifier = Modifier,
|
||||
@ -99,20 +196,9 @@ fun LabFragment() {
|
||||
)
|
||||
|
||||
Function(
|
||||
title = "自动清理QQ垃圾",
|
||||
desc = "也许会导致奇怪的问题(无效)。",
|
||||
descColor = it,
|
||||
isSwitch = ShamrockConfig.isAutoClean(ctx)
|
||||
) {
|
||||
ShamrockConfig.setAutoClean(ctx, it)
|
||||
ShamrockConfig.pushUpdate(ctx)
|
||||
return@Function false
|
||||
}
|
||||
|
||||
Function(
|
||||
title = "拦截QQ无用收包",
|
||||
desc = "测试阶段,可能导致网络异常或掉线。",
|
||||
descColor = it,
|
||||
title = LocalString.injectPacket,
|
||||
desc = LocalString.injectPacketDesc,
|
||||
descColor = color,
|
||||
isSwitch = ShamrockConfig.isInjectPacket(ctx)
|
||||
) {
|
||||
ShamrockConfig.setInjectPacket(ctx, it)
|
||||
@ -121,26 +207,31 @@ fun LabFragment() {
|
||||
}
|
||||
|
||||
Function(
|
||||
title = "自动唤醒QQ",
|
||||
desc = "QQ进程死亡时重新打开QQ进程,前提本进程存活。",
|
||||
descColor = it,
|
||||
isSwitch = ShamrockConfig.enableAutoStart(ctx)
|
||||
title = LocalString.antiTrace,
|
||||
desc = LocalString.antiTraceDesc,
|
||||
descColor = color,
|
||||
isSwitch = ShamrockConfig.isAntiTrace(ctx)
|
||||
) {
|
||||
ShamrockConfig.setAutoStart(ctx, it)
|
||||
ShamrockConfig.setAntiTrace(ctx, it)
|
||||
ShamrockConfig.pushUpdate(ctx)
|
||||
return@Function true
|
||||
}
|
||||
|
||||
Function(
|
||||
title = "开启Shell接口",
|
||||
desc = "可能导致设备被入侵,请勿随意开启。",
|
||||
descColor = it,
|
||||
isSwitch = ShamrockConfig.allowShell(ctx)
|
||||
) {
|
||||
ShamrockConfig.setShellStatus(ctx, it)
|
||||
return@Function true
|
||||
kotlin.runCatching {
|
||||
ctx.getSharedPreferences("shared_config", Context.MODE_WORLD_READABLE)
|
||||
}.onSuccess {
|
||||
Function(
|
||||
title = "反检测加强",
|
||||
desc = "可能导致某些设备频繁闪退",
|
||||
descColor = color,
|
||||
isSwitch = it.getBoolean("super_anti", false)
|
||||
) { v ->
|
||||
it.edit().putBoolean("super_anti", v).apply()
|
||||
scope.toast(ctx, LocalString.restartToast)
|
||||
return@Function true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ActionBox(
|
||||
@ -161,7 +252,11 @@ fun LabFragment() {
|
||||
descColor = it,
|
||||
isSwitch = AppRuntime.state.supportVoice.value
|
||||
) {
|
||||
if(AppRuntime.state.supportVoice.value) {
|
||||
scope.toast(ctx, "关闭请手动删除文件。")
|
||||
} else {
|
||||
scope.toast(ctx, "请按照Github提示手动操作。")
|
||||
}
|
||||
return@Function false
|
||||
}
|
||||
}
|
||||
@ -190,6 +285,17 @@ fun LabFragment() {
|
||||
return@Function true
|
||||
}
|
||||
|
||||
Function(
|
||||
title = "同步消息推送类型异换",
|
||||
desc = "推送来自同号异设备消息,将同步消息作为自发消息推送。",
|
||||
descColor = it,
|
||||
isSwitch = ShamrockConfig.enableSyncMsgAsSentMsg(ctx)
|
||||
) {
|
||||
ShamrockConfig.setEnableSyncMsgAsSentMsg(ctx, it)
|
||||
ShamrockConfig.pushUpdate(ctx)
|
||||
return@Function true
|
||||
}
|
||||
|
||||
/*
|
||||
Function(
|
||||
title = "使用纯数字ECHO",
|
||||
|
@ -7,7 +7,7 @@ import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import androidx.core.content.ContextCompat.startActivity
|
||||
import io.ktor.client.request.get
|
||||
import io.ktor.client.request.header
|
||||
import io.ktor.client.request.parameter
|
||||
import io.ktor.client.request.url
|
||||
import io.ktor.client.statement.bodyAsText
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@ -16,9 +16,9 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.serialization.json.Json
|
||||
import moe.fuqiuluo.shamrock.remote.entries.CommonResult
|
||||
import moe.fuqiuluo.shamrock.remote.entries.CurrentAccount
|
||||
import moe.fuqiuluo.shamrock.remote.entries.Status
|
||||
import moe.fuqiuluo.shamrock.remote.structures.CommonResult
|
||||
import moe.fuqiuluo.shamrock.remote.structures.CurrentAccount
|
||||
import moe.fuqiuluo.shamrock.remote.structures.Status
|
||||
import moe.fuqiuluo.shamrock.tools.GlobalClient
|
||||
import moe.fuqiuluo.shamrock.ui.app.AppRuntime.AccountInfo
|
||||
import moe.fuqiuluo.shamrock.ui.app.AppRuntime.log
|
||||
@ -58,7 +58,8 @@ object DashboardInitializer {
|
||||
url("http://127.0.0.1:$servicePort/get_account_info")
|
||||
val token = ShamrockConfig.getToken(context)
|
||||
if (token.isNotBlank()) {
|
||||
header("Authorization", "Bearer $token")
|
||||
//header("Authorization", "Bearer $token")
|
||||
parameter("access_token", token)
|
||||
}
|
||||
}.let {
|
||||
if (it.status == HttpStatusCode.OK) {
|
||||
|
@ -6,7 +6,9 @@ package moe.fuqiuluo.shamrock.ui.theme
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.ReadOnlyComposable
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import moe.fuqiuluo.shamrock.R
|
||||
|
||||
private val LocalStringDefault = Default()
|
||||
@ -69,6 +71,24 @@ private open class Chūnibyō: Default() {
|
||||
"执明起,至除免于灾祸。\n" +
|
||||
"元冥浩浩,非凡不可动之。"
|
||||
labWarning = "寒酥降矣,梅熟日久,莫不可测。"
|
||||
logTitle = "无极"
|
||||
testName = "未名之人"
|
||||
logCentralLoadSuccessfully = "无极开,天地始纷争。"
|
||||
logCentralLoadFailed = "无极闭,天地始归宁。"
|
||||
functionSetting = "天地法则"
|
||||
sslSetting = "天行御令"
|
||||
warnTitle = "仙人指路"
|
||||
b2Mode = "通仙之路"
|
||||
b2ModeDesc = "凡人勿近"
|
||||
restartToast = "复关喏哉!"
|
||||
showDebugLog = "窥探天机"
|
||||
showDebugLogDesc = "迷失自我,走火入魔"
|
||||
antiTrace = "鬼影迷踪"
|
||||
antiTraceDesc = "唐门绝学,已有取死之道"
|
||||
injectPacket = "遮匿无用之禀"
|
||||
injectPacketDesc = "试于试之,逆则魂飞魄散"
|
||||
persistentText = "丹书铁券"
|
||||
persistentTextDesc = "由天地之起也,须复动之。"
|
||||
}
|
||||
}
|
||||
|
||||
@ -84,7 +104,25 @@ private open class Default: VarString(
|
||||
"同时声明本项目仅用于学习与交流,请于24小时内删除。\n" +
|
||||
"同时开源贡献者均享受免责条例。",
|
||||
labWarning = "实验室功能,可能会导致出乎意料的BUG!",
|
||||
"日志"
|
||||
logTitle = "日志",
|
||||
testName = "测试昵称",
|
||||
logCentralLoadSuccessfully = "日志框架激活成功,开放操作许可。",
|
||||
logCentralLoadFailed = "日志框架处于未激活状态,请检查。",
|
||||
functionSetting = "功能设置",
|
||||
sslSetting = "SSL配置",
|
||||
warnTitle = "温馨提示",
|
||||
b2Mode = "中二病模式",
|
||||
b2ModeDesc = "也许会导致奇怪的问题,大抵就是你看不懂罢了。",
|
||||
restartToast = "重启生效哦!",
|
||||
restartSysToast = "重启系统生效哦!",
|
||||
showDebugLog = "显示调试日志",
|
||||
showDebugLogDesc = "会导致日志刷屏。",
|
||||
antiTrace = "防止调用栈检测",
|
||||
antiTraceDesc = "防止QQ进行堆栈跟踪检测,需要重新启动QQ。",
|
||||
injectPacket = "拦截QQ无用收包",
|
||||
injectPacketDesc = "测试阶段,可能导致网络异常或掉线。",
|
||||
persistentText = "免死金牌",
|
||||
persistentTextDesc = "由系统复活QQ和Shamrock,需要重新启动系统。"
|
||||
)
|
||||
|
||||
open class VarString(
|
||||
@ -99,5 +137,43 @@ open class VarString(
|
||||
|
||||
var labWarning: String,
|
||||
|
||||
var logTitle: String
|
||||
)
|
||||
var logTitle: String,
|
||||
|
||||
var testName: String,
|
||||
|
||||
var logCentralLoadSuccessfully: String,
|
||||
var logCentralLoadFailed: String,
|
||||
|
||||
var functionSetting: String,
|
||||
var sslSetting: String,
|
||||
|
||||
var warnTitle: String,
|
||||
|
||||
var b2Mode: String,
|
||||
var b2ModeDesc: String,
|
||||
|
||||
var restartToast: String,
|
||||
var restartSysToast: String,
|
||||
|
||||
var showDebugLog: String,
|
||||
var showDebugLogDesc: String,
|
||||
|
||||
var antiTrace: String,
|
||||
var antiTraceDesc: String,
|
||||
|
||||
var injectPacket: String,
|
||||
var injectPacketDesc: String,
|
||||
|
||||
var persistentText: String,
|
||||
var persistentTextDesc: String
|
||||
) {
|
||||
private var inited = false
|
||||
|
||||
@Composable
|
||||
fun init(): VarString {
|
||||
if (inited) return this
|
||||
|
||||
inited = true
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
5
app/src/main/res/drawable/sharp_lock_24.xml
Normal file
5
app/src/main/res/drawable/sharp_lock_24.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#9D9D9D"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M20,8h-3L17,6.21c0,-2.61 -1.91,-4.94 -4.51,-5.19C9.51,0.74 7,3.08 7,6v2L4,8v14h16L20,8zM12,17c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM9,8L9,6c0,-1.66 1.34,-3 3,-3s3,1.34 3,3v2L9,8z"/>
|
||||
</vector>
|
@ -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.1.2" apply false
|
||||
id("org.jetbrains.kotlin.android") version "1.8.10" apply false
|
||||
id("com.android.library") version "8.1.2" apply false
|
||||
//id("io.realm.kotlin") version "1.11.0" apply false
|
||||
}
|
||||
id("com.android.application") version "8.2.0" apply false
|
||||
id("org.jetbrains.kotlin.android") version "1.9.20" apply false
|
||||
id("com.android.library") version "8.2.0" apply false
|
||||
}
|
||||
|
10
buildSrc/build.gradle.kts
Normal file
10
buildSrc/build.gradle.kts
Normal file
@ -0,0 +1,10 @@
|
||||
plugins {
|
||||
kotlin("jvm") version "1.9.21"
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
}
|
26
buildSrc/src/main/kotlin/Dependencies.kt
Normal file
26
buildSrc/src/main/kotlin/Dependencies.kt
Normal 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"
|
||||
}
|
@ -21,4 +21,6 @@ kotlin.code.style=official
|
||||
# resources declared in the library itself and none from the library's dependencies,
|
||||
# thereby reducing the size of the R class for that library
|
||||
android.nonTransitiveRClass=true
|
||||
android.default.buildFeatures.aidl=true
|
||||
android.default.buildFeatures.aidl=true
|
||||
kotlin.experimental.tryK2=true
|
||||
ksp.incremental=false
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,7 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
|
3
gradlew
vendored
3
gradlew
vendored
@ -83,7 +83,8 @@ done
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
|
1
processor/.gitignore
vendored
Normal file
1
processor/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/build
|
18
processor/build.gradle.kts
Normal file
18
processor/build.gradle.kts
Normal 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")
|
||||
}
|
0
processor/consumer-rules.pro
Normal file
0
processor/consumer-rules.pro
Normal file
21
processor/proguard-rules.pro
vendored
Normal file
21
processor/proguard-rules.pro
vendored
Normal 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
|
4
processor/src/main/AndroidManifest.xml
Normal file
4
processor/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
@ -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(it.packageName.asString(), 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,111 @@
|
||||
@file:Suppress("UNCHECKED_CAST", "LocalVariableName", "PrivatePropertyName")
|
||||
@file:OptIn(KspExperimental::class)
|
||||
|
||||
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.ClassName
|
||||
import com.squareup.kotlinpoet.FileSpec
|
||||
import com.squareup.kotlinpoet.FunSpec
|
||||
import moe.fuqiuluo.symbols.Process
|
||||
import moe.fuqiuluo.symbols.XposedHook
|
||||
|
||||
class XposedHookProcessor(
|
||||
private val codeGenerator: CodeGenerator,
|
||||
private val logger: KSPLogger
|
||||
): SymbolProcessor {
|
||||
override fun process(resolver: Resolver): List<KSAnnotated> {
|
||||
val symbols = resolver.getSymbolsWithAnnotation(XposedHook::class.qualifiedName!!)
|
||||
val unableToProcess = symbols.filterNot { it.validate() }
|
||||
val actions = (symbols.filter {
|
||||
it is KSClassDeclaration && it.validate() && it.classKind == ClassKind.CLASS
|
||||
} as Sequence<KSClassDeclaration>).toList()
|
||||
|
||||
if (actions.isNotEmpty()) {
|
||||
val firstActions = arrayListOf<KSClassDeclaration>()
|
||||
val serviceActions = arrayListOf<KSClassDeclaration>()
|
||||
actions.forEach {
|
||||
val priority = it.getAnnotationsByType(XposedHook::class).first().priority
|
||||
if (priority >= 10) {
|
||||
serviceActions.add(it)
|
||||
} else {
|
||||
firstActions.add(it)
|
||||
}
|
||||
}
|
||||
|
||||
val context = ClassName("android.content", "Context")
|
||||
val packageName = "moe.fuqiuluo.shamrock.xposed.hooks"
|
||||
val fileSpec = FileSpec.builder(packageName, "AutoActionLoader").addFunction(FunSpec.builder("runFirstActions")
|
||||
.addParameter("ctx", context)
|
||||
.apply {
|
||||
firstActions.forEach { handler ->
|
||||
val annotation = handler.getAnnotationsByType(XposedHook::class).first()
|
||||
val process = annotation.process
|
||||
val className = handler.simpleName.asString()
|
||||
if (process == Process.MAIN) {
|
||||
addStatement("if (PlatformUtils.isMainProcess()) ")
|
||||
} else if (process == Process.MSF) {
|
||||
addStatement("if (PlatformUtils.isMsfProcess()) ")
|
||||
}
|
||||
addStatement("$className().invoke(ctx)")
|
||||
}
|
||||
}.build()
|
||||
).addFunction(FunSpec.builder("runServiceActions")
|
||||
.addParameter("ctx", context).apply {
|
||||
serviceActions.forEach { handler ->
|
||||
val annotation = handler.getAnnotationsByType(XposedHook::class).first()
|
||||
val process = annotation.process
|
||||
val className = handler.simpleName.asString()
|
||||
if (process == Process.MAIN) {
|
||||
addStatement("if (PlatformUtils.isMainProcess()) ")
|
||||
} else if (process == Process.MSF) {
|
||||
addStatement("if (PlatformUtils.isMsfProcess()) ")
|
||||
}
|
||||
addStatement("$className().invoke(ctx)")
|
||||
}
|
||||
}.build()
|
||||
).apply {
|
||||
firstActions.forEach {
|
||||
addImport(it.packageName.asString(), it.simpleName.asString())
|
||||
}
|
||||
serviceActions.forEach {
|
||||
addImport(it.packageName.asString(), it.simpleName.asString())
|
||||
}
|
||||
addImport("moe.fuqiuluo.shamrock.utils", "PlatformUtils")
|
||||
}.build()
|
||||
|
||||
codeGenerator.createNewFile(
|
||||
dependencies = Dependencies(aggregating = false),
|
||||
packageName = packageName,
|
||||
fileName = "AutoActionLoader"
|
||||
).use { outputStream ->
|
||||
outputStream.writer().use {
|
||||
fileSpec.writeTo(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return unableToProcess.toList()
|
||||
}
|
||||
|
||||
inner class ActionLoaderVisitor(
|
||||
private val firstActions: List<KSClassDeclaration>,
|
||||
private val serviceActions: List<KSClassDeclaration>,
|
||||
): KSVisitorVoid() {
|
||||
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
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.XposedHookProcessor
|
||||
|
||||
@AutoService(SymbolProcessorProvider::class)
|
||||
class XposedHookProcessorProvider: SymbolProcessorProvider {
|
||||
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
|
||||
return XposedHookProcessor(environment.codeGenerator, environment.logger)
|
||||
}
|
||||
}
|
1
protobuf/.gitignore
vendored
Normal file
1
protobuf/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/build
|
41
protobuf/build.gradle.kts
Normal file
41
protobuf/build.gradle.kts
Normal 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"))
|
||||
|
||||
}
|
0
protobuf/consumer-rules.pro
Normal file
0
protobuf/consumer-rules.pro
Normal file
21
protobuf/proguard-rules.pro
vendored
Normal file
21
protobuf/proguard-rules.pro
vendored
Normal 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
|
4
protobuf/src/main/AndroidManifest.xml
Normal file
4
protobuf/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
128
protobuf/src/main/java/protobuf/fav/WeiyunAddRichMediaReq.kt
Normal file
128
protobuf/src/main/java/protobuf/fav/WeiyunAddRichMediaReq.kt
Normal file
@ -0,0 +1,128 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
@file:Suppress("ArrayInDataClass")
|
||||
|
||||
package 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 = "",
|
||||
)
|
@ -0,0 +1,13 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
package 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 = "",
|
||||
)
|
10
protobuf/src/main/java/protobuf/fav/WeiyunComm.kt
Normal file
10
protobuf/src/main/java/protobuf/fav/WeiyunComm.kt
Normal file
@ -0,0 +1,10 @@
|
||||
package 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
|
||||
)
|
15
protobuf/src/main/java/protobuf/fav/WeiyunCommonReq.kt
Normal file
15
protobuf/src/main/java/protobuf/fav/WeiyunCommonReq.kt
Normal file
@ -0,0 +1,15 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
package 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,
|
||||
|
||||
)
|
14
protobuf/src/main/java/protobuf/fav/WeiyunCommonResp.kt
Normal file
14
protobuf/src/main/java/protobuf/fav/WeiyunCommonResp.kt
Normal file
@ -0,0 +1,14 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
package 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,
|
||||
)
|
@ -0,0 +1,14 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
package 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,
|
||||
)
|
@ -0,0 +1,39 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
|
||||
package 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,
|
||||
)
|
@ -0,0 +1,11 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
package 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(),
|
||||
)
|
@ -0,0 +1,50 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
package 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
|
||||
|
19
protobuf/src/main/java/protobuf/fav/WeiyunGetFavListReq.kt
Normal file
19
protobuf/src/main/java/protobuf/fav/WeiyunGetFavListReq.kt
Normal file
@ -0,0 +1,19 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
package 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,
|
||||
)
|
41
protobuf/src/main/java/protobuf/fav/WeiyunGetFavListResp.kt
Normal file
41
protobuf/src/main/java/protobuf/fav/WeiyunGetFavListResp.kt
Normal file
@ -0,0 +1,41 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
|
||||
package 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 = "",
|
||||
)
|
||||
|
30
protobuf/src/main/java/protobuf/fav/WeiyunMsgHead.kt
Normal file
30
protobuf/src/main/java/protobuf/fav/WeiyunMsgHead.kt
Normal file
@ -0,0 +1,30 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
@file:Suppress("ArrayInDataClass")
|
||||
|
||||
package 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,
|
||||
)
|
@ -0,0 +1,20 @@
|
||||
package 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,
|
||||
)
|
405
protobuf/src/main/java/protobuf/guild/GetGuildFeeds.kt
Normal file
405
protobuf/src/main/java/protobuf/guild/GetGuildFeeds.kt
Normal file
@ -0,0 +1,405 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
|
||||
package protobuf.guild
|
||||
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
import protobuf.qweb.QWebExtInfo
|
||||
|
||||
@Serializable
|
||||
data class GetGuildFeedsReq(
|
||||
@ProtoNumber(1) var count: Int,
|
||||
@ProtoNumber(2) var from: Int? = null,
|
||||
@ProtoNumber(3) var feedAttchInfo: ByteArray? = null,
|
||||
@ProtoNumber(4) var guildId: ULong? = null,
|
||||
@ProtoNumber(5) var getType: Int? = null,
|
||||
@ProtoNumber(6) var sortOption: Int? = null,
|
||||
@ProtoNumber(7) var u7: Int? = null,
|
||||
@ProtoNumber(8) var u8: Int? = null,
|
||||
@ProtoNumber(9) var u9: ByteArray? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class GetGuildFeedsRsp(
|
||||
@ProtoNumber(1) var vecFeed: List<StFeed>? = null,
|
||||
@ProtoNumber(2) var isFinish: Int = 0,
|
||||
//@ProtoNumber(3) var feedAttchInfo: ByteArray? = null,
|
||||
//@ProtoNumber(4) var traceId: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StFeed(
|
||||
@SerialName("id") @ProtoNumber(1) var id: String,
|
||||
@SerialName("title") @ProtoNumber(2) var title: StRichText,
|
||||
@SerialName("poster") @ProtoNumber(4) var poster: StUser? = null,
|
||||
@SerialName("videos") @ProtoNumber(5) var videos: List<StVideo>? = null,
|
||||
@SerialName("contents") @ProtoNumber(6) var contents: StRichText? = null,
|
||||
@SerialName("create_time") @ProtoNumber(7) var createTime: ULong? = null,
|
||||
@SerialName("comment_count") @ProtoNumber(9) var commentCount: UInt? = null,
|
||||
|
||||
@SerialName("comments") @ProtoNumber(10) var vecComment: List<StComment>? = null,
|
||||
@SerialName("share") @ProtoNumber(11) var share: StShare? = null,
|
||||
@SerialName("visitor_info") @ProtoNumber(12) var visitorInfo: StVisitor? = null,
|
||||
@SerialName("images") @ProtoNumber(13) var images: List<StImage>? = null,
|
||||
@SerialName("poi") @ProtoNumber(14) var poiInfo: StPoiInfoV2? = null,
|
||||
@SerialName("op_mask") @ProtoNumber(17) var opMask: List<Int>? = null,
|
||||
@SerialName("channel_info") @ProtoNumber(21) var channelInfo: StChannelInfo? = null,
|
||||
@SerialName("create_time_ns") @ProtoNumber(22) var createTimeNs: ULong? = null,
|
||||
@SerialName("update_time") @ProtoNumber(28) var updateTime: ULong? = null,
|
||||
@SerialName("total_like") @ProtoNumber(29) var totalLike: StTotalLike? = null,
|
||||
@SerialName("discussion_mum") @ProtoNumber(31) var discussionMum: UInt? = null,
|
||||
@SerialName("feed_type") @ProtoNumber(32) var feedType: UInt? = null,
|
||||
@SerialName("default_background_img") @ProtoNumber(34) var defaultBackgroundImg: String? = null,
|
||||
@SerialName("group_code") @ProtoNumber(35) var groupCode: ULong? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StTotalLike (
|
||||
@SerialName("count") @ProtoNumber(1) var likeCount: UInt? = null,
|
||||
@SerialName("is_clicked") @ProtoNumber(2) var isClicked: UInt? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StPoiInfoV2(
|
||||
@SerialName("poi_id") @ProtoNumber(1) var poiId: String? = null,
|
||||
@SerialName("name") @ProtoNumber(2) var name: String? = null,
|
||||
@SerialName("poi_type") @ProtoNumber(3) var poiType: Int? = null,
|
||||
@SerialName("type_name") @ProtoNumber(4) var typeName: String? = null,
|
||||
@SerialName("address") @ProtoNumber(5) var address: String? = null,
|
||||
@SerialName("district_code") @ProtoNumber(6) var districtCode: Int? = null,
|
||||
@SerialName("gps") @ProtoNumber(7) var gps: StGPSV2? = null,
|
||||
@SerialName("distance") @ProtoNumber(8) var distance: Int? = null,
|
||||
@SerialName("hot_value") @ProtoNumber(9) var hotValue: Int? = null,
|
||||
@SerialName("phone") @ProtoNumber(10) var phone: String? = null,
|
||||
@SerialName("country") @ProtoNumber(11) var country: String? = null,
|
||||
@SerialName("province") @ProtoNumber(12) var province: String? = null,
|
||||
@SerialName("city") @ProtoNumber(13) var city: String? = null,
|
||||
@SerialName("poi_num") @ProtoNumber(14) var poiNum: Int? = null,
|
||||
@SerialName("poi_order_type") @ProtoNumber(15) var poiOrderType: Int? = null,
|
||||
@SerialName("default_name") @ProtoNumber(16) var defaultName: String? = null,
|
||||
@SerialName("district") @ProtoNumber(17) var district: String? = null,
|
||||
@SerialName("dian_ping_id") @ProtoNumber(18) var dianPingId: String? = null,
|
||||
@SerialName("distance_text") @ProtoNumber(19) var distanceText: String? = null,
|
||||
@SerialName("display_name") @ProtoNumber(20) var displayName: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StGPSV2(
|
||||
@SerialName("lat") @ProtoNumber(1) var latitude: Long? = null,
|
||||
@SerialName("lon") @ProtoNumber(2) var longitude: Long? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StShare(
|
||||
@SerialName("title") @ProtoNumber(1) var title: String? = null,
|
||||
@SerialName("desc") @ProtoNumber(2) var desc: String? = null,
|
||||
@SerialName("type") @ProtoNumber(3) var type: UInt? = null,
|
||||
@SerialName("url") @ProtoNumber(4) var url: String? = null,
|
||||
@SerialName("author") @ProtoNumber(5) var author: StUser? = null,
|
||||
@SerialName("poster") @ProtoNumber(6) var poster: StUser? = null,
|
||||
@SerialName("videos") @ProtoNumber(7) var videos: List<StVideo>? = null,
|
||||
@SerialName("short_url") @ProtoNumber(8) var shorturl: String? = null,
|
||||
@SerialName("share_card_info") @ProtoNumber(9) var shareCardInfo: String? = null,
|
||||
//@ProtoNumber(10) var shareQzoneInfo: Any? = null,
|
||||
@SerialName("images") @ProtoNumber(11) var images: List<StImage>? = null,
|
||||
@SerialName("publish_total_user") @ProtoNumber(12) var publishTotalUser: UInt? = null,
|
||||
@SerialName("shared_count") @ProtoNumber(13) var sharedCount: UInt? = null,
|
||||
//@ProtoNumber(14) var channelShareInfo: Any? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StVisitor(
|
||||
@SerialName("view_count")
|
||||
@ProtoNumber(1) val viewCount: UInt? = null,
|
||||
@SerialName("recome_count")
|
||||
@ProtoNumber(3) val recomeCount: UInt? = null,
|
||||
@SerialName("view_desc")
|
||||
@ProtoNumber(4) val viewDesc: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StComment(
|
||||
@SerialName("id") @ProtoNumber(1) var id: String? = null,
|
||||
@SerialName("poster") @ProtoNumber(2) var postUser: StUser? = null,
|
||||
@SerialName("create_time") @ProtoNumber(3) var createTime: ULong? = null,
|
||||
@SerialName("content") @ProtoNumber(4) var content: String? = null,
|
||||
@SerialName("reply_count") @ProtoNumber(5) var replyCount: UInt? = null,
|
||||
@SerialName("replies") @ProtoNumber(6) var vecReply: List<StReply>? = null,
|
||||
//@ProtoNumber(7) var busiData: Any? = null,
|
||||
@SerialName("like_info") @ProtoNumber(8) var likeInfo: StLike? = null,
|
||||
@SerialName("type_flag") @ProtoNumber(9) var typeFlag: UInt? = null,
|
||||
@SerialName("at_uin_list") @ProtoNumber(10) var atUinList: List<String>? = null,
|
||||
@SerialName("type_flag2") @ProtoNumber(11) var typeFlag2: UInt? = null,
|
||||
@SerialName("create_time_ns") @ProtoNumber(12) var createTimeNs: ULong? = null,
|
||||
@SerialName("store_ext_info") @ProtoNumber(13) var storeExtInfo: List<QWebExtInfo>? = null,
|
||||
@SerialName("third_id") @ProtoNumber(14) var thirdId: String? = null,
|
||||
@SerialName("source_type") @ProtoNumber(15) var sourceType: UInt? = null,
|
||||
@SerialName("rich_contents") @ProtoNumber(16) var richContents: StRichText? = null,
|
||||
@SerialName("images") @ProtoNumber(17) var images: List<StImage>? = null,
|
||||
@SerialName("sequence") @ProtoNumber(18) var sequence: ULong? = null,
|
||||
@SerialName("next_page_reply") @ProtoNumber(19) var nextPageReply: Boolean? = null,
|
||||
@SerialName("attach_info") @ProtoNumber(20) var attachInfo: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StReply(
|
||||
@SerialName("id") @ProtoNumber(1) var id: String? = null,
|
||||
@SerialName("poster") @ProtoNumber(2) var postUser: StUser? = null,
|
||||
@SerialName("create_time") @ProtoNumber(3) var createTime: ULong? = null,
|
||||
@SerialName("content") @ProtoNumber(4) var content: String? = null,
|
||||
@SerialName("target") @ProtoNumber(5) var targetUser: StUser? = null,
|
||||
//@ProtoNumber(6) var busiData: ByteArray? = null,
|
||||
@SerialName("like_info") @ProtoNumber(7) var likeInfo: StLike? = null,
|
||||
@SerialName("type_flag") @ProtoNumber(8) var typeFlag: UInt? = null,
|
||||
@SerialName("modify_flag") @ProtoNumber(9) var modifyflag: UInt? = null,
|
||||
@SerialName("at_uin_list") @ProtoNumber(10) var atUinList: List<String>? = null,
|
||||
@SerialName("type_flag2") @ProtoNumber(11) var typeFlag2: UInt? = null,
|
||||
@SerialName("create_time_ns") @ProtoNumber(12) var createTimeNs: ULong? = null,
|
||||
@SerialName("store_ext_info") @ProtoNumber(13) var storeExtInfo: List<QWebExtInfo>? = null,
|
||||
@SerialName("third_id") @ProtoNumber(14) var thirdId: String? = null,
|
||||
@SerialName("target_reply_id") @ProtoNumber(15) var targetReplyID: String? = null,
|
||||
@SerialName("source_type") @ProtoNumber(16) var sourceType: UInt? = null,
|
||||
@SerialName("rich_contents") @ProtoNumber(17) var richContents: StRichText? = null,
|
||||
@SerialName("images") @ProtoNumber(18) var images: List<StImage>? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StLike(
|
||||
@SerialName("id")
|
||||
@ProtoNumber(1) var id: String? = null,
|
||||
@SerialName("count")
|
||||
@ProtoNumber(2) var count: UInt? = null,
|
||||
@SerialName("status")
|
||||
@ProtoNumber(3) var status: UInt? = null,
|
||||
@SerialName("like_uin_list")
|
||||
@ProtoNumber(4) var vecUser: List<StUser>? = null,
|
||||
@SerialName("poster")
|
||||
@ProtoNumber(6) var postUser: StUser? = null,
|
||||
@SerialName("has_liked_count")
|
||||
@ProtoNumber(7) var hasLikedCount: UInt? = null,
|
||||
@SerialName("owner_status")
|
||||
@ProtoNumber(8) var ownerStatus: UInt? = null,
|
||||
@SerialName("jump_url")
|
||||
@ProtoNumber(9) var jumpUrl: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StVideo(
|
||||
@SerialName("file_id") @ProtoNumber(1) var fileId: String? = null,
|
||||
@SerialName("file_size") @ProtoNumber(2) var fileSize: UInt? = null,
|
||||
@SerialName("duration") @ProtoNumber(3) var duration: UInt? = null,
|
||||
@SerialName("width") @ProtoNumber(4) var width: UInt? = null,
|
||||
@SerialName("height") @ProtoNumber(5) var height: UInt? = null,
|
||||
@SerialName("play_url") @ProtoNumber(6) var playUrl: String? = null,
|
||||
@SerialName("trans_status") @ProtoNumber(7) var transStatus: UInt? = null,
|
||||
@SerialName("video_prior") @ProtoNumber(8) var videoPrior: UInt? = null,
|
||||
@SerialName("video_rate") @ProtoNumber(9) var videoRate: UInt? = null,
|
||||
//@ProtoNumber(10) var vecVideoUrl: String? = null,
|
||||
//@ProtoNumber(11) var busiData: Any? = null,
|
||||
@SerialName("approval_status") @ProtoNumber(12) var approvalStatus: UInt? = null,
|
||||
@SerialName("video_source") @ProtoNumber(13) var videoSource: UInt? = null,
|
||||
@SerialName("media_quality_rank") @ProtoNumber(14) var mediaQualityRank: UInt? = null,
|
||||
@SerialName("media_quality_score") @ProtoNumber(15) var mediaQualityScore: Float? = null,
|
||||
@SerialName("md5") @ProtoNumber(16) var videoMD5: String? = null,
|
||||
@SerialName("is_quic") @ProtoNumber(17) var isQuic: UInt? = null,
|
||||
@SerialName("orientation") @ProtoNumber(18) var orientation: Int? = null,
|
||||
@SerialName("cover") @ProtoNumber(19) var cover: StImage? = null,
|
||||
@SerialName("pattern_id") @ProtoNumber(20) var patternId: String? = null,
|
||||
@SerialName("display_index") @ProtoNumber(21) var displayIndex: UInt? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StRichText(
|
||||
@SerialName("contents") @ProtoNumber(1) var contents: List<StRichTextContent>? = null,
|
||||
@SerialName("images") @ProtoNumber(2) var images: List<StImage>? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StRichTextContent(
|
||||
@SerialName("type") @ProtoNumber(1) var type: Int? = null,
|
||||
@SerialName("pattern_id") @ProtoNumber(2) var patternId: String? = null,
|
||||
@SerialName("text") @ProtoNumber(3) var textContent: StRichTextTextContent? = null,
|
||||
@SerialName("at") @ProtoNumber(4) var atContent: StRichTextAtContent? = null,
|
||||
@SerialName("url") @ProtoNumber(5) var urlContent: StRichTextURLContent? = null,
|
||||
@SerialName("emoji") @ProtoNumber(6) var emojiContent: StRichTextEmojiContent? = null,
|
||||
@SerialName("channel") @ProtoNumber(7) var channelContent: StRichTextChannelContent? = null,
|
||||
@SerialName("guild") @ProtoNumber(8) var guildContent: StRichTextGuildContent? = null,
|
||||
@SerialName("icon") @ProtoNumber(9) var iconContent: StRichTextIconContent? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StRichTextIconContent(
|
||||
@SerialName("url") @ProtoNumber(1) val url: String? = null
|
||||
)
|
||||
@Serializable
|
||||
data class StRichTextGuildContent(
|
||||
@SerialName("channel_info") @ProtoNumber(1) val channelInfo: StChannelInfo? = null
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StRichTextChannelContent(
|
||||
@SerialName("channel_info") @ProtoNumber(1) val channelInfo: StChannelInfo? = null
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StChannelInfo(
|
||||
//@SerialName("sign") @ProtoNumber(1) var sign: String? = null,
|
||||
@SerialName("name")
|
||||
@ProtoNumber(2) var name: String? = null,
|
||||
@SerialName("icon_url")
|
||||
@ProtoNumber(3) var iconUrl: String? = null,
|
||||
@SerialName("type")
|
||||
@ProtoNumber(4) var privateType: Int? = null,
|
||||
@SerialName("guild_name")
|
||||
@ProtoNumber(5) var guildName: String? = null,
|
||||
@SerialName("hot_icon")
|
||||
@ProtoNumber(6) var hotIcon: String? = null,
|
||||
@SerialName("hot_index")
|
||||
@ProtoNumber(7) var hotIndex: UInt? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StRichTextEmojiContent(
|
||||
@ProtoNumber(1) var id: String? = null,
|
||||
@ProtoNumber(2) var type: String? = null,
|
||||
@ProtoNumber(3) var name: String? = null,
|
||||
@ProtoNumber(4) var url: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StRichTextURLContent(
|
||||
@ProtoNumber(1) var url: String? = null,
|
||||
@SerialName("display") @ProtoNumber(2) var displayText: String? = null,
|
||||
@ProtoNumber(3) var type: Int? = null,
|
||||
@SerialName("play_url") @ProtoNumber(4) var playUrl: String? = null,
|
||||
@SerialName("platform") @ProtoNumber(5) var thirdPlatform: ThirdPlatform? = null,
|
||||
@SerialName("third_video_info") @ProtoNumber(6) var thirdVideoInfo: CommThirdVideoInfo? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class CommThirdVideoInfo(
|
||||
@SerialName("cover") @ProtoNumber(1) val cover: String? = null,
|
||||
@SerialName("duration") @ProtoNumber(2) val duration: ULong? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class ThirdPlatform(
|
||||
@ProtoNumber(1) var icon: String? = null,
|
||||
@ProtoNumber(2) var name: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StRichTextTextContent(
|
||||
@ProtoNumber(1) var text: String? = null
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StRichTextAtContent(
|
||||
@ProtoNumber(1) var type: Int? = null,
|
||||
@SerialName("guild_info") @ProtoNumber(2) var guildInfo: GuildInfo? = null,
|
||||
@SerialName("role_info") @ProtoNumber(3) var roleGroupId: RoleGroupInfo? = null,
|
||||
@ProtoNumber(4) var user: StUser? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StUser(
|
||||
@ProtoNumber(1) var id: String? = null,
|
||||
@ProtoNumber(2) var nick: String? = null,
|
||||
@ProtoNumber(3) var icon: StIconInfo? = null,
|
||||
@ProtoNumber(4) var desc: String? = null,
|
||||
@SerialName("follow_state") @ProtoNumber(5) var followState: UInt? = null,
|
||||
@ProtoNumber(6) var type: UInt? = null,
|
||||
@ProtoNumber(7) var sex: UInt? = null,
|
||||
@ProtoNumber(8) var birthday: ULong? = null,
|
||||
@ProtoNumber(9) var school: String? = null,
|
||||
@ProtoNumber(11) var location: String? = null,
|
||||
//@ProtoNumber(12) var busiData: ByteArray? = null,
|
||||
@SerialName("frd") @ProtoNumber(13) var frdState: UInt? = null,
|
||||
@SerialName("relation_state") @ProtoNumber(14) var relationState: UInt? = null,
|
||||
@SerialName("black_state") @ProtoNumber(15) var blackState: UInt? = null,
|
||||
@ProtoNumber(16) var medal: StTagMedalInfo? = null,
|
||||
@ProtoNumber(17) var constellation: Int? = null,
|
||||
@SerialName("jump_url") @ProtoNumber(18) var jumpUrl: String? = null,
|
||||
@SerialName("location_code") @ProtoNumber(19) var locationCode: String? = null,
|
||||
@SerialName("third_id") @ProtoNumber(20) var thirdId: String? = null,
|
||||
@ProtoNumber(21) var company: String? = null,
|
||||
@SerialName("certification_desc") @ProtoNumber(22) var certificationDesc: String? = null,
|
||||
@SerialName("desc_type") @ProtoNumber(23) var descType: UInt? = null,
|
||||
//@ProtoNumber(24) var channelUserInfo: Any? = null,
|
||||
//@SerialName("login_id") @ProtoNumber(25) var loginId: String? = null,
|
||||
@ProtoNumber(26) var uin: ULong? = null,
|
||||
@SerialName("nick_flag") @ProtoNumber(27) var nickFlag: UInt? = null,
|
||||
@SerialName("manage_tag") @ProtoNumber(28) var manageTag: CustomManageTag? = null,
|
||||
//@SerialName("personal_medal") @ProtoNumber(29) var personalMedal: PersonalMedal? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class PersonalMedal(
|
||||
@SerialName("start") @ProtoNumber(1) val startTime: ULong? = null,
|
||||
@SerialName("end") @ProtoNumber(2) val endTime: ULong? = null,
|
||||
@ProtoNumber(3) var url: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StTagMedalInfo(
|
||||
@SerialName("id") @ProtoNumber(1) val tagId: ULong? = null,
|
||||
@SerialName("name") @ProtoNumber(2) val tagName: String? = null,
|
||||
@ProtoNumber(3) val rank: ULong? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class CustomManageTag(
|
||||
@ProtoNumber(3) val color: UInt? = null,
|
||||
@SerialName("name") @ProtoNumber(2) val tagName: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StIconInfo(
|
||||
//@SerialName("url_40") @ProtoNumber(1) var iconUrl40: String? = null,
|
||||
//@SerialName("url_100") @ProtoNumber(2) var iconUrl100: String? = null,
|
||||
//@SerialName("url_140") @ProtoNumber(3) var iconUrl140: String? = null,
|
||||
//@SerialName("url_640") @ProtoNumber(4) var iconUrl640: String? = null,
|
||||
@SerialName("url") @ProtoNumber(5) var iconUrl: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class RoleGroupInfo(
|
||||
@SerialName("role") @ProtoNumber(1) var roleId: ULong? = null,
|
||||
@ProtoNumber(2) var name: String? = null,
|
||||
@ProtoNumber(3) var color: ULong? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class GuildInfo(
|
||||
@SerialName("guild_id") @ProtoNumber(1) var guildId: ULong? = null,
|
||||
@ProtoNumber(2) var name: String? = null,
|
||||
@SerialName("join_time") @ProtoNumber(3) var joinTime: ULong? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StImage(
|
||||
@ProtoNumber(1) var width: UInt? = null,
|
||||
@ProtoNumber(2) var height: UInt? = null,
|
||||
@ProtoNumber(3) var picUrl: String? = null,
|
||||
@SerialName("image_urls") @ProtoNumber(4) var vecImageUrl: List<StImageUrl>? = null,
|
||||
@SerialName("id") @ProtoNumber(5) var picId: String? = null,
|
||||
//@ProtoNumber(6) var busiData: Any? = null,
|
||||
@SerialName("md5") @ProtoNumber(7) var imageMD5: String? = null,
|
||||
@SerialName("layer_pic_url") @ProtoNumber(8) var layerPicUrl: String? = null,
|
||||
@SerialName("pattern_id") @ProtoNumber(9) var patternId: String? = null,
|
||||
@SerialName("display_index") @ProtoNumber(10) var displayIndex: Int? = null,
|
||||
@SerialName("size") @ProtoNumber(11) var origSize: UInt? = null,
|
||||
@SerialName("is_original") @ProtoNumber(12) var isOrig: Boolean? = null,
|
||||
@SerialName("is_gif") @ProtoNumber(13) var isGif: Boolean? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StImageUrl(
|
||||
@SerialName("level_type") @ProtoNumber(1) var levelType: UInt? = null,
|
||||
@ProtoNumber(2) var url: String? = null,
|
||||
@ProtoNumber(3) var width: UInt? = null,
|
||||
@ProtoNumber(4) var height: UInt? = null,
|
||||
//@ProtoNumber(5) var busiData: Any? = null,
|
||||
)
|
57
protobuf/src/main/java/protobuf/message/Message.kt
Normal file
57
protobuf/src/main/java/protobuf/message/Message.kt
Normal file
@ -0,0 +1,57 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
package 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,
|
||||
)
|
12
protobuf/src/main/java/protobuf/oidb/TrpcOidb.kt
Normal file
12
protobuf/src/main/java/protobuf/oidb/TrpcOidb.kt
Normal file
@ -0,0 +1,12 @@
|
||||
package protobuf.oidb
|
||||
|
||||
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,
|
||||
)
|
87
protobuf/src/main/java/protobuf/oidb/cmd0x6d7/Oidb0x6d7.kt
Normal file
87
protobuf/src/main/java/protobuf/oidb/cmd0x6d7/Oidb0x6d7.kt
Normal file
@ -0,0 +1,87 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
|
||||
package protobuf.oidb.cmd0x6d7
|
||||
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
import 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,
|
||||
)
|
14
protobuf/src/main/java/protobuf/oidb/cmd0x9082/Oidb0x9082.kt
Normal file
14
protobuf/src/main/java/protobuf/oidb/cmd0x9082/Oidb0x9082.kt
Normal file
@ -0,0 +1,14 @@
|
||||
package protobuf.oidb.cmd0x9082
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
|
||||
@Serializable
|
||||
data class Oidb0x9082(
|
||||
@ProtoNumber(2) val peer: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(3) val msgSeq: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(4) val faceIndex: String = "",
|
||||
@ProtoNumber(5) val flag: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(6) val u1: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(7) val u2: UInt = UInt.MIN_VALUE,
|
||||
)
|
16
protobuf/src/main/java/protobuf/oidb/cmd0xf16/Oidb0xf16.kt
Normal file
16
protobuf/src/main/java/protobuf/oidb/cmd0xf16/Oidb0xf16.kt
Normal file
@ -0,0 +1,16 @@
|
||||
package protobuf.oidb.cmd0xf16
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf16(
|
||||
@ProtoNumber(1) var setGroupRemarkReq: SetGroupRemarkReq? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class SetGroupRemarkReq(
|
||||
@ProtoNumber(1) var groupCode: ULong,
|
||||
@ProtoNumber(2) var groupUin: ULong,
|
||||
@ProtoNumber(3) var groupRemark: String
|
||||
)
|
117
protobuf/src/main/java/protobuf/oidb/cmd0xf88/Oidb0xf88.kt
Normal file
117
protobuf/src/main/java/protobuf/oidb/cmd0xf88/Oidb0xf88.kt
Normal file
@ -0,0 +1,117 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
|
||||
package protobuf.oidb.cmd0xf88
|
||||
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf88Req(
|
||||
@ProtoNumber(1) val filter: GProFilter,
|
||||
@ProtoNumber(2) val memberId: ULong,
|
||||
@ProtoNumber(3) val tinyId: ULong,
|
||||
@ProtoNumber(4) val guildId: ULong,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf88Rsp(
|
||||
@ProtoNumber(1) val userInfo: GProUserInfo?
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class GProUserInfo(
|
||||
@ProtoNumber(1) var memberId: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(2) var memberTinyid: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(3) var nickName: String? = null,
|
||||
@ProtoNumber(4) var gender: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(5) var allow: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(6) var url: String? = null,
|
||||
@ProtoNumber(7) var birthday: String? = null,
|
||||
@ProtoNumber(8) var fullBirthday: String? = null,
|
||||
@ProtoNumber(9) var fullAge: String? = null,
|
||||
@ProtoNumber(10) var country: String? = null,
|
||||
@ProtoNumber(11) var province: String? = null,
|
||||
@ProtoNumber(12) var city: String? = null,
|
||||
@ProtoNumber(13) var cityId: String? = null,
|
||||
@ProtoNumber(14) var cityZoneId: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(15) var msgHeadInfo: GProHeadInfo? = null,
|
||||
@ProtoNumber(16) var joinTime: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(17) var memberRole: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(18) var memberType: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(19) var beAdminTime: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(20) var memberName: String? = null,
|
||||
//@ProtoNumber(21) var clientPresence: Any? = null,
|
||||
//@ProtoNumber(22) var client_archive: ArrayList<>? = null,
|
||||
//@ProtoNumber(23) var bind_client_account: ArrayList<>? = null,
|
||||
@ProtoNumber(24) var hasMoreArchive: Boolean = false,
|
||||
//@ProtoNumber(25) var firstArchiveArkData: Any? = null,
|
||||
@ProtoNumber(26) var directMsgBlackFlag: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(27) var setGroupProProfile: Boolean = false,
|
||||
@ProtoNumber(28) var joinGroupProTimestamp: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(29) var shutUpExpireTime: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(30) var avatarMeta: ByteArray? = null,
|
||||
@ProtoNumber(31) var memberNameFlag: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(32) var faceAuthStatus: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(33) var verifyUrl: String? = null,
|
||||
@ProtoNumber(34) var constellation: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(35) var personalSign: ByteArray? = null,
|
||||
//@ProtoNumber(36) var voice_live_info: Any? = null,
|
||||
@ProtoNumber(37) var avatarFlag: UInt = UInt.MIN_VALUE,
|
||||
//@ProtoNumber(38) var isQQFriend: Any? = null,
|
||||
//@ProtoNumber(39) var openid: Any? = null,
|
||||
//@ProtoNumber(40) var personalSignTemplate: Any? = null,
|
||||
//@ProtoNumber(41) var showVoiceLiveStatusSwitch: Any? = null,
|
||||
@ProtoNumber(99) var isMember: UInt = UInt.MIN_VALUE,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class GProHeadInfo(
|
||||
@ProtoNumber(1) var timestamp: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(2) var faceFlag: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(3) var baseUrl: String? = null,
|
||||
@ProtoNumber(4) var type: UInt = UInt.MIN_VALUE
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class GProFilter(
|
||||
@ProtoNumber(3) val nickName: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(4) val gender: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(5) val allow: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(6) val url: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(7) val birthday: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(8) val fullBirthday: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(9) val fullAge: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(10) val country: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(11) val province: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(12) val city: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(13) val cityId: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(14) val cityZoneId: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(15) val headInfo: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(16) val joinTime: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(17) val memberRole: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(18) val memberType: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(19) val beAdminTime: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(20) val memberName: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(21) val clientPresence: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(22) val clientArchive: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(23) val bindClientAccount: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(24) val hasMoreArchive: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(25) val firstArchiveBaseInfo: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(26) val directMsgBlackFlag: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(27) val joinGroupProTimestamp: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(28) val shutupExpireTime: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(29) val faceAuthStatus: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(30) val constellation: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(31) val personalSign: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(32) val voiceLiveInfo: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(33) val isQQFriend: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(34) val personalSignTemplate: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(35) val showVoiceLiveStatusSwitch: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(36) val openid: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(37) val isMember: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(99) val needGroupProProfile: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(100) val avatarMeta: UInt = UInt.MIN_VALUE,
|
||||
) {
|
||||
|
||||
}
|
61
protobuf/src/main/java/protobuf/oidb/cmd0xfc2/Oidb0xfc2.kt
Normal file
61
protobuf/src/main/java/protobuf/oidb/cmd0xfc2/Oidb0xfc2.kt
Normal file
@ -0,0 +1,61 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
package protobuf.oidb.cmd0xfc2
|
||||
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xfc2ReqBody(
|
||||
@ProtoNumber(1) var msgCmd: Int? = null,
|
||||
@ProtoNumber(3) var msgBusType: Int? = null,
|
||||
@ProtoNumber(4) var msgChannelInfo: Oidb0xfc2ChannelInfo? = null,
|
||||
@ProtoNumber(5) var msgTerminalType: Int? = null,
|
||||
//@ProtoNumber(100) var msg_apply_upload_req: Any? = null,
|
||||
//@ProtoNumber(200) var msg_upload_completed_req: Any? = null,
|
||||
@ProtoNumber(300) var msgApplyDownloadReq: Oidb0xfc2MsgApplyDownloadReq? = null,
|
||||
//@ProtoNumber(400) var msg_apply_preview_req: Any? = null,
|
||||
//@ProtoNumber(500) var msg_apply_security_strike_req: Any? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xfc2RspBody(
|
||||
@ProtoNumber(1) var msgCmd: Int? = null,
|
||||
@ProtoNumber(5) var msgBusType: Int? = null,
|
||||
//@ProtoNumber(110) var msg_apply_upload_rsp: Any? = null,
|
||||
//@ProtoNumber(210) var msg_upload_completed_rsp: Any? = null,
|
||||
@ProtoNumber(310) var msgApplyDownloadRsp: Oidb0xfc2MsgApplyDownloadRsp? = null,
|
||||
//@ProtoNumber(410) var msg_apply_preview_rsp: Any? = null,
|
||||
//@ProtoNumber(510) var msg_apply_security_strike_rsp: Any? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xfc2MsgApplyDownloadRsp(
|
||||
@ProtoNumber(1) var msgDownloadInfo: Oidb0xfc2MsgDownloadInfo? = null,
|
||||
//@ProtoNumber(2) var msgFileInfo: Any? = null,
|
||||
//@ProtoNumber(3) var msgChacha20Param: Any? = null,
|
||||
//@ProtoNumber(4) var useEncrypt: UInt = UInt.MIN_VALUE,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xfc2MsgDownloadInfo(
|
||||
@ProtoNumber(1) var downloadKey: ByteArray? = null,
|
||||
//@ProtoNumber(2) var msg_out_addr: Any? = null,
|
||||
//@ProtoNumber(3) var msg_inner_addr: Any? = null,
|
||||
//@ProtoNumber(4) var msg_out_addr_ipv6: Any? = null,
|
||||
@ProtoNumber(5) var downloadDomain: String? = null,
|
||||
@ProtoNumber(6) var downloadUrl: String? = null,
|
||||
//@ProtoNumber(7) var str_cookie: Any? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xfc2MsgApplyDownloadReq(
|
||||
@ProtoNumber(1) val fieldId: String,
|
||||
@ProtoNumber(2) val supportEncrypt: Int,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xfc2ChannelInfo(
|
||||
@ProtoNumber(3) val guildId: ULong,
|
||||
@ProtoNumber(4) val channelId: ULong,
|
||||
)
|
99
protobuf/src/main/java/protobuf/oidb/cmx0xf57/Oidb0xf57.kt
Normal file
99
protobuf/src/main/java/protobuf/oidb/cmx0xf57/Oidb0xf57.kt
Normal file
@ -0,0 +1,99 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
|
||||
package protobuf.oidb.cmx0xf57
|
||||
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf57Req(
|
||||
@ProtoNumber(1) val filter: Oidb0xf57Filter,
|
||||
@ProtoNumber(2) val guildInfo: Oidb0xf57GuildInfo,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf57Rsp(
|
||||
@ProtoNumber(1) val metaInfo: Oidb0xf57MetaInfo,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf57MetaInfo(
|
||||
@ProtoNumber(3) val guildId: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(4) val meta: Oidb0xf57Meta? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf57Meta(
|
||||
@ProtoNumber(2) val guildCode: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(4) val createTime: Long = Long.MIN_VALUE,
|
||||
@ProtoNumber(5) val maxMemberCount: Long = Long.MIN_VALUE,
|
||||
@ProtoNumber(6) val memberCount: Long = Long.MIN_VALUE,
|
||||
@ProtoNumber(8) val name: String? = null,
|
||||
@ProtoNumber(11) val robotMaxNum: Int = Int.MIN_VALUE,
|
||||
@ProtoNumber(12) val adminMaxNum: Int = Int.MIN_VALUE,
|
||||
@ProtoNumber(13) val profile: String? = null,
|
||||
@ProtoNumber(14) val avatarSeq: Long = Long.MIN_VALUE,
|
||||
@ProtoNumber(18) val ownerId: ULong = ULong.MIN_VALUE,
|
||||
@ProtoNumber(19) val coverSeq: Long = Long.MIN_VALUE,
|
||||
@ProtoNumber(20) val clientId: Int = Int.MIN_VALUE,
|
||||
@ProtoNumber(27) val displayId: String? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf57GuildInfo(
|
||||
@ProtoNumber(1) val guildId: ULong = ULong.MIN_VALUE
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf57Filter(
|
||||
@ProtoNumber(1) val u1: Oidb0xf57U1,
|
||||
@ProtoNumber(2) val u2: Oidb0xf57U2,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf57U1(
|
||||
@ProtoNumber(2) val u1: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(4) val u2: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(5) val u3: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(6) val u4: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(7) val u5: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(8) val u6: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(11) val u7: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(12) val u8: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(13) val u9: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(14) val u10: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(45) val u11: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(18) val u12: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(19) val u13: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(20) val u14: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(22) val u15: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(23) val u16: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(5002) val u17: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(5003) val u18: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(5004) val u19: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(5005) val u20: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(5006) val u23: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(10007) val u21: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(15) val u22: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(30001) val u24: UInt = UInt.MIN_VALUE,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class Oidb0xf57U2(
|
||||
@ProtoNumber(3) val u1: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(4) val u2: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(6) val u3: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(11) val u4: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(14) val u5: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(15) val u6: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(16) val u7: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(17) val u8: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(32) val u9: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(31) val u10: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(29) val u11: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(26) val u12: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(23) val u13: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(22) val u14: UInt = UInt.MIN_VALUE,
|
||||
@ProtoNumber(18) val u15: UInt = UInt.MIN_VALUE,
|
||||
)
|
16
protobuf/src/main/java/protobuf/push/C2CCommonTipsEvent.kt
Normal file
16
protobuf/src/main/java/protobuf/push/C2CCommonTipsEvent.kt
Normal file
@ -0,0 +1,16 @@
|
||||
package 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 = "",
|
||||
)
|
21
protobuf/src/main/java/protobuf/push/C2CRecallEvent.kt
Normal file
21
protobuf/src/main/java/protobuf/push/C2CRecallEvent.kt
Normal file
@ -0,0 +1,21 @@
|
||||
package 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
|
||||
)
|
@ -0,0 +1,6 @@
|
||||
package protobuf.push
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
|
||||
// by GroupCommonTipsEvent
|
19
protobuf/src/main/java/protobuf/push/FriendApplyEvent.kt
Normal file
19
protobuf/src/main/java/protobuf/push/FriendApplyEvent.kt
Normal file
@ -0,0 +1,19 @@
|
||||
package 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,
|
||||
)
|
@ -0,0 +1,11 @@
|
||||
package 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
|
||||
)
|
||||
|
@ -0,0 +1,16 @@
|
||||
package 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,
|
||||
)
|
11
protobuf/src/main/java/protobuf/push/GroupApplyEvent.kt
Normal file
11
protobuf/src/main/java/protobuf/push/GroupApplyEvent.kt
Normal file
@ -0,0 +1,11 @@
|
||||
package 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,
|
||||
)
|
22
protobuf/src/main/java/protobuf/push/GroupBanEvent.kt
Normal file
22
protobuf/src/main/java/protobuf/push/GroupBanEvent.kt
Normal file
@ -0,0 +1,22 @@
|
||||
package 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,
|
||||
)
|
27
protobuf/src/main/java/protobuf/push/GroupCommonTipsEvent.kt
Normal file
27
protobuf/src/main/java/protobuf/push/GroupCommonTipsEvent.kt
Normal file
@ -0,0 +1,27 @@
|
||||
package 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
|
||||
)
|
10
protobuf/src/main/java/protobuf/push/GroupInviteEvent.kt
Normal file
10
protobuf/src/main/java/protobuf/push/GroupInviteEvent.kt
Normal file
@ -0,0 +1,10 @@
|
||||
package 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,
|
||||
)
|
@ -0,0 +1,16 @@
|
||||
package 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 = "",
|
||||
)
|
12
protobuf/src/main/java/protobuf/push/GroupListChangeEvent.kt
Normal file
12
protobuf/src/main/java/protobuf/push/GroupListChangeEvent.kt
Normal file
@ -0,0 +1,12 @@
|
||||
package 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 = "",
|
||||
)
|
18
protobuf/src/main/java/protobuf/push/GroupRecallEvent.kt
Normal file
18
protobuf/src/main/java/protobuf/push/GroupRecallEvent.kt
Normal file
@ -0,0 +1,18 @@
|
||||
package 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,
|
||||
)
|
@ -0,0 +1,10 @@
|
||||
package 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,
|
||||
)
|
26
protobuf/src/main/java/protobuf/push/MessagePush.kt
Normal file
26
protobuf/src/main/java/protobuf/push/MessagePush.kt
Normal file
@ -0,0 +1,26 @@
|
||||
package protobuf.push
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
import 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,
|
||||
)
|
37
protobuf/src/main/java/protobuf/qweb/QWeb.kt
Normal file
37
protobuf/src/main/java/protobuf/qweb/QWeb.kt
Normal file
@ -0,0 +1,37 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
|
||||
package protobuf.qweb
|
||||
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.protobuf.ProtoNumber
|
||||
|
||||
@Serializable
|
||||
data class QWebReq(
|
||||
@ProtoNumber(1) val seq: Int = 0,
|
||||
@ProtoNumber(2) val qua: String = "",
|
||||
@ProtoNumber(3) val deviceInfo: String = "",
|
||||
@ProtoNumber(4) val buffer: ByteArray? = null,
|
||||
@ProtoNumber(5) val traceId: String = "",
|
||||
@ProtoNumber(6) val module: String = "",
|
||||
@ProtoNumber(7) var cmdname: String? = null,
|
||||
//@ProtoNumber(8) var loginSig: Any? = null,
|
||||
//@ProtoNumber(9) var Crypto: Any? = null,
|
||||
@ProtoNumber(10) var extinfo: List<QWebExtInfo>? = null,
|
||||
//@ProtoNumber(11) var contentType: Any? = null,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class QWebExtInfo(
|
||||
@ProtoNumber(1) val key: String,
|
||||
@ProtoNumber(2) val value: String,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class QWebRsp(
|
||||
@ProtoNumber(1) var seq: Int? = null,
|
||||
//@ProtoNumber(2) var retCode: Int? = null,
|
||||
//@ProtoNumber(3) var errMsg: String? = null,
|
||||
@ProtoNumber(4) var buffer: ByteArray? = null,
|
||||
//@ProtoNumber(5) var Extinfo: List<QWebExtInfo>? = null,
|
||||
)
|
@ -5,10 +5,10 @@ plugins {
|
||||
|
||||
android {
|
||||
namespace = "moe.fuqiuluo.qqinterface"
|
||||
compileSdk = 33
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
minSdk = 24
|
||||
minSdk = 27
|
||||
|
||||
consumerProguardFiles("consumer-rules.pro")
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
}
|
10
qqinterface/src/main/java/KQQ/BatchResponse.java
Normal file
10
qqinterface/src/main/java/KQQ/BatchResponse.java
Normal file
@ -0,0 +1,10 @@
|
||||
package KQQ;
|
||||
|
||||
import com.qq.jce.JceStruct;
|
||||
|
||||
public final class BatchResponse extends JceStruct {
|
||||
public byte[] buffer;
|
||||
public int result;
|
||||
public int seq;
|
||||
public int type;
|
||||
}
|
9
qqinterface/src/main/java/KQQ/RespBatchProcess.java
Normal file
9
qqinterface/src/main/java/KQQ/RespBatchProcess.java
Normal file
@ -0,0 +1,9 @@
|
||||
package KQQ;
|
||||
|
||||
import com.qq.jce.JceStruct;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public final class RespBatchProcess extends JceStruct {
|
||||
public ArrayList<BatchResponse> batch_response_list;
|
||||
}
|
@ -33,7 +33,7 @@ public class MMKV implements SharedPreferences, SharedPreferences.Editor {
|
||||
return null;
|
||||
}
|
||||
|
||||
public SharedPreferences.Editor putBoolean(String str, boolean z) {
|
||||
public SharedPreferences.Editor putBoolean(String s, boolean z) {
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -19,4 +19,11 @@ public class QQSysFaceUtil {
|
||||
public static String getFaceDescription(int localId) {
|
||||
return "";
|
||||
}
|
||||
|
||||
public static String getPrueFaceDescription(String str) {
|
||||
if (str == null) {
|
||||
return null;
|
||||
}
|
||||
return str.startsWith("/") ? str.substring(1) : str;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,7 @@
|
||||
package com.tencent.mobileqq.filemanager.api;
|
||||
|
||||
import com.tencent.mobileqq.qroute.QRouteApi;
|
||||
|
||||
public interface IFileManagerUtil extends QRouteApi {
|
||||
byte[] getSHA(String str);
|
||||
}
|
@ -21,6 +21,10 @@ public abstract class PBField<T> {
|
||||
return new PBBytesField(byteStringMicro, false);
|
||||
}
|
||||
|
||||
public static PBFloatField initFloat(float paramFloat) {
|
||||
return new PBFloatField(paramFloat, false);
|
||||
}
|
||||
|
||||
public static PBBoolField initBool(boolean z) {
|
||||
return new PBBoolField(z, false);
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.tencent.mobileqq.pb;
|
||||
|
||||
public class PBFloatField extends PBPrimitiveField<Float> {
|
||||
public PBFloatField(float i2, boolean z) {
|
||||
}
|
||||
|
||||
public int get() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void set(int i2) {
|
||||
}
|
||||
}
|
@ -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) {
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,15 @@
|
||||
package com.tencent.mobileqq.qqguildsdk.api;
|
||||
|
||||
import com.tencent.mobileqq.qroute.QRouteApi;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import kotlin.Metadata;
|
||||
|
||||
public interface IQQGuildUtilApi extends QRouteApi {
|
||||
@NotNull
|
||||
String getAvatarUrl(@Nullable String str, long j2, int i2);
|
||||
|
||||
boolean isUserOnLine();
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
package com.tencent.mobileqq.qqguildsdk.data;
|
||||
|
||||
public class AddGuildOption {
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.tencent.mobileqq.qqguildsdk.data;
|
||||
|
||||
import com.tencent.mobileqq.qqguildsdk.data.genc.GGProAVDevOptInfo;
|
||||
import com.tencent.mobileqq.qqguildsdk.data.genc.IGProAVDevOptInfo;
|
||||
import com.tencent.qqnt.kernel.nativeinterface.GProAVRoomAddUpInfo;
|
||||
|
||||
public class GGProAVRoomAddUpInfo implements IGProAVRoomAddUpInfo {
|
||||
public final GProAVRoomAddUpInfo mInfo;
|
||||
|
||||
public GGProAVRoomAddUpInfo(GProAVRoomAddUpInfo gProAVRoomAddUpInfo) {
|
||||
this.mInfo = gProAVRoomAddUpInfo;
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVRoomAddUpInfo
|
||||
public IGProAVDevOptInfo getAVDevOpt() {
|
||||
return new GGProAVDevOptInfo(this.mInfo.getAvDevOpt());
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVRoomAddUpInfo
|
||||
public int getMicVolume() {
|
||||
return this.mInfo.getMicVolume();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVRoomAddUpInfo
|
||||
public String getRoomId() {
|
||||
return this.mInfo.getRoomId();
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.tencent.mobileqq.qqguildsdk.data;
|
||||
|
||||
import com.tencent.qqnt.kernel.nativeinterface.GProAVRoomOptPushInfo;
|
||||
|
||||
|
||||
public class GGProAVRoomOptPushInfo implements IGProAVRoomOptPushInfo {
|
||||
public final GProAVRoomOptPushInfo mInfo;
|
||||
|
||||
public GGProAVRoomOptPushInfo(GProAVRoomOptPushInfo gProAVRoomOptPushInfo) {
|
||||
this.mInfo = gProAVRoomOptPushInfo;
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVRoomOptPushInfo
|
||||
public String getChannelId() {
|
||||
return String.valueOf(this.mInfo.getChannelId());
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVRoomOptPushInfo
|
||||
public String getDelRoomId() {
|
||||
return this.mInfo.getDelRoomId();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVRoomOptPushInfo
|
||||
public String getGuildId() {
|
||||
return String.valueOf(this.mInfo.getGuildId());
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVRoomOptPushInfo
|
||||
public int getOptType() {
|
||||
return this.mInfo.getOptType();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVRoomOptPushInfo
|
||||
public IGProAVRoomAddUpInfo getRoomAddUpInfo() {
|
||||
return new GGProAVRoomAddUpInfo(this.mInfo.getRoomAddUpInfo());
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVRoomOptPushInfo
|
||||
public IGProAVShowMsgInfo getShowInfo() {
|
||||
return new GGProAVShowMsgInfo(this.mInfo.getShowInfo());
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVRoomOptPushInfo
|
||||
public String getSwitchRoomId() {
|
||||
return this.mInfo.getSwitchRoomId();
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.tencent.mobileqq.qqguildsdk.data;
|
||||
|
||||
import com.tencent.qqnt.kernel.nativeinterface.GProAVShowMsgInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class GGProAVShowMsgInfo implements IGProAVShowMsgInfo {
|
||||
public final GProAVShowMsgInfo mInfo;
|
||||
|
||||
public GGProAVShowMsgInfo(GProAVShowMsgInfo gProAVShowMsgInfo) {
|
||||
this.mInfo = gProAVShowMsgInfo;
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVShowMsgInfo
|
||||
public ArrayList<String> getButtonMsgs() {
|
||||
return this.mInfo.getButtonMsgs();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVShowMsgInfo
|
||||
public String getShowMsg() {
|
||||
return this.mInfo.getShowMsg();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVShowMsgInfo
|
||||
public int getShowSeconds() {
|
||||
return this.mInfo.getShowSeconds();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVShowMsgInfo
|
||||
public int getShowType() {
|
||||
return this.mInfo.getShowType();
|
||||
}
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package com.tencent.mobileqq.qqguildsdk.data;
|
||||
|
||||
import com.tencent.qqnt.kernel.nativeinterface.GProAVUserStateChangeInfo;
|
||||
|
||||
|
||||
public class GGProAVUserStateChangeInfo implements IGProAVUserStateChangeInfo {
|
||||
public final GProAVUserStateChangeInfo mInfo;
|
||||
|
||||
public GGProAVUserStateChangeInfo(GProAVUserStateChangeInfo gProAVUserStateChangeInfo) {
|
||||
this.mInfo = gProAVUserStateChangeInfo;
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVUserStateChangeInfo
|
||||
public String getChannelId() {
|
||||
return String.valueOf(this.mInfo.getChannelId());
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVUserStateChangeInfo
|
||||
public String getGuildId() {
|
||||
return String.valueOf(this.mInfo.getGuildId());
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVUserStateChangeInfo
|
||||
public IGProAVShowMsgInfo getIGProAVShowMsgInfo() {
|
||||
return new GGProAVShowMsgInfo(this.mInfo.getShowInfo());
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVUserStateChangeInfo
|
||||
public String getMsg() {
|
||||
return this.mInfo.getMsg();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVUserStateChangeInfo
|
||||
public long getTinyId() {
|
||||
return this.mInfo.getTinyId();
|
||||
}
|
||||
|
||||
//@Override // com.tencent.mobileqq.qqguildsdk.data.IGProAVUserStateChangeInfo
|
||||
//public ej getUserCtlInfo() {
|
||||
// return new q(this.mInfo.getUserCtlInfo());
|
||||
//}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.tencent.mobileqq.qqguildsdk.data;
|
||||
|
||||
import com.tencent.qqnt.kernel.nativeinterface.GProDailyRecommendPush;
|
||||
|
||||
|
||||
public class GGProDailyRecommendPush implements IGProDailyRecommendPush {
|
||||
public final GProDailyRecommendPush mInfo;
|
||||
|
||||
public GGProDailyRecommendPush(GProDailyRecommendPush gProDailyRecommendPush) {
|
||||
this.mInfo = gProDailyRecommendPush;
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProDailyRecommendPush
|
||||
public String getAvatar() {
|
||||
return this.mInfo.getAvatar();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProDailyRecommendPush
|
||||
public String getJumpLink() {
|
||||
return this.mInfo.getJumpLink();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProDailyRecommendPush
|
||||
public String getSubTitle() {
|
||||
return this.mInfo.getSubTitle();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProDailyRecommendPush
|
||||
public String getTitle() {
|
||||
return this.mInfo.getTitle();
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.tencent.mobileqq.qqguildsdk.data;
|
||||
|
||||
import com.tencent.mobileqq.qqguildsdk.data.genc.GGProGetPrefetchRecommendGuildsRsp;
|
||||
import com.tencent.mobileqq.qqguildsdk.data.genc.IGProGetPrefetchRecommendGuildsRsp;
|
||||
import com.tencent.qqnt.kernel.nativeinterface.GProDiscoveryStateChangedMsg;
|
||||
|
||||
|
||||
public class GGProDiscoveryStateChangedMsg implements IGProDiscoveryStateChangedMsg {
|
||||
public final GProDiscoveryStateChangedMsg mInfo;
|
||||
|
||||
public GGProDiscoveryStateChangedMsg(GProDiscoveryStateChangedMsg gProDiscoveryStateChangedMsg) {
|
||||
this.mInfo = gProDiscoveryStateChangedMsg;
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProDiscoveryStateChangedMsg
|
||||
public IGProMyRecommendMsg getMyRecommendMsg() {
|
||||
return new GGProMyRecommendMsg(this.mInfo.getMyRecommendMsg());
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProDiscoveryStateChangedMsg
|
||||
public IGProGetPrefetchRecommendGuildsRsp getPrefetchRecommendMsg() {
|
||||
return new GGProGetPrefetchRecommendGuildsRsp(this.mInfo.getPrefetchRecommendMsg());
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProDiscoveryStateChangedMsg
|
||||
public int getSceneType() {
|
||||
return this.mInfo.getSceneType();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProDiscoveryStateChangedMsg
|
||||
public IGProTopGuildRecommendMsg getTopGuildRecommendMsg() {
|
||||
return new GGProTopGuildRecommendMsg(this.mInfo.getTopGuildRecommendMsg());
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.tencent.mobileqq.qqguildsdk.data;
|
||||
|
||||
import com.tencent.qqnt.kernel.nativeinterface.GProFeedSummary;
|
||||
import com.tencent.qqnt.kernel.nativeinterface.GProFeedThumbnail;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class GGProFeedSummary implements IGProFeedSummary {
|
||||
public final GProFeedSummary mInfo;
|
||||
|
||||
public GGProFeedSummary(GProFeedSummary gProFeedSummary) {
|
||||
this.mInfo = gProFeedSummary;
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProFeedSummary
|
||||
public String getFeedId() {
|
||||
return this.mInfo.getFeedId();
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProFeedSummary
|
||||
public ArrayList<IGProFeedThumbnail> getFeedThumbnails() {
|
||||
ArrayList<GProFeedThumbnail> feedThumbnails = this.mInfo.getFeedThumbnails();
|
||||
ArrayList<IGProFeedThumbnail> arrayList = new ArrayList<>();
|
||||
Iterator<GProFeedThumbnail> it = feedThumbnails.iterator();
|
||||
while (it.hasNext()) {
|
||||
arrayList.add(new GGProFeedThumbnail(it.next()));
|
||||
}
|
||||
return arrayList;
|
||||
}
|
||||
|
||||
@Override // com.tencent.mobileqq.qqguildsdk.data.IGProFeedSummary
|
||||
public String getTitle() {
|
||||
return this.mInfo.getTitle();
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user