mirror of
https://github.com/whitechi73/OpenShamrock.git
synced 2024-08-14 05:12:17 +00:00
Compare commits
246 Commits
1.0.5
...
48b720bdd7
Author | SHA1 | Date | |
---|---|---|---|
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 | |||
5f0cf952e8 | |||
03d62c55c2 | |||
89154f0c49 | |||
5218c153f0 | |||
2b64aa8b2c | |||
67ef465f14 | |||
ea62640057 | |||
f67dfac4d9 | |||
1593d973a0 | |||
3e27c64e84 | |||
c87268df09 | |||
98c6316e23 | |||
2af8d6d817 | |||
b9c2de744e | |||
fcf18bd3fd | |||
8265f74ca3 | |||
2c49b10772 | |||
4266afd1a5 | |||
b9ef0ca8f5 | |||
040b132836 | |||
16f77de5a6 | |||
46c83f5cb9 | |||
ca71ecae09 | |||
58d93b8f56 | |||
472b17f744 | |||
8a4212ffd7 | |||
bd28b0f7f7 | |||
f2dc3bc9fd | |||
ba8322dc55 | |||
cf445d17d9 | |||
e6e03ee328 | |||
497df6b649 | |||
f87fd3887a | |||
71a462e48f | |||
93cb6fc46b | |||
8fdea083b0 | |||
1620e18bf4 | |||
2f264ee9e4 | |||
19e3846e40 | |||
6b4f763a90 | |||
d5378d8acb | |||
ca62b33275 | |||
e09b68576a | |||
80bb591a1b | |||
08bce05c66 | |||
0fb2eeb2d8 | |||
3cf2474938 | |||
ce1e850c78 | |||
5200a4d8d4 | |||
0a41429d71 | |||
bc967cf926 | |||
d28c6dc820 | |||
10d25167e8 | |||
346798dc9a | |||
7584390408 | |||
3988ad3811 | |||
72600364ff | |||
68977e4a86 | |||
92b3d4f94e | |||
852eb0d87b | |||
c8143bcf67 | |||
75dc5c0294 | |||
21341caf62 | |||
ee9cf694a0 | |||
d347bd0a41 | |||
e5cca58198 | |||
259de3d3aa | |||
c30e3db1a1 | |||
fb5718dc61 | |||
6043c21de5 | |||
c3c14d6ead | |||
41675ed874 | |||
dc2503b045 | |||
b76ef7efb3 | |||
c67b49790f | |||
86b29b982c | |||
f17b4924c9 | |||
e162da7e7b | |||
6f1ba71664 | |||
16e0c9542e | |||
e41b7515d3 | |||
52b8db70be | |||
184064d199 | |||
ae1684a885 | |||
688041b6be | |||
4adf2eb84a | |||
3f8af384b0 | |||
79f2594a2f | |||
547f224140 | |||
94937a75a2 |
13
.github/FUNDING.yml
vendored
Normal file
13
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: shamrock320 # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
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 }}
|
BIN
AudioLibrary-x64.zip
Normal file
BIN
AudioLibrary-x64.zip
Normal file
Binary file not shown.
42
README.md
42
README.md
@ -10,26 +10,26 @@
|
||||
![][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/)!
|
||||
|
||||
## 兼容|迁移|替代 说明
|
||||
|
||||
- 一键移植:本项目基于 go-cqhttp 的文档进行开发实现。
|
||||
- 平行部署:可多平台部署,未来将会支持 Docker 部署的教程。
|
||||
|
||||
> 若您追求小而轻便的Bot服务, [Chronocat](https://chronocat.vercel.app/)是您的不二之选。
|
||||
|
||||
## 权限声明
|
||||
|
||||
> 如出现未在此处声明的权限,请警惕 Shamrock 是否被修改/植入恶意代码
|
||||
@ -44,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"> **我可爱吗?欢迎你的到来,这里是一个很大的地方,有着无限可能,主要是有你啦!**
|
||||
|
||||
## 开源协议
|
||||
|
||||
@ -69,38 +69,36 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
[![][contrib-image]][contrib-link]
|
||||
|
||||
[banner]: https://socialify.git.ci/whitechi73/Shamrock/image?description=1&forks=1&issues=1&logo=https%3A%2F%2Fwhitechi73.github.io%2FShamrock%2Fshamrock.jpg&pattern=Plus&pulls=1&stargazers=1&theme=Auto
|
||||
[banner]: https://socialify.git.ci/whitechi73/OpenShamrock/image?description=1&forks=1&issues=1&logo=https%3A%2F%2Fwhitechi73.github.io%2FOpenShamrock%2Fshamrock.jpg&pattern=Plus&pulls=1&stargazers=1&theme=Auto
|
||||
|
||||
[actions]: https://img.shields.io/github/actions/workflow/status/whitechi73/Shamrock/build-apk.yml?style=for-the-badge
|
||||
[actions]: https://img.shields.io/github/actions/workflow/status/whitechi73/OpenShamrock/build-apk.yml?style=for-the-badge
|
||||
|
||||
[actions-link]: https://github.com/whitechi73/Shamrock/actions/workflows/build-apk.yml
|
||||
[actions-link]: https://github.com/whitechi73/OpenShamrock/actions/workflows/build-apk.yml
|
||||
|
||||
[releases]: https://img.shields.io/github/v/release/whitechi73/Shamrock?style=for-the-badge
|
||||
[releases]: https://img.shields.io/github/v/release/whitechi73/OpenShamrock?style=for-the-badge
|
||||
|
||||
[releases-link]: https://github.com/whitechi73/Shamrock/releases
|
||||
[releases-link]: https://github.com/whitechi73/OpenShamrock/releases
|
||||
|
||||
[downloads]: https://img.shields.io/github/downloads/whitechi73/Shamrock/total?style=for-the-badge
|
||||
[downloads]: https://img.shields.io/github/downloads/whitechi73/OpenShamrock/total?style=for-the-badge
|
||||
|
||||
[license]: https://img.shields.io/github/license/whitechi73/Shamrock?style=for-the-badge
|
||||
[license]: https://img.shields.io/github/license/whitechi73/OpenShamrock?style=for-the-badge
|
||||
|
||||
[onebot-11]: https://img.shields.io/badge/OneBot-11-black?style=for-the-badge
|
||||
|
||||
[onebot-12]: https://img.shields.io/badge/OneBot-12-black?style=for-the-badge
|
||||
|
||||
[download-link]: https://whitechi73.github.io/Shamrock/guide/getting-started.html#%E4%B8%8B%E8%BD%BD
|
||||
[download-link]: https://whitechi73.github.io/OpenShamrock/guide/getting-started.html#%E4%B8%8B%E8%BD%BD
|
||||
|
||||
[deploy-link]: https://whitechi73.github.io/Shamrock/guide/getting-started.html#%E9%83%A8%E7%BD%B2
|
||||
[deploy-link]: https://whitechi73.github.io/OpenShamrock/guide/getting-started.html#%E9%83%A8%E7%BD%B2
|
||||
|
||||
[api-link]: https://whitechi73.github.io/Shamrock/api
|
||||
[api-link]: https://whitechi73.github.io/OpenShamrock/api
|
||||
|
||||
[docs-link]: https://whitechi73.github.io/Shamrock/
|
||||
[docs-link]: https://whitechi73.github.io/OpenShamrock/
|
||||
|
||||
[group-link]: https://whitechi73.github.io/Shamrock/group.html
|
||||
[hook-system]: https://github.com/whitechi73/OpenShamrock/blob/master/xposed/src/main/java/moe/fuqiuluo/shamrock/xposed/loader/KeepAlive.kt
|
||||
|
||||
[hook-system]: https://github.com/whitechi73/Shamrock/wiki/perm_hook_android
|
||||
[voice-support]: https://whitechi73.github.io/OpenShamrock/advanced/voice.html
|
||||
|
||||
[voice-support]: https://whitechi73.github.io/Shamrock/advanced/voice.html
|
||||
[contrib-image]: https://contrib.rocks/image?repo=whitechi73/OpenShamrock
|
||||
|
||||
[contrib-image]: https://contrib.rocks/image?repo=whitechi73/Shamrock
|
||||
|
||||
[contrib-link]: https://github.com/whitechi73/Shamrock/graphs/contributors
|
||||
[contrib-link]: https://github.com/whitechi73/OpenShamrock/graphs/contributors
|
||||
|
@ -1,12 +1,5 @@
|
||||
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")
|
||||
@ -17,19 +10,20 @@ plugins {
|
||||
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.5-dev" + gitCommitHash()
|
||||
minSdk = 27
|
||||
targetSdk = 34
|
||||
versionCode = getVersionCode()
|
||||
versionName = "1.0.7" + ".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
|
||||
@ -66,19 +59,23 @@ android {
|
||||
create("app") {
|
||||
dimension = "mode"
|
||||
ndk {
|
||||
println("Full architecture and full compilation.")
|
||||
abiFilters.add("arm64-v8a")
|
||||
abiFilters.add("x86_64")
|
||||
abiFilters.add("x86")
|
||||
}
|
||||
}
|
||||
create("arm64") {
|
||||
dimension = "mode"
|
||||
ndk {
|
||||
println("Full compilation of arm64 architecture")
|
||||
abiFilters.add("arm64-v8a")
|
||||
}
|
||||
}
|
||||
create("x64") {
|
||||
dimension = "mode"
|
||||
ndk {
|
||||
println("Full compilation of x64 architecture")
|
||||
abiFilters.add("x86_64")
|
||||
}
|
||||
}
|
||||
@ -130,6 +127,11 @@ android {
|
||||
}
|
||||
|
||||
configureAppSigningConfigsForRelease(project)
|
||||
packagingOptions {
|
||||
jniLibs {
|
||||
useLegacyPackaging = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun configureAppSigningConfigsForRelease(project: Project) {
|
||||
@ -151,10 +153,39 @@ 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")
|
||||
@ -173,24 +204,19 @@ dependencies {
|
||||
implementation("io.coil-kt:coil:2.4.0")
|
||||
implementation("io.coil-kt:coil-compose:2.4.0")
|
||||
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1")
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-io-jvm:0.1.16")
|
||||
implementation("io.ktor:ktor-server-core:2.3.3")
|
||||
implementation("io.ktor:ktor-server-host-common:2.3.3")
|
||||
implementation("io.ktor:ktor-server-status-pages:2.3.3")
|
||||
implementation("io.ktor:ktor-server-netty:2.3.3")
|
||||
implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.3")
|
||||
implementation("io.ktor:ktor-server-content-negotiation:2.3.3")
|
||||
implementation("io.ktor:ktor-client-core:2.3.3")
|
||||
implementation("io.ktor:ktor-client-cio:2.3.3")
|
||||
implementation("io.ktor:ktor-client-content-negotiation:2.3.3")
|
||||
implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.3")
|
||||
// useless
|
||||
//implementation ("com.maxkeppeler.sheets-compose-dialogs:core:1.2.0")
|
||||
//implementation ("com.maxkeppeler.sheets-compose-dialogs:info:1.2.0")
|
||||
//implementation ("com.maxkeppeler.sheets-compose-dialogs:input:1.2.0")
|
||||
//implementation ("com.maxkeppeler.sheets-compose-dialogs:list:1.2.0")
|
||||
//implementation ("com.maxkeppeler.sheets-compose-dialogs:state:1.2.0")
|
||||
|
||||
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(project(":xposed"))
|
||||
|
||||
|
@ -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"
|
||||
@ -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);
|
||||
|
@ -61,8 +61,8 @@ const std::byte MD5::PADDING[64] = { (byte) 0x80 };
|
||||
const char MD5::HEX[16] = {
|
||||
'0', '1', '2', '3',
|
||||
'4', '5', '6', '7',
|
||||
'8', '9', 'a', 'b',
|
||||
'c', 'd', 'e', 'f'
|
||||
'8', '9', 'A', 'B',
|
||||
'C', 'D', 'E', 'F'
|
||||
};
|
||||
|
||||
|
||||
|
@ -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
|
||||
@ -120,6 +121,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 +142,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,29 +249,49 @@ object ShamrockConfig {
|
||||
return preferences.getBoolean("enable_auto_start", 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)
|
||||
}
|
||||
|
||||
fun setAutoStart(ctx: Context, v: Boolean) {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
preferences.edit().putBoolean("enable_auto_start", 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()
|
||||
}
|
||||
|
||||
fun enableSelfMsg(ctx: Context): Boolean {
|
||||
val preferences = ctx.getSharedPreferences("config", 0)
|
||||
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?> {
|
||||
@ -283,11 +313,15 @@ 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),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -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(
|
||||
@ -257,10 +258,10 @@ private fun APIInfoCard(
|
||||
hint = "请输入被动地址",
|
||||
error = "输入的地址不合法",
|
||||
checker = {
|
||||
it.isNotBlank()
|
||||
true
|
||||
},
|
||||
confirm = {
|
||||
if (it.startsWith("ws://") || it.startsWith("wss://")) {
|
||||
if (it.startsWith("ws://") || it.startsWith("wss://") || it.isBlank()) {
|
||||
ShamrockConfig.setWsAddr(ctx, wsAddress.value)
|
||||
AppRuntime.log("设置被动WebSocket地址为[${wsAddress.value}]。")
|
||||
} else {
|
||||
@ -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)
|
||||
) {
|
||||
@ -90,7 +92,92 @@ fun LabFragment() {
|
||||
modifier = Modifier.padding(top = 12.dp),
|
||||
painter = painterResource(id = R.drawable.round_logo_dev_24),
|
||||
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
|
||||
}
|
||||
|
||||
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 +186,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,16 +197,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
|
||||
}
|
||||
}
|
||||
|
||||
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(
|
||||
@ -151,7 +242,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
|
||||
}
|
||||
}
|
||||
@ -180,6 +275,18 @@ 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",
|
||||
desc = "在部分强类型语言框架,需要打开此开关。",
|
||||
@ -189,7 +296,7 @@ fun LabFragment() {
|
||||
ShamrockConfig.setEchoNumber(ctx, it)
|
||||
ShamrockConfig.pushUpdate(ctx)
|
||||
return@Function true
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ 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
|
||||
@ -58,7 +59,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,7 @@
|
||||
// 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("com.android.application") version "8.2.0" apply false
|
||||
id("org.jetbrains.kotlin.android") version "1.8.10" apply false
|
||||
id("com.android.library") version "8.1.2" apply false
|
||||
id("com.android.library") version "8.2.0" apply false
|
||||
//id("io.realm.kotlin") version "1.11.0" apply 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
|
||||
|
@ -5,12 +5,11 @@ plugins {
|
||||
|
||||
android {
|
||||
namespace = "moe.fuqiuluo.qqinterface"
|
||||
compileSdk = 33
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
minSdk = 24
|
||||
minSdk = 27
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
consumerProguardFiles("consumer-rules.pro")
|
||||
}
|
||||
|
||||
@ -36,7 +35,4 @@ 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")
|
||||
testImplementation("junit:junit:4.13.2")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
@ -1,6 +1,50 @@
|
||||
package com.tencent.mobileqq.pb;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class MessageMicro<T extends MessageMicro<T>> {
|
||||
public static final class FieldMap {
|
||||
private Object[] defaultValues;
|
||||
private Field[] fields;
|
||||
private int[] tags;
|
||||
|
||||
FieldMap(int[] iArr, String[] strArr, Object[] objArr, Class<?> cls) {
|
||||
this.tags = iArr;
|
||||
this.defaultValues = objArr;
|
||||
this.fields = new Field[iArr.length];
|
||||
for (int i2 = 0; i2 < iArr.length; i2++) {
|
||||
try {
|
||||
this.fields[i2] = cls.getField(strArr[i2]);
|
||||
} catch (Exception e2) {
|
||||
e2.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void clear(MessageMicro<?> messageMicro) {
|
||||
}
|
||||
|
||||
<U extends MessageMicro<U>> void copyFields(U u, U u2) {
|
||||
}
|
||||
|
||||
Field get(int i2) {
|
||||
int binarySearch = Arrays.binarySearch(this.tags, i2);
|
||||
if (binarySearch < 0) {
|
||||
return null;
|
||||
}
|
||||
return this.fields[binarySearch];
|
||||
}
|
||||
|
||||
int getSerializedSize(MessageMicro<?> messageMicro) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static FieldMap initFieldMap(int[] iArr, String[] strArr, Object[] objArr, Class<?> cls) {
|
||||
return new FieldMap(iArr, strArr, objArr, cls);
|
||||
}
|
||||
|
||||
public final T mergeFrom(byte[] bArr) {
|
||||
return null;
|
||||
}
|
||||
|
@ -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) {
|
||||
}
|
||||
}
|
@ -0,0 +1,186 @@
|
||||
package com.tencent.mobileqq.relation.api;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.widget.TextView;
|
||||
import com.tencent.common.app.AppInterface;
|
||||
import com.tencent.mobileqq.data.MessageRecord;
|
||||
import com.tencent.mobileqq.data.PhoneContact;
|
||||
import com.tencent.mobileqq.qroute.QRouteApi;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import tencent.mobileim.structmsg.*;
|
||||
|
||||
public interface IAddFriendTempApi extends QRouteApi {
|
||||
public static final int ENTER_FROM_CONTACT_TAB = 1;
|
||||
|
||||
public static final int ENTER_FROM_DEFAULT = 0;
|
||||
|
||||
public static final int ENTER_FROM_MESSAGE_TAB = 2;
|
||||
|
||||
public static final int ENTER_FROM_NEW_FRIEND = 3;
|
||||
|
||||
public static final int ENTER_FROM_NEW_FRIEND_MORE = 4;
|
||||
|
||||
// void addBatchQIMFriends(List<QIMNotifyAddFriend> paramList, AppInterface paramAppInterface);
|
||||
|
||||
void addFriendToFriendList(AppInterface paramAppInterface, String paramString1, int paramInt1, int paramInt2, String paramString2, boolean paramBoolean1, boolean paramBoolean2, long paramLong);
|
||||
|
||||
void addListener(Object paramObject, AppInterface paramAppInterface);
|
||||
|
||||
void cancelMayKnowRecommend(String paramString, AppInterface paramAppInterface);
|
||||
|
||||
// void changeStructMsgActions(structmsg.StructMsg paramStructMsg, int paramInt1, String paramString, int paramInt2);
|
||||
|
||||
// boolean changeStructMsgActionsWhenFail(structmsg.StructMsg paramStructMsg, int paramInt, String paramString1, String paramString2);
|
||||
|
||||
void checkReadContactPermission(Runnable paramRunnable, AppInterface paramAppInterface);
|
||||
|
||||
void checkUpdate(AppInterface paramAppInterface, String paramString);
|
||||
|
||||
void clearAllSystemMsg(AppInterface paramAppInterface);
|
||||
|
||||
void clickQIMSource(Context paramContext, MessageRecord paramMessageRecord, AppInterface paramAppInterface);
|
||||
|
||||
Intent composeReturnIntent(Class<?> paramClass, String paramString, Activity paramActivity);
|
||||
|
||||
void deleteAllSuspiciousMsg(AppInterface paramAppInterface);
|
||||
|
||||
// void deleteQIMNotifyAddFriendData(QIMNotifyAddFriend paramQIMNotifyAddFriend, AppInterface paramAppInterface);
|
||||
|
||||
boolean enableCheckPermission();
|
||||
|
||||
void followUser(String paramString, boolean paramBoolean);
|
||||
|
||||
Intent getAddRequestIntent(Context paramContext);
|
||||
|
||||
Intent getBindNumberIntent(Context paramContext);
|
||||
|
||||
Intent getChatActivityIntent(Context paramContext);
|
||||
|
||||
// ArrayList<MayKnowRecommend> getConnectionsPersonLocal(int paramInt, AppInterface paramAppInterface);
|
||||
|
||||
void getConnectionsPersonRemoteNextPage(int paramInt, AppInterface paramAppInterface);
|
||||
|
||||
// ArrayList<a> getConnectionsTabInfoListLocal(AppInterface paramAppInterface);
|
||||
|
||||
void getDiscussInfo(long paramLong, AppInterface paramAppInterface);
|
||||
|
||||
String getDiscussionNameCanNull(AppInterface paramAppInterface, String paramString);
|
||||
|
||||
int getForwardSelectionRequest();
|
||||
|
||||
Intent getFriendProfileMoreInfoIntent(Context paramContext);
|
||||
|
||||
int getMayKnowLoadConnectionBizTypeFirstLoad();
|
||||
|
||||
int getMayKnowPersonNum(AppInterface paramAppInterface);
|
||||
|
||||
boolean getMayKnowRecommendRemoteFromNewFrd(AppInterface paramAppInterface);
|
||||
|
||||
String getQIMNewFriendSource(AppInterface paramAppInterface);
|
||||
|
||||
// ArrayList<s> getQIMNotifyAddFriendsMsg(boolean paramBoolean, AppInterface paramAppInterface);
|
||||
|
||||
String getQQInfoFromQQUin(long paramLong1, long paramLong2, AppInterface paramAppInterface);
|
||||
|
||||
HashMap<String, String> getQidianExternal(HashMap<String, Object> paramHashMap);
|
||||
|
||||
// String getRecommendLabelString(List<MayKnowRecommend.MayKnowRecommendLabel> paramList);
|
||||
|
||||
int getRequestForSetting();
|
||||
|
||||
int getSizeSmall();
|
||||
|
||||
void getSuspiciousFriendsUnreadNum(AppInterface paramAppInterface);
|
||||
|
||||
int getTypeSetConnectionsSwitch();
|
||||
|
||||
Object getValue(String paramString1, String paramString2, int paramInt1, int paramInt2);
|
||||
|
||||
void gotoFriendSettingBrowser(Context paramContext);
|
||||
|
||||
boolean hasQidianExternal(HashMap<String, Object> paramHashMap);
|
||||
|
||||
boolean hasQimSource(AppInterface paramAppInterface);
|
||||
|
||||
void insertCommonHobbyIfNeeded(AppInterface paramAppInterface, String paramString);
|
||||
|
||||
boolean isMayKnowConnectionsUserClosed(AppInterface paramAppInterface);
|
||||
|
||||
boolean isNewFrdMiniCardSwitchOn(AppInterface paramAppInterface);
|
||||
|
||||
boolean isPhoneContactEnabled(AppInterface paramAppInterface);
|
||||
|
||||
boolean isQidianMaster(AppInterface paramAppInterface, String paramString);
|
||||
|
||||
boolean isStudyMode(AppInterface paramAppInterface);
|
||||
|
||||
boolean isSuspiciousSwitchOpen();
|
||||
|
||||
// void jumpToMoveGroup(Activity paramActivity, QBaseFragment paramQBaseFragment, String paramString, int paramInt1, int paramInt2);
|
||||
|
||||
void jumpToNewFriendMoreSysMsgSuspiciousFragment(Context paramContext);
|
||||
|
||||
void jumpToNewFriendMoreSysMsgSuspiciousFragment(Context paramContext, Intent paramIntent, int paramInt);
|
||||
|
||||
void jumpToQidianProfile(String paramString, Activity paramActivity);
|
||||
|
||||
void jumpToSplash(Activity paramActivity);
|
||||
|
||||
void launchPluginBroadcastWhenToggleSwitch(String paramString, AppInterface paramAppInterface, boolean paramBoolean);
|
||||
|
||||
void loadConnectionsTabData(AppInterface paramAppInterface, int paramInt1, int paramInt2);
|
||||
|
||||
void markQIMNotifyAddFriendsRead(AppInterface paramAppInterface);
|
||||
|
||||
// void openSecCheckWebForFragment(AppInterface paramAppInterface, Context paramContext, QBaseFragment paramQBaseFragment, int paramInt, String paramString1, String paramString2);
|
||||
|
||||
// void recordStartExpose(MayKnowRecommend paramMayKnowRecommend, int paramInt1, int paramInt2, int paramInt3, AppInterface paramAppInterface);
|
||||
|
||||
// void recordStopExpose(MayKnowRecommend paramMayKnowRecommend, int paramInt1, int paramInt2, int paramInt3, AppInterface paramAppInterface);
|
||||
|
||||
void removeListener(Object paramObject, AppInterface paramAppInterface);
|
||||
|
||||
void reportExtendFriend(int paramInt, String paramString, Intent paramIntent);
|
||||
|
||||
void reportRecommend(AppInterface paramAppInterface, String paramString1, String paramString2, int paramInt1, int paramInt2, String paramString3, int paramInt3, byte[] paramArrayOfbyte, String paramString4, int paramInt4);
|
||||
|
||||
void reportRecommendExpose(AppInterface paramAppInterface, int paramInt1, ArrayList<String> paramArrayList1, ArrayList<String> paramArrayList2, ArrayList<Integer> paramArrayList, ArrayList<byte[]> paramArrayList3, int paramInt2);
|
||||
|
||||
void sendAddFriendNoticeForBaby(AppInterface paramAppInterface, Intent paramIntent);
|
||||
|
||||
// void sendDelSingleSystemMsg(structmsg.StructMsg paramStructMsg, String paramString, int paramInt, long paramLong, AppInterface paramAppInterface);
|
||||
|
||||
void sendFriendSystemMsgAction(int msg_type, long msg_seq, long req_uin, int sub_type, int src_id, int sub_src_id, int group_msg_type, structmsg$SystemMsgActionInfo action_info, int system_msg_action_type, structmsg$StructMsg paramStructMsg, boolean isUncommonlyUsedFrd, AppInterface paramAppInterface);
|
||||
|
||||
void sendFriendSystemMsgReadedReport(AppInterface paramAppInterface);
|
||||
|
||||
void sendGetNextFriendSystemMsg(AppInterface paramAppInterface);
|
||||
|
||||
void sendPokeMsg(AppInterface paramAppInterface, Context paramContext, String paramString);
|
||||
|
||||
void setConnectionsSwitch(boolean paramBoolean, AppInterface paramAppInterface);
|
||||
|
||||
boolean shouldShowMayKnowInNewFriend(AppInterface paramAppInterface);
|
||||
|
||||
// void startAddContactsPage(Context paramContext, int paramInt1, int paramInt2, LaunchMode paramLaunchMode, @Nullable Bundle paramBundle);
|
||||
|
||||
void startAddContactsPageForResult(Activity paramActivity, int paramInt1, int paramInt2, int paramInt3);
|
||||
|
||||
void startAddRequestPage(Context paramContext, Intent paramIntent);
|
||||
|
||||
void startAddRequestPageForResult(Activity paramActivity, Intent paramIntent, int paramInt);
|
||||
|
||||
void startAddRequestSuspiciousPage(Context paramContext, Intent paramIntent);
|
||||
|
||||
void startContactBindFromOther(AppInterface paramAppInterface, int paramInt1, int paramInt2, Intent paramIntent);
|
||||
|
||||
void startContactBindFromOther(AppInterface paramAppInterface, int paramInt, ArrayList<PhoneContact> paramArrayList);
|
||||
|
||||
void startRemarkAfterAgree(Activity paramActivity, int paramInt, String paramString, long paramLong, Bundle paramBundle);
|
||||
|
||||
void updateCustomNoteTxt(TextView paramTextView, int paramInt1, int paramInt2);
|
||||
}
|
@ -8,6 +8,11 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import mqq.app.AppRuntime;
|
||||
|
||||
public class BaseTransFileController implements ITransFileController {
|
||||
@Override
|
||||
public boolean containsProcessor(String name, long uin) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IHttpCommunicatorListener findProcessor(String str) {
|
||||
return null;
|
||||
|
@ -0,0 +1,51 @@
|
||||
package com.tencent.mobileqq.transfile;
|
||||
|
||||
public class HttpNetReq extends NetReq {
|
||||
public static final int HTTP_GET = 0;
|
||||
public static final int HTTP_POST = 1;
|
||||
public IFlowDecoder decoder;
|
||||
public DnsParseCallback mDnsParseCallback;
|
||||
public boolean mHaveIpConnect;
|
||||
public String mHostForHttpsVerify;
|
||||
public int mHttpMethod;
|
||||
public boolean mIsHostIP;
|
||||
public boolean mIsHttps;
|
||||
public boolean mIsPreStructPic;
|
||||
public boolean mIsSync;
|
||||
public boolean mNeedIpConnect;
|
||||
public boolean mNeedNotReferer;
|
||||
public boolean mNeedRedirectCallback;
|
||||
public String mReqUrl;
|
||||
public TimeoutParam mTimeoutParam;
|
||||
public boolean mUseCmwapConnectionTypeFromDpc;
|
||||
public String[] mWhiteListContentType;
|
||||
|
||||
public interface DecoderState {
|
||||
public static final int STATE_END = 2;
|
||||
public static final int STATE_INIT = 0;
|
||||
public static final int STATE_RUNNING = 1;
|
||||
}
|
||||
|
||||
public interface DnsParseCallback {
|
||||
void end();
|
||||
|
||||
void start();
|
||||
}
|
||||
|
||||
public interface IFlowDecoder {
|
||||
byte[] decode(byte[] bArr);
|
||||
|
||||
boolean isFinish();
|
||||
|
||||
void reset();
|
||||
}
|
||||
|
||||
public HttpNetReq() {
|
||||
this.mHttpMethod = 0;
|
||||
this.mNeedIpConnect = false;
|
||||
this.mHaveIpConnect = false;
|
||||
this.mNeedRedirectCallback = false;
|
||||
this.mUseCmwapConnectionTypeFromDpc = false;
|
||||
this.mNeedNotReferer = false;
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package com.tencent.mobileqq.transfile;
|
||||
|
||||
public interface INetEngineListener {
|
||||
void onResp(NetResp netResp);
|
||||
|
||||
void onUpdateProgeress(NetReq netReq, long j2, long j3);
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package com.tencent.mobileqq.transfile;
|
||||
|
||||
public interface NetFailedListener {
|
||||
void onFailed(NetResp netResp);
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
package com.tencent.mobileqq.transfile;
|
||||
|
||||
import java.io.OutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class NetReq {
|
||||
public static final int PRIOTY_HIGH = 0;
|
||||
public static final int PRIOTY_LOW = 2;
|
||||
public static final int PRIOTY_NORMAL = 1;
|
||||
public boolean bAcceptNegativeContentLength;
|
||||
public int mBusiProtoType;
|
||||
public INetEngineListener mCallback;
|
||||
public boolean mCanPrintUrl;
|
||||
public int mContinuErrorLimit;
|
||||
public int mContinueConnReusedErrorLimit;
|
||||
public long mDelayTime;
|
||||
public long mEndDownOffset;
|
||||
public long mExcuteTimeLimit;
|
||||
public NetFailedListener mFailedListener;
|
||||
public int mFileType;
|
||||
public HostParseToIp mHostParseToIp;
|
||||
public boolean mIsNetChgAsError;
|
||||
public boolean mIsRenameInEngine;
|
||||
public String mKey;
|
||||
public String mMsgId;
|
||||
public String mOutPath;
|
||||
public OutputStream mOutStream;
|
||||
public int mPrioty;
|
||||
public Object mPrivate;
|
||||
public HashMap<String, String> mReqProperties;
|
||||
public NetResp mResp;
|
||||
public byte[] mSendData;
|
||||
public List<ServerAddr> mServerList;
|
||||
public long mStartDownOffset;
|
||||
public boolean mSupportBreakResume;
|
||||
public String mTempPath;
|
||||
public boolean mUseByteArrayPool;
|
||||
public boolean mUseRaf;
|
||||
private Object mUserData;
|
||||
public long taskStartTime;
|
||||
|
||||
public interface HostParseToIp {
|
||||
List<ServerAddr> getIpByHost(String str);
|
||||
}
|
||||
|
||||
public NetReq() {
|
||||
this.mStartDownOffset = 0L;
|
||||
this.mEndDownOffset = 0L;
|
||||
this.mIsRenameInEngine = true;
|
||||
this.mDelayTime = 0L;
|
||||
this.mExcuteTimeLimit = 480000L;
|
||||
this.mContinuErrorLimit = 8;
|
||||
this.mContinueConnReusedErrorLimit = 5;
|
||||
this.mIsNetChgAsError = false;
|
||||
this.mPrioty = 1;
|
||||
this.mResp = null;
|
||||
this.mCanPrintUrl = true;
|
||||
this.bAcceptNegativeContentLength = true;
|
||||
this.mUseByteArrayPool = false;
|
||||
this.mKey = null;
|
||||
this.taskStartTime = -1L;
|
||||
this.mReqProperties = new HashMap<>();
|
||||
}
|
||||
|
||||
public long getTaskCostTime() {
|
||||
return System.currentTimeMillis() - taskStartTime;
|
||||
}
|
||||
|
||||
public synchronized Object getUserData() {
|
||||
return mUserData;
|
||||
}
|
||||
|
||||
public boolean isWriteToFile() {
|
||||
return this.mOutPath != null;
|
||||
}
|
||||
|
||||
public boolean isWriteToStream() {
|
||||
return this.mOutStream != null;
|
||||
}
|
||||
|
||||
public boolean saveRecvDataInTransLayer() {
|
||||
return this.mOutPath != null || this.mOutStream != null;
|
||||
}
|
||||
|
||||
public synchronized void setUserData(Object obj) {
|
||||
this.mUserData = obj;
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package com.tencent.mobileqq.transfile;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class NetResp {
|
||||
public static final String KEY_FIRST_USE_IP = "firstserverip";
|
||||
public static final String KEY_RAW_REQ_HTTP_HEADER = "param_reqHeader";
|
||||
public static final String KEY_RAW_RESP_HTTP_HEADER = "param_rspHeader";
|
||||
public static final String KEY_REASON = "netresp_param_reason";
|
||||
public static final String KEY_USE_SERVER_IP = "serverip";
|
||||
public static final String KEY_USE_URL = "param_url";
|
||||
public static final int RESULT_DOWNLOADING = 3;
|
||||
public static final int RESULT_FAIL = 1;
|
||||
public static final int RESULT_NOT_SET = 2;
|
||||
public static final int RESULT_OK = 0;
|
||||
public long inQueueCost;
|
||||
public long mConsumeTime;
|
||||
public int mErrCode;
|
||||
public String mErrDesc;
|
||||
public int mHttpCode;
|
||||
public long mLastReqStartTime;
|
||||
public int mRedirectCount;
|
||||
public long mRedirectTime;
|
||||
public NetReq mReq;
|
||||
public byte[] mRespData;
|
||||
public HashMap<String, String> mRespProperties;
|
||||
public int mResult;
|
||||
public long mTotalBlockLen;
|
||||
public long mTotalFileLen;
|
||||
public int mTryTime;
|
||||
public long mWrittenBlockLen;
|
||||
public long reqCost;
|
||||
|
||||
public NetResp(NetReq netReq) {
|
||||
this.mResult = 2;
|
||||
this.mTotalFileLen = 0L;
|
||||
this.mTotalBlockLen = 0L;
|
||||
this.mWrittenBlockLen = 0L;
|
||||
this.mConsumeTime = 0L;
|
||||
this.mTryTime = 0;
|
||||
this.mRespProperties = new HashMap<>();
|
||||
this.mRedirectCount = 0;
|
||||
this.mRedirectTime = 0L;
|
||||
this.reqCost = 0L;
|
||||
this.inQueueCost = 0L;
|
||||
this.mReq = netReq;
|
||||
this.mLastReqStartTime = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
this.mResult = 2;
|
||||
this.mErrCode = 0;
|
||||
this.mErrDesc = "";
|
||||
this.mHttpCode = 0;
|
||||
this.mTotalFileLen = 0L;
|
||||
this.mTotalBlockLen = 0L;
|
||||
this.mWrittenBlockLen = 0L;
|
||||
this.mConsumeTime = 0L;
|
||||
this.mTryTime = 0;
|
||||
this.mRespData = null;
|
||||
this.mRespProperties.clear();
|
||||
}
|
||||
|
||||
public void setResult(int i2, int i3, String str, HashMap<String, String> hashMap) {
|
||||
this.mResult = i2;
|
||||
this.mErrCode = i3;
|
||||
this.mErrDesc = str;
|
||||
if (hashMap != null) {
|
||||
this.mRespProperties.putAll(hashMap);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package com.tencent.mobileqq.transfile;
|
||||
|
||||
public class TimeoutParam {
|
||||
public static final int TIMEOUT_STEP = 2000;
|
||||
private int connectTimeoutBias;
|
||||
public int connectTimeoutFor2G;
|
||||
public int connectTimeoutFor3G;
|
||||
public int connectTimeoutForWifi;
|
||||
public int readTimeoutFor2G;
|
||||
public int readTimeoutFor3G;
|
||||
public int readTimeoutForWifi;
|
||||
|
||||
public TimeoutParam() {
|
||||
this.readTimeoutFor2G = 40000;
|
||||
this.readTimeoutFor3G = 30000;
|
||||
this.readTimeoutForWifi = 20000;
|
||||
this.connectTimeoutFor2G = 20000;
|
||||
this.connectTimeoutFor3G = 15000;
|
||||
this.connectTimeoutForWifi = 10000;
|
||||
this.connectTimeoutBias = 0;
|
||||
}
|
||||
|
||||
public void adjustConnectTimeout(int i2) {
|
||||
|
||||
this.connectTimeoutBias = i2 * 2000;
|
||||
}
|
||||
|
||||
public int getConnectTimeout(int i2) {
|
||||
if (i2 != 1) {
|
||||
if (i2 == 3) {
|
||||
return this.connectTimeoutFor3G + this.connectTimeoutBias;
|
||||
}
|
||||
if (i2 != 4 && i2 != 5) {
|
||||
return this.connectTimeoutFor2G + this.connectTimeoutBias;
|
||||
}
|
||||
}
|
||||
return this.connectTimeoutForWifi + this.connectTimeoutBias;
|
||||
}
|
||||
|
||||
public int getReadTimeout(int i2) {
|
||||
if (i2 != 1) {
|
||||
if (i2 == 3) {
|
||||
return this.readTimeoutFor3G;
|
||||
}
|
||||
if (i2 != 4 && i2 != 5) {
|
||||
return this.readTimeoutFor2G;
|
||||
}
|
||||
}
|
||||
return this.readTimeoutForWifi;
|
||||
}
|
||||
|
||||
//public TimeoutParam clone() {
|
||||
// IPatchRedirector iPatchRedirector = $redirector_;
|
||||
// return (iPatchRedirector == null || !iPatchRedirector.hasPatch((short) 4)) ? new TimeoutParam(this) : (TimeoutParam) iPatchRedirector.redirect((short) 4, (Object) this);
|
||||
//}
|
||||
|
||||
TimeoutParam(TimeoutParam timeoutParam) {
|
||||
this.readTimeoutFor2G = 40000;
|
||||
this.readTimeoutFor3G = 30000;
|
||||
this.readTimeoutForWifi = 20000;
|
||||
this.connectTimeoutFor2G = 20000;
|
||||
this.connectTimeoutFor3G = 15000;
|
||||
this.connectTimeoutForWifi = 10000;
|
||||
this.connectTimeoutBias = 0;
|
||||
this.readTimeoutFor2G = timeoutParam.readTimeoutFor2G;
|
||||
this.readTimeoutFor3G = timeoutParam.readTimeoutFor3G;
|
||||
this.readTimeoutForWifi = timeoutParam.readTimeoutForWifi;
|
||||
this.connectTimeoutFor2G = timeoutParam.connectTimeoutFor2G;
|
||||
this.connectTimeoutFor3G = timeoutParam.connectTimeoutFor3G;
|
||||
this.connectTimeoutForWifi = timeoutParam.connectTimeoutForWifi;
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.tencent.mobileqq.transfile.api;
|
||||
|
||||
import com.tencent.mobileqq.transfile.NetReq;
|
||||
import com.tencent.mobileqq.transfile.NetResp;
|
||||
|
||||
import mqq.app.api.IRuntimeService;
|
||||
|
||||
@Deprecated
|
||||
public interface IHttpEngineService extends IRuntimeService {
|
||||
void cancelReq(NetReq netReq);
|
||||
|
||||
void sendReq(NetReq netReq);
|
||||
|
||||
NetResp sendReqSync(NetReq netReq);
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.tencent.mobileqq.transfile.api;
|
||||
|
||||
import com.tencent.mobileqq.qroute.QRouteApi;
|
||||
import com.tencent.mobileqq.transfile.NetReq;
|
||||
|
||||
public interface IOldHttpEngineProcessor extends QRouteApi {
|
||||
//void cancelMsg(HttpMsg httpMsg);
|
||||
|
||||
void cancelReq(NetReq netReq);
|
||||
|
||||
//int sendMsg(HttpMsg httpMsg);
|
||||
|
||||
void sendReq(NetReq netReq);
|
||||
}
|
@ -14,7 +14,7 @@ public interface ITransFileController extends IRuntimeService {
|
||||
//@Deprecated
|
||||
//void addProcessor(String str, IHttpCommunicatorListener iHttpCommunicatorListener);
|
||||
|
||||
//boolean containsProcessor(String str, long j2);
|
||||
boolean containsProcessor(String name, long uin);
|
||||
|
||||
IHttpCommunicatorListener findProcessor(String str);
|
||||
|
||||
|
@ -0,0 +1,28 @@
|
||||
package com.tencent.mobileqq.troop.api;
|
||||
|
||||
import mqq.app.api.IRuntimeService;
|
||||
import com.tencent.mobileqq.data.troop.TroopMemberInfo;
|
||||
|
||||
public interface ITroopMemberNameService extends IRuntimeService {
|
||||
String getTroopMemberColorNick(String str, String str2);
|
||||
|
||||
String getTroopMemberName(TroopMemberInfo troopMemberInfo);
|
||||
|
||||
String getTroopMemberName(String str, String str2);
|
||||
|
||||
String getTroopMemberName(String str, String str2, String str3, String str4);
|
||||
|
||||
String getTroopMemberName(String str, String str2, boolean z, boolean z2);
|
||||
|
||||
//void getTroopMemberNameAsync(String str, String str2, a aVar);
|
||||
|
||||
String getTroopMemberNameInUI(String str, String str2);
|
||||
|
||||
String getTroopMemberNameRemarkFirst(String str, String str2);
|
||||
|
||||
String getTroopMemberNameWithoutRemark(String str, String str2);
|
||||
|
||||
String getTroopMemberNick(String str, String str2);
|
||||
|
||||
String getTroopMemberNickByTroopCode(String str, String str2);
|
||||
}
|
@ -1,7 +1,9 @@
|
||||
package com.tencent.qqnt.kernel.api.impl;
|
||||
|
||||
import com.tencent.qqnt.kernel.nativeinterface.IKernelMsgListener;
|
||||
import com.tencent.qqnt.kernel.nativeinterface.IOperateCallback;
|
||||
import com.tencent.qqnt.kernel.nativeinterface.RichMediaFilePathInfo;
|
||||
import com.tencent.qqnt.kernel.nativeinterface.TempChatPrepareInfo;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@ -18,4 +20,8 @@ public class MsgService {
|
||||
public String getRichMediaFilePathForMobileQQSend(@NotNull RichMediaFilePathInfo richMediaFilePathInfo) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void prepareTempChat(TempChatPrepareInfo tempChatPrepareInfo, IOperateCallback cb) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -44,8 +44,6 @@ public final class Contact implements IKernelModel, Serializable {
|
||||
|
||||
public Contact(int i2, String str, String str2) {
|
||||
this.serialVersionUID = 1L;
|
||||
this.peerUid = "";
|
||||
this.guildId = "";
|
||||
this.chatType = i2;
|
||||
this.peerUid = str;
|
||||
this.guildId = str2;
|
||||
|
@ -1,7 +1,5 @@
|
||||
package com.tencent.qqnt.kernel.nativeinterface;
|
||||
|
||||
/* compiled from: P */
|
||||
/* loaded from: classes2.dex */
|
||||
public final class GroupFileCommonResult {
|
||||
String clientWording;
|
||||
int retCode;
|
||||
@ -29,8 +27,6 @@ public final class GroupFileCommonResult {
|
||||
}
|
||||
|
||||
public GroupFileCommonResult(int i2, String str, String str2) {
|
||||
this.retMsg = "";
|
||||
this.clientWording = "";
|
||||
this.retCode = i2;
|
||||
this.retMsg = str;
|
||||
this.clientWording = str2;
|
||||
|
@ -0,0 +1,4 @@
|
||||
package com.tencent.qqnt.kernel.nativeinterface;
|
||||
|
||||
public class GuildInteractiveNotificationItem {
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
package com.tencent.qqnt.kernel.nativeinterface;
|
||||
|
||||
public class GuildNotificationAbstractInfo {
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package com.tencent.qqnt.kernel.nativeinterface;
|
||||
|
||||
public interface IClearMsgRecordsCallback {
|
||||
void onResult(int code, String reason, long lastMsgId);
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
package com.tencent.qqnt.kernel.nativeinterface;
|
||||
|
||||
public interface IDeleteGroupFileCallback {
|
||||
void onResult(int i2, String str, DeleteGroupFileResult deleteGroupFileResult);
|
||||
void onResult(int code, String why, DeleteGroupFileResult result);
|
||||
}
|
@ -42,6 +42,10 @@ public interface IKernelMsgListener {
|
||||
|
||||
void onGroupTransferInfoUpdate(GroupFileListResult groupFileListResult);
|
||||
|
||||
void onGuildInteractiveUpdate(GuildInteractiveNotificationItem guildInteractiveNotificationItem);
|
||||
|
||||
void onGuildNotificationAbstractUpdate(GuildNotificationAbstractInfo guildNotificationAbstractInfo);
|
||||
|
||||
void onHitCsRelatedEmojiResult(DownloadRelateEmojiResultInfo downloadRelateEmojiResultInfo);
|
||||
|
||||
void onHitEmojiKeywordResult(HitRelatedEmojiWordsResult hitRelatedEmojiWordsResult);
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.tencent.qqnt.kernel.nativeinterface;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
@ -16,7 +18,25 @@ public interface IKernelMsgService {
|
||||
|
||||
void addLocalRecordMsg(Contact contact, long msgId, MsgElement elem, HashMap<Integer, MsgAttributeInfo> hashMap, boolean z, IOperateCallback callback);
|
||||
|
||||
void getMultiMsg(Contact contact, long msgId, long uniseq, IGetMultiMsgCallback cb);
|
||||
long getMsgUniqueId(long time);
|
||||
|
||||
void addSendMsg(long msgId, Contact contact, ArrayList<MsgElement> msgList, HashMap<Integer, MsgAttributeInfo> hashMap);
|
||||
|
||||
void getMsgs(@NotNull Contact contact, long startMsgId, int cnt, boolean queryOrder, @NotNull IMsgOperateCallback iMsgOperateCallback);
|
||||
|
||||
void getMsgsIncludeSelf(Contact contact, long startMsgId, int count, boolean queryOrder, IMsgOperateCallback iMsgOperateCallback);
|
||||
|
||||
void translatePtt2Text(long j2, Contact contact, MsgElement msgElement, IOperateCallback iOperateCallback);
|
||||
|
||||
void getMultiMsg(Contact contact, long rootMsgId, long parentMsgId, IGetMultiMsgCallback cb);
|
||||
|
||||
void multiForwardMsg(ArrayList<MultiMsgInfo> arrayList, Contact from, Contact to, IOperateCallback cb);
|
||||
|
||||
void setAllC2CAndGroupMsgRead(IOperateCallback cb);
|
||||
|
||||
void clearMsgRecords(Contact contact, IClearMsgRecordsCallback cb);
|
||||
|
||||
String createUidFromTinyId(long j2, long j3);
|
||||
|
||||
void switchBackGround(BackGroundInfo backGroundInfo, IOperateCallback cb);
|
||||
|
||||
|
@ -9,7 +9,7 @@ public interface IKernelRichMediaService {
|
||||
|
||||
void cancelTransferTask(Contact contact, ArrayList<Long> arrayList, ArrayList<Integer> arrayList2, IOperateTransferInfoCallback iOperateTransferInfoCallback);
|
||||
|
||||
void deleteGroupFile(long j2, String str, int i2, IDeleteGroupFileCallback iDeleteGroupFileCallback);
|
||||
void deleteGroupFile(long groupCode, String fileUid, int bizId, IDeleteGroupFileCallback cb);
|
||||
|
||||
void deleteTransferInfo(Contact contact, ArrayList<Long> arrayList, IOperateTransferInfoCallback iOperateTransferInfoCallback);
|
||||
|
||||
|
@ -18,7 +18,6 @@ public final class MarkdownElement {
|
||||
}
|
||||
|
||||
public MarkdownElement(String str) {
|
||||
this.content = "";
|
||||
this.content = str;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
package com.tencent.qqnt.kernel.nativeinterface;
|
||||
|
||||
/* compiled from: P */
|
||||
/* loaded from: classes2.dex */
|
||||
public final class MultiMsgInfo {
|
||||
long msgId;
|
||||
String senderShowName;
|
||||
@ -21,8 +19,6 @@ public final class MultiMsgInfo {
|
||||
return "MultiMsgInfo{msgId=" + this.msgId + ",senderShowName=" + this.senderShowName + ",}";
|
||||
}
|
||||
|
||||
public MultiMsgInfo(long j2, String str) {
|
||||
this.msgId = j2;
|
||||
this.senderShowName = str;
|
||||
public MultiMsgInfo(long msgId, String showName) {
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
package com.tencent.qqnt.kernel.nativeinterface;
|
||||
|
||||
/* compiled from: P */
|
||||
/* loaded from: classes.dex */
|
||||
public final class TempChatInfo {
|
||||
int chatType;
|
||||
String fromNick;
|
||||
|
@ -56,20 +56,14 @@ public final class TempChatPrepareInfo {
|
||||
return "TempChatPrepareInfo{chatType=" + this.chatType + ",peerUid=" + this.peerUid + ",peerNickname=" + this.peerNickname + ",fromGroupCode=" + this.fromGroupCode + ",sig=" + this.sig + ",selfUid=" + this.selfUid + ",selfPhone=" + this.selfPhone + ",gameSession=" + this.gameSession + ",}";
|
||||
}
|
||||
|
||||
public TempChatPrepareInfo(int i2, String str, String str2, String str3, byte[] bArr, String str4, String str5, TempChatGameSession tempChatGameSession) {
|
||||
this.peerUid = "";
|
||||
this.peerNickname = "";
|
||||
this.fromGroupCode = "";
|
||||
this.sig = new byte[0];
|
||||
this.selfUid = "";
|
||||
this.selfPhone = "";
|
||||
this.chatType = i2;
|
||||
this.peerUid = str;
|
||||
this.peerNickname = str2;
|
||||
this.fromGroupCode = str3;
|
||||
this.sig = bArr;
|
||||
this.selfUid = str4;
|
||||
this.selfPhone = str5;
|
||||
this.gameSession = tempChatGameSession;
|
||||
public TempChatPrepareInfo(int chatType, String peerId, String nickName, String fromGroup, byte[] sig, String selfUid, String selfPhone, TempChatGameSession session) {
|
||||
this.chatType = chatType;
|
||||
this.peerUid = peerId;
|
||||
this.peerNickname = nickName;
|
||||
this.fromGroupCode = fromGroup;
|
||||
this.sig = sig;
|
||||
this.selfUid = selfUid;
|
||||
this.selfPhone = selfPhone;
|
||||
this.gameSession = session;
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.tencent.qphone.base.remote.SimpleAccount;
|
||||
import com.tencent.qphone.base.remote.ToServiceMsg;
|
||||
|
||||
import mqq.app.api.IRuntimeService;
|
||||
@ -72,6 +73,10 @@ public abstract class AppRuntime {
|
||||
public <T extends IRuntimeService> T getRuntimeServiceIPCSync(@NonNull Class<T> cls, String str) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public void switchAccount(SimpleAccount simpleAccount, String process) {
|
||||
|
||||
}
|
||||
public String getAccount() {
|
||||
return "";
|
||||
}
|
||||
@ -81,6 +86,10 @@ public abstract class AppRuntime {
|
||||
return !"0".equals(getCurrentAccountUin()) ? getCurrentAccountUin() : "";
|
||||
}
|
||||
|
||||
public String getCurrentUid() {
|
||||
return "";
|
||||
}
|
||||
|
||||
public long getLongAccountUin() {
|
||||
return 0;
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package mqq.manager;
|
||||
import android.content.Context;
|
||||
|
||||
import oicq.wlogin_sdk.request.Ticket;
|
||||
import oicq.wlogin_sdk.request.WtTicketPromise;
|
||||
|
||||
public interface TicketManager extends Manager {
|
||||
String getA2(String uin);
|
||||
@ -15,6 +16,8 @@ public interface TicketManager extends Manager {
|
||||
|
||||
String getPskey(String uin, String domain);
|
||||
|
||||
Ticket getPskey(String str, long j2, String[] strArr, WtTicketPromise wtTicketPromise);
|
||||
|
||||
String getPt4Token(String uin, String domain);
|
||||
|
||||
String getSkey(String uin); // 假的Skey
|
||||
|
@ -0,0 +1,11 @@
|
||||
package oicq.wlogin_sdk.request;
|
||||
|
||||
import oicq.wlogin_sdk.tools.ErrMsg;
|
||||
|
||||
public interface WtTicketPromise {
|
||||
void Done(Ticket ticket);
|
||||
|
||||
void Failed(ErrMsg errMsg);
|
||||
|
||||
void Timeout(ErrMsg errMsg);
|
||||
}
|
118
qqinterface/src/main/java/oicq/wlogin_sdk/tools/ErrMsg.java
Normal file
118
qqinterface/src/main/java/oicq/wlogin_sdk/tools/ErrMsg.java
Normal file
@ -0,0 +1,118 @@
|
||||
package oicq.wlogin_sdk.tools;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
public class ErrMsg implements Cloneable, Parcelable {
|
||||
public static final Parcelable.Creator<ErrMsg> CREATOR = new Parcelable.Creator<ErrMsg>() { // from class: oicq.wlogin_sdk.tools.ErrMsg.1
|
||||
@Override // android.os.Parcelable.Creator
|
||||
public ErrMsg createFromParcel(Parcel parcel) {
|
||||
return new ErrMsg(parcel);
|
||||
}
|
||||
|
||||
@Override // android.os.Parcelable.Creator
|
||||
public ErrMsg[] newArray(int i2) {
|
||||
return new ErrMsg[i2];
|
||||
}
|
||||
};
|
||||
private String message;
|
||||
private String otherinfo;
|
||||
private String title;
|
||||
private int type;
|
||||
private int version;
|
||||
|
||||
public ErrMsg() {
|
||||
this.version = 0;
|
||||
this.type = 0;
|
||||
//this.title = InternationMsg.a(InternationMsg.MSG_TYPE.MSG_0);
|
||||
//this.message = InternationMsg.a(InternationMsg.MSG_TYPE.MSG_1);
|
||||
this.otherinfo = "";
|
||||
}
|
||||
|
||||
public ErrMsg(int i2, int i3, String str, String str2, String str3) {
|
||||
this.version = i2;
|
||||
this.type = i3;
|
||||
this.title = str;
|
||||
this.message = str2;
|
||||
this.otherinfo = str3;
|
||||
}
|
||||
|
||||
private ErrMsg(Parcel parcel) {
|
||||
readFromParcel(parcel);
|
||||
}
|
||||
|
||||
@Override // android.os.Parcelable
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return this.message;
|
||||
}
|
||||
|
||||
public String getOtherinfo() {
|
||||
return this.otherinfo;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return this.title;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public int getVersion() {
|
||||
return this.version;
|
||||
}
|
||||
|
||||
public void readFromParcel(Parcel parcel) {
|
||||
this.version = parcel.readInt();
|
||||
this.type = parcel.readInt();
|
||||
this.title = parcel.readString();
|
||||
this.message = parcel.readString();
|
||||
this.otherinfo = parcel.readString();
|
||||
}
|
||||
|
||||
public void setMessage(String str) {
|
||||
this.message = str;
|
||||
}
|
||||
|
||||
public void setOtherinfo(String str) {
|
||||
this.otherinfo = str;
|
||||
}
|
||||
|
||||
public void setTitle(String str) {
|
||||
this.title = str;
|
||||
}
|
||||
|
||||
public void setType(int i2) {
|
||||
this.type = i2;
|
||||
}
|
||||
|
||||
public void setVersion(int i2) {
|
||||
this.version = i2;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("(");
|
||||
int i2 = this.version;
|
||||
sb.append(i2 < 0 ? Integer.valueOf(i2) : Integer.toString(i2));
|
||||
sb.append(")(");
|
||||
int i3 = this.type;
|
||||
sb.append(i3 < 0 ? Integer.valueOf(i3) : Integer.toString(i3));
|
||||
sb.append(")[");
|
||||
String sb2 = sb.toString();
|
||||
return sb2 + this.title + "]" + this.message + "[" + this.otherinfo + "]";
|
||||
}
|
||||
|
||||
@Override // android.os.Parcelable
|
||||
public void writeToParcel(Parcel parcel, int i2) {
|
||||
parcel.writeInt(this.version);
|
||||
parcel.writeInt(this.type);
|
||||
parcel.writeString(this.title);
|
||||
parcel.writeString(this.message);
|
||||
parcel.writeString(this.otherinfo);
|
||||
}
|
||||
}
|
@ -0,0 +1,326 @@
|
||||
package tencent.im.group;
|
||||
|
||||
import com.tencent.mobileqq.pb.ByteStringMicro;
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBBoolField;
|
||||
import com.tencent.mobileqq.pb.PBBytesField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBRepeatField;
|
||||
import com.tencent.mobileqq.pb.PBRepeatMessageField;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public class group_member_info {
|
||||
public static class CustomEntry extends MessageMicro<tencent.im.group.group_member_info.CustomEntry> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBBoolField bool_clicked;
|
||||
|
||||
public final PBBytesField str_name;
|
||||
|
||||
public final PBBytesField str_url;
|
||||
|
||||
public final PBBytesField str_value;
|
||||
|
||||
public final PBUInt64Field uint64_report_id;
|
||||
|
||||
static {
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
Boolean bool = Boolean.FALSE;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 34, 40 }, new String[] { "str_name", "str_value", "bool_clicked", "str_url", "uint64_report_id" }, new Object[] { byteStringMicro, byteStringMicro, bool, byteStringMicro, Long.valueOf(0L) }, tencent.im.group.group_member_info.CustomEntry.class);
|
||||
}
|
||||
|
||||
public CustomEntry() {
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
this.str_name = PBField.initBytes(byteStringMicro);
|
||||
this.str_value = PBField.initBytes(byteStringMicro);
|
||||
this.bool_clicked = PBField.initBool(false);
|
||||
this.str_url = PBField.initBytes(byteStringMicro);
|
||||
this.uint64_report_id = PBField.initUInt64(0L);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ErrorInfo extends MessageMicro<tencent.im.group.group_member_info.ErrorInfo> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBUInt32Field error_code = PBField.initUInt32(0);
|
||||
|
||||
public final PBBytesField error_desc = PBField.initBytes(ByteStringMicro.EMPTY);
|
||||
|
||||
static {
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 18 }, new String[] { "error_code", "error_desc" }, new Object[] { Integer.valueOf(0), byteStringMicro }, tencent.im.group.group_member_info.ErrorInfo.class);
|
||||
}
|
||||
}
|
||||
|
||||
public static class FlowersEntry extends MessageMicro<tencent.im.group.group_member_info.FlowersEntry> {
|
||||
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8 }, new String[] { "uint64_flower_count" }, new Object[] { Long.valueOf(0L) }, tencent.im.group.group_member_info.FlowersEntry.class);
|
||||
|
||||
public final PBUInt64Field uint64_flower_count = PBField.initUInt64(0L);
|
||||
}
|
||||
|
||||
public static class GBarInfo extends MessageMicro<tencent.im.group.group_member_info.GBarInfo> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBBytesField bytes_gbar_name;
|
||||
|
||||
public final PBBytesField str_head_portrait;
|
||||
|
||||
public final PBUInt32Field uint32_gbar_id = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_uin_lev = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 26, 34 }, new String[] { "uint32_gbar_id", "uint32_uin_lev", "str_head_portrait", "bytes_gbar_name" }, new Object[] { integer, integer, byteStringMicro, byteStringMicro }, tencent.im.group.group_member_info.GBarInfo.class);
|
||||
}
|
||||
|
||||
public GBarInfo() {
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
this.str_head_portrait = PBField.initBytes(byteStringMicro);
|
||||
this.bytes_gbar_name = PBField.initBytes(byteStringMicro);
|
||||
}
|
||||
}
|
||||
|
||||
public static class MemberGameInfo extends MessageMicro<tencent.im.group.group_member_info.MemberGameInfo> {
|
||||
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 26, 34, 42, 50, 58 }, new String[] { "str_game_name", "str_level_name", "str_level_icon", "str_game_font_color", "str_game_background_color", "str_game_url", "str_desc_info" }, new Object[] { "", "", "", "", "", "", "" }, tencent.im.group.group_member_info.MemberGameInfo.class);
|
||||
|
||||
public final PBRepeatField<String> str_desc_info = PBField.initRepeat(PBField.initString(""));
|
||||
|
||||
public final PBStringField str_game_background_color = PBField.initString("");
|
||||
|
||||
public final PBStringField str_game_font_color = PBField.initString("");
|
||||
|
||||
public final PBStringField str_game_name = PBField.initString("");
|
||||
|
||||
public final PBStringField str_game_url = PBField.initString("");
|
||||
|
||||
public final PBStringField str_level_icon = PBField.initString("");
|
||||
|
||||
public final PBStringField str_level_name = PBField.initString("");
|
||||
}
|
||||
|
||||
|
||||
public static class MemberInfo extends MessageMicro<tencent.im.group.group_member_info.MemberInfo> {
|
||||
public static final int CONCERN_TYPE_CONCERN = 1;
|
||||
|
||||
public static final int CONCERN_TYPE_GENERAL = 0;
|
||||
|
||||
public static final int CONCERN_TYPE_HATE = 2;
|
||||
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBBoolField bool_is_allow_mod_card;
|
||||
|
||||
public final PBBoolField bool_is_concerned;
|
||||
|
||||
public final PBBoolField bool_is_friend;
|
||||
|
||||
public final PBBoolField bool_is_super_qq;
|
||||
|
||||
public final PBBoolField bool_is_super_vip;
|
||||
|
||||
public final PBBoolField bool_is_vip;
|
||||
|
||||
public final PBBoolField bool_is_year_vip;
|
||||
|
||||
public final PBBoolField bool_location_shared;
|
||||
|
||||
public final PBBytesField bytes_group_honor;
|
||||
|
||||
public final PBBytesField bytes_job;
|
||||
|
||||
public final PBBytesField bytes_phone_num;
|
||||
|
||||
public final PBBytesField bytes_special_title;
|
||||
|
||||
public final PBUInt32Field medal_id;
|
||||
|
||||
public tencent.im.group.group_member_info.FlowersEntry msg_flower_entry;
|
||||
|
||||
public tencent.im.group.group_member_info.MemberGameInfo msg_game_info;
|
||||
|
||||
public group_member_info.TeamEntry msg_team_entry;
|
||||
|
||||
// public group_member_info.RspGroupCardGetStory qqstory_infocard;
|
||||
|
||||
public final PBRepeatMessageField<tencent.im.group.group_member_info.CustomEntry> rpt_msg_custom_enties;
|
||||
|
||||
public final PBRepeatMessageField<tencent.im.group.group_member_info.GBarInfo> rpt_msg_gbar_concerned;
|
||||
|
||||
public final PBBytesField str_card;
|
||||
|
||||
public final PBBytesField str_errmsg;
|
||||
|
||||
public final PBBytesField str_gbar_title;
|
||||
|
||||
public final PBBytesField str_gbar_url;
|
||||
|
||||
public final PBBytesField str_lev;
|
||||
|
||||
public final PBBytesField str_location;
|
||||
|
||||
public final PBBytesField str_nick;
|
||||
|
||||
public final PBBytesField str_remark;
|
||||
|
||||
public final PBUInt32Field uint32_age;
|
||||
|
||||
public final PBUInt32Field uint32_concern_type;
|
||||
|
||||
public final PBUInt32Field uint32_credit;
|
||||
|
||||
public final PBUInt32Field uint32_gbar_cnt;
|
||||
|
||||
public final PBUInt32Field uint32_group_honor_bit;
|
||||
|
||||
public final PBUInt32Field uint32_level;
|
||||
|
||||
public final PBUInt32Field uint32_result = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_role;
|
||||
|
||||
public final PBUInt32Field uint32_sex;
|
||||
|
||||
public final PBUInt32Field uint32_special_title_expire_time;
|
||||
|
||||
public final PBUInt32Field uint32_vip_lev;
|
||||
|
||||
public final PBUInt64Field uint64_distance;
|
||||
|
||||
public final PBUInt64Field uint64_join;
|
||||
|
||||
public final PBUInt64Field uint64_last_speak;
|
||||
|
||||
public final PBUInt64Field uint64_uin = PBField.initUInt64(0L);
|
||||
|
||||
static {
|
||||
Long long_ = Long.valueOf(0L);
|
||||
Integer integer = Integer.valueOf(0);
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
Boolean bool = Boolean.FALSE;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
|
||||
8, 16, 26, 32, 42, 48, 56, 66, 72, 82,
|
||||
90, 96, 106, 112, 120, 130, 138, 146, 154, 160,
|
||||
168, 176, 184, 192, 200, 208, 216, 224, 232, 240,
|
||||
250, 256, 266, 274, 282, 290, 296, 306, 312, 322,
|
||||
330, 336 }, new String[] {
|
||||
"uint64_uin", "uint32_result", "str_errmsg", "bool_is_friend", "str_remark", "bool_is_concerned", "uint32_credit", "str_card", "uint32_sex", "str_location",
|
||||
"str_nick", "uint32_age", "str_lev", "uint64_join", "uint64_last_speak", "rpt_msg_custom_enties", "rpt_msg_gbar_concerned", "str_gbar_title", "str_gbar_url", "uint32_gbar_cnt",
|
||||
"bool_is_allow_mod_card", "bool_is_vip", "bool_is_year_vip", "bool_is_super_vip", "bool_is_super_qq", "uint32_vip_lev", "uint32_role", "bool_location_shared", "uint64_distance", "uint32_concern_type",
|
||||
"bytes_special_title", "uint32_special_title_expire_time", "msg_flower_entry", "msg_team_entry", "bytes_phone_num", "bytes_job", "medal_id", "qqstory_infocard", "uint32_level", "msg_game_info",
|
||||
"bytes_group_honor", "uint32_group_honor_bit" }, new Object[] {
|
||||
long_, integer, byteStringMicro, bool, byteStringMicro, bool, integer, byteStringMicro, integer, byteStringMicro,
|
||||
byteStringMicro, integer, byteStringMicro, long_, long_, null, null, byteStringMicro, byteStringMicro, integer,
|
||||
bool, bool, bool, bool, bool, integer, integer, bool, long_, integer,
|
||||
byteStringMicro, integer, null, null, byteStringMicro, byteStringMicro, integer, null, integer, null,
|
||||
byteStringMicro, integer }, tencent.im.group.group_member_info.MemberInfo.class);
|
||||
}
|
||||
|
||||
public MemberInfo() {
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
this.str_errmsg = PBField.initBytes(byteStringMicro);
|
||||
this.bool_is_friend = PBField.initBool(false);
|
||||
this.str_remark = PBField.initBytes(byteStringMicro);
|
||||
this.bool_is_concerned = PBField.initBool(false);
|
||||
this.uint32_credit = PBField.initUInt32(0);
|
||||
this.str_card = PBField.initBytes(byteStringMicro);
|
||||
this.uint32_sex = PBField.initUInt32(0);
|
||||
this.str_location = PBField.initBytes(byteStringMicro);
|
||||
this.str_nick = PBField.initBytes(byteStringMicro);
|
||||
this.uint32_age = PBField.initUInt32(0);
|
||||
this.str_lev = PBField.initBytes(byteStringMicro);
|
||||
this.uint64_join = PBField.initUInt64(0L);
|
||||
this.uint64_last_speak = PBField.initUInt64(0L);
|
||||
this.rpt_msg_custom_enties = PBField.initRepeatMessage(tencent.im.group.group_member_info.CustomEntry.class);
|
||||
this.rpt_msg_gbar_concerned = PBField.initRepeatMessage(tencent.im.group.group_member_info.GBarInfo.class);
|
||||
this.str_gbar_title = PBField.initBytes(byteStringMicro);
|
||||
this.str_gbar_url = PBField.initBytes(byteStringMicro);
|
||||
this.uint32_gbar_cnt = PBField.initUInt32(0);
|
||||
this.bool_is_allow_mod_card = PBField.initBool(false);
|
||||
this.bool_is_vip = PBField.initBool(false);
|
||||
this.bool_is_year_vip = PBField.initBool(false);
|
||||
this.bool_is_super_vip = PBField.initBool(false);
|
||||
this.bool_is_super_qq = PBField.initBool(false);
|
||||
this.uint32_vip_lev = PBField.initUInt32(0);
|
||||
this.uint32_role = PBField.initUInt32(0);
|
||||
this.bool_location_shared = PBField.initBool(false);
|
||||
this.uint64_distance = PBField.initUInt64(0L);
|
||||
this.uint32_concern_type = PBField.initUInt32(0);
|
||||
this.bytes_special_title = PBField.initBytes(byteStringMicro);
|
||||
this.uint32_special_title_expire_time = PBField.initUInt32(0);
|
||||
this.msg_flower_entry = new tencent.im.group.group_member_info.FlowersEntry();
|
||||
this.msg_team_entry = new group_member_info.TeamEntry();
|
||||
this.bytes_phone_num = PBField.initBytes(byteStringMicro);
|
||||
this.bytes_job = PBField.initBytes(byteStringMicro);
|
||||
this.medal_id = PBField.initUInt32(0);
|
||||
// this.qqstory_infocard = new group_member_info.RspGroupCardGetStory();
|
||||
this.uint32_level = PBField.initUInt32(0);
|
||||
this.msg_game_info = new tencent.im.group.group_member_info.MemberGameInfo();
|
||||
this.bytes_group_honor = PBField.initBytes(byteStringMicro);
|
||||
this.uint32_group_honor_bit = PBField.initUInt32(0);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ReqBody extends MessageMicro<tencent.im.group.group_member_info.ReqBody> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBBoolField bool_new_client = PBField.initBool(false);
|
||||
|
||||
public final PBUInt32Field uint32_client_type = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_rich_card_name_ver = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field uint64_uin = PBField.initUInt64(0L);
|
||||
|
||||
static {
|
||||
Long long_ = Long.valueOf(0L);
|
||||
Integer integer = Integer.valueOf(0);
|
||||
Boolean bool = Boolean.FALSE;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40 }, new String[] { "uint64_group_code", "uint64_uin", "bool_new_client", "uint32_client_type", "uint32_rich_card_name_ver" }, new Object[] { long_, long_, bool, integer, integer }, tencent.im.group.group_member_info.ReqBody.class);
|
||||
}
|
||||
}
|
||||
|
||||
public static class RspBody extends MessageMicro<RspBody> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBBoolField bool_self_location_shared = PBField.initBool(false);
|
||||
|
||||
public MemberInfo msg_meminfo = new MemberInfo();
|
||||
|
||||
public final PBUInt32Field uint32_group_type = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_self_role = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0L);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
Boolean bool = Boolean.FALSE;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 26, 32, 40 }, new String[] { "uint64_group_code", "uint32_self_role", "msg_meminfo", "bool_self_location_shared", "uint32_group_type" }, new Object[] { Long.valueOf(0L), integer, null, bool, integer }, tencent.im.group.group_member_info.RspBody.class);
|
||||
}
|
||||
}
|
||||
|
||||
public static class TeamEntry extends MessageMicro<TeamEntry> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBRepeatField<Long> rpt_uint64_depid;
|
||||
|
||||
public final PBRepeatField<Long> rpt_uint64_self_depid;
|
||||
|
||||
static {
|
||||
Long long_ = Long.valueOf(0L);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "rpt_uint64_depid", "rpt_uint64_self_depid" }, new Object[] { long_, long_ }, tencent.im.group.group_member_info.TeamEntry.class);
|
||||
}
|
||||
|
||||
public TeamEntry() {
|
||||
PBUInt64Field pBUInt64Field = (PBUInt64Field) PBUInt64Field.__repeatHelper__;
|
||||
this.rpt_uint64_depid = PBField.initRepeat((PBField)pBUInt64Field);
|
||||
this.rpt_uint64_self_depid = PBField.initRepeat((PBField)pBUInt64Field);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
package tencent.im.oidb.cmd0x899;
|
||||
|
||||
import com.tencent.mobileqq.pb.ByteStringMicro;
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBBytesField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBRepeatField;
|
||||
import com.tencent.mobileqq.pb.PBRepeatMessageField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public class oidb_0x899 {
|
||||
public static class ReqBody extends MessageMicro<ReqBody> {
|
||||
//static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 32, 42, 48, 56, 64}, new String[]{
|
||||
// "uint64_group_code",
|
||||
// "uint64_start_uin",
|
||||
// "uint32_identify_flag",
|
||||
// "rpt_uint64_uin_list",
|
||||
// "memberlist_opt",
|
||||
// "uint32_member_num", "uint32_filter_method", "uint32_online_flag"}, new Object[]{0L, 0L, 0, 0L, null, 0, 0, 0}, ReqBody.class);
|
||||
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
|
||||
public final PBUInt64Field uint64_start_uin = PBField.initUInt64(0);
|
||||
public final PBUInt32Field uint32_identify_flag = PBField.initUInt32(0);
|
||||
public final PBRepeatField<Long> rpt_uint64_uin_list = PBField.initRepeat(PBUInt64Field.__repeatHelper__);
|
||||
public memberlist memberlist_opt = new memberlist();
|
||||
public final PBUInt32Field uint32_member_num = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_filter_method = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_online_flag = PBField.initUInt32(0);
|
||||
}
|
||||
|
||||
public static class RspBody extends MessageMicro<RspBody> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 34, 42}, new String[]{"uint64_group_code", "uint64_start_uin", "uint32_identify_flag", "rpt_memberlist", "str_errorinfo"}, new Object[]{0L, 0L, 0, null, ByteStringMicro.EMPTY}, RspBody.class);
|
||||
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
|
||||
public final PBUInt64Field uint64_start_uin = PBField.initUInt64(0);
|
||||
public final PBUInt32Field uint32_identify_flag = PBField.initUInt32(0);
|
||||
public final PBRepeatMessageField<memberlist> rpt_memberlist = PBField.initRepeatMessage(memberlist.class);
|
||||
public final PBBytesField str_errorinfo = PBField.initBytes(ByteStringMicro.EMPTY);
|
||||
}
|
||||
|
||||
public static class memberlist extends MessageMicro<memberlist> {
|
||||
static final MessageMicro.FieldMap __fieldMap__;
|
||||
public final PBBytesField bytes_rich_info;
|
||||
public final PBBytesField bytes_special_title;
|
||||
public final PBBytesField bytes_uin_key;
|
||||
public final PBUInt32Field uint32_active_day;
|
||||
public final PBUInt32Field uint32_privilege;
|
||||
public final PBUInt32Field uint32_special_title_expire_time;
|
||||
public final PBUInt64Field uint64_member_uin = PBField.initUInt64(0);
|
||||
public final PBUInt32Field uint32_uin_flag = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_uin_flagex = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_uin_mobile_flag = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_uin_arch_flag = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_join_time = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_old_msg_seq = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_new_msg_seq = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_last_speak_time = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_level = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_point = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_shutup_timestap = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_flagex2 = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 114, 120, 128, 138, 144, 154}, new String[]{
|
||||
"uint64_member_uin", // 1
|
||||
|
||||
"uint32_uin_flag", "uint32_uin_flagex", "uint32_uin_mobile_flag", "uint32_uin_arch_flag", "uint32_join_time", "uint32_old_msg_seq", "uint32_new_msg_seq", "uint32_last_speak_time", "uint32_level", "uint32_point",
|
||||
|
||||
"uint32_shutup_timestap", //12
|
||||
|
||||
"uint32_flagex2", "bytes_special_title", "uint32_special_title_expire_time", "uint32_active_day", "bytes_uin_key", "uint32_privilege", "bytes_rich_info"}, new Object[]{0L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, byteStringMicro, 0, 0, byteStringMicro, 0, byteStringMicro}, memberlist.class);
|
||||
}
|
||||
|
||||
public memberlist() {
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
this.bytes_special_title = PBField.initBytes(byteStringMicro);
|
||||
this.uint32_special_title_expire_time = PBField.initUInt32(0);
|
||||
this.uint32_active_day = PBField.initUInt32(0);
|
||||
this.bytes_uin_key = PBField.initBytes(byteStringMicro);
|
||||
this.uint32_privilege = PBField.initUInt32(0);
|
||||
this.bytes_rich_info = PBField.initBytes(byteStringMicro);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package tencent.im.oidb.cmd0x8a7;
|
||||
|
||||
import com.tencent.mobileqq.pb.ByteStringMicro;
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBBoolField;
|
||||
import com.tencent.mobileqq.pb.PBBytesField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public class cmd0x8a7 {
|
||||
public static class ReqBody
|
||||
extends MessageMicro<ReqBody>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__;
|
||||
public final PBUInt32Field uint32_limit_interval_type_for_group = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_limit_interval_type_for_uin = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_sub_cmd = PBField.initUInt32(0);
|
||||
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0L);
|
||||
public final PBUInt64Field uint64_uin = PBField.initUInt64(0L);
|
||||
|
||||
static
|
||||
{
|
||||
Integer localInteger = Integer.valueOf(0);
|
||||
Long localLong = Long.valueOf(0L);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40 }, new String[] { "uint32_sub_cmd", "uint32_limit_interval_type_for_uin", "uint32_limit_interval_type_for_group", "uint64_uin", "uint64_group_code" }, new Object[] { localInteger, localInteger, localInteger, localLong, localLong }, ReqBody.class);
|
||||
}
|
||||
}
|
||||
|
||||
public static class RspBody
|
||||
extends MessageMicro<RspBody>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__;
|
||||
public final PBBoolField bool_can_at_all = PBField.initBool(false);
|
||||
public final PBBoolField bool_show_at_all_lable = PBField.initBool(false);
|
||||
public final PBBytesField bytes_prompt_msg_1 = PBField.initBytes(ByteStringMicro.EMPTY);
|
||||
public final PBBytesField bytes_prompt_msg_2 = PBField.initBytes(ByteStringMicro.EMPTY);
|
||||
public final PBUInt32Field uint32_remain_at_all_count_for_group = PBField.initUInt32(0);
|
||||
public final PBUInt32Field uint32_remain_at_all_count_for_uin = PBField.initUInt32(0);
|
||||
|
||||
static
|
||||
{
|
||||
Integer localInteger = Integer.valueOf(0);
|
||||
Boolean localBoolean = Boolean.valueOf(false);
|
||||
ByteStringMicro localByteStringMicro1 = ByteStringMicro.EMPTY;
|
||||
ByteStringMicro localByteStringMicro2 = ByteStringMicro.EMPTY;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 34, 42, 48 }, new String[] { "bool_can_at_all", "uint32_remain_at_all_count_for_uin", "uint32_remain_at_all_count_for_group", "bytes_prompt_msg_1", "bytes_prompt_msg_2", "bool_show_at_all_lable" }, new Object[] { localBoolean, localInteger, localInteger, localByteStringMicro1, localByteStringMicro2, localBoolean }, RspBody.class);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,245 @@
|
||||
package tencent.im.oidb.cmd0xeb7;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBEnumField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBFloatField;
|
||||
import com.tencent.mobileqq.pb.PBInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBInt64Field;
|
||||
import com.tencent.mobileqq.pb.PBRepeatField;
|
||||
import com.tencent.mobileqq.pb.PBRepeatMessageField;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
|
||||
public class oidb_0xeb7 {
|
||||
public static class ReqBody extends MessageMicro<ReqBody> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18 }, new String[] { "signInStatusReq", "signInWriteReq" }, new Object[] { null, null }, ReqBody.class);
|
||||
|
||||
public StSignInStatusReq signInStatusReq = new StSignInStatusReq();
|
||||
|
||||
public StSignInWriteReq signInWriteReq = new StSignInWriteReq();
|
||||
}
|
||||
|
||||
|
||||
public static class RspBody extends MessageMicro<RspBody>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18 }, new String[] { "signInStatusRsp", "signInWriteRsp" }, new Object[] { null, null }, RspBody.class);
|
||||
public StSignInStatusRsp signInStatusRsp = new StSignInStatusRsp();
|
||||
public StSignInWriteRsp signInWriteRsp = new StSignInWriteRsp();
|
||||
}
|
||||
|
||||
|
||||
public static class StSignInWriteRsp
|
||||
extends MessageMicro<StSignInWriteRsp>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 26 }, new String[] { "ret", "doneInfo", "groupScore" }, new Object[] { null, null, null }, StSignInWriteRsp.class);
|
||||
public SignInStatusDoneInfo doneInfo = new SignInStatusDoneInfo();
|
||||
public SignInStatusGroupScore groupScore = new SignInStatusGroupScore();
|
||||
public Ret ret = new Ret();
|
||||
}
|
||||
|
||||
public static class StSignInStatusRsp
|
||||
extends MessageMicro<StSignInStatusRsp>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 26, 34, 42, 50, 58, 66 }, new String[] { "ret", "base", "yesterday", "notInfo", "doneInfo", "groupScore", "mantleUrl", "backgroundUrl" }, new Object[] { null, null, null, null, null, null, "", "" }, StSignInStatusRsp.class);
|
||||
public final PBStringField backgroundUrl = PBField.initString("");
|
||||
public SignInStatusBase base = new SignInStatusBase();
|
||||
public SignInStatusDoneInfo doneInfo = new SignInStatusDoneInfo();
|
||||
public SignInStatusGroupScore groupScore = new SignInStatusGroupScore();
|
||||
public final PBStringField mantleUrl = PBField.initString("");
|
||||
public SignInStatusNotInfo notInfo = new SignInStatusNotInfo();
|
||||
public Ret ret = new Ret();
|
||||
public SignInStatusYesterdayFirst yesterday = new SignInStatusYesterdayFirst();
|
||||
}
|
||||
|
||||
public static class SignInStatusYesterdayFirst
|
||||
extends MessageMicro<SignInStatusYesterdayFirst>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 26 }, new String[] { "yesterdayFirstUid", "yesterdayWord", "yesterdayNick" }, new Object[] { "", "", "" }, SignInStatusYesterdayFirst.class);
|
||||
public final PBStringField yesterdayFirstUid = PBField.initString("");
|
||||
public final PBStringField yesterdayNick = PBField.initString("");
|
||||
public final PBStringField yesterdayWord = PBField.initString("");
|
||||
}
|
||||
|
||||
public static class SignInStatusNotInfo
|
||||
extends MessageMicro<SignInStatusNotInfo>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 26 }, new String[] { "buttonWord", "signDescWordLeft", "signDescWordRight" }, new Object[] { "", "", "" }, SignInStatusNotInfo.class);
|
||||
public final PBStringField buttonWord = PBField.initString("");
|
||||
public final PBStringField signDescWordLeft = PBField.initString("");
|
||||
public final PBStringField signDescWordRight = PBField.initString("");
|
||||
}
|
||||
|
||||
public static class SignInStatusGroupScore
|
||||
extends MessageMicro<SignInStatusGroupScore>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18 }, new String[] { "groupScoreWord", "scoreUrl" }, new Object[] { "", "" }, SignInStatusGroupScore.class);
|
||||
public final PBStringField groupScoreWord = PBField.initString("");
|
||||
public final PBStringField scoreUrl = PBField.initString("");
|
||||
}
|
||||
|
||||
public static class SignInStatusDoneInfo
|
||||
extends MessageMicro<SignInStatusDoneInfo>
|
||||
{
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 26, 34 }, new String[] { "leftTitleWrod", "rightDescWord", "belowPortraitWords", "recordUrl" }, new Object[] { "", "", "", "" }, SignInStatusDoneInfo.class);
|
||||
public final PBRepeatField<String> belowPortraitWords = PBField.initRepeat(PBField.initString(""));
|
||||
public final PBStringField leftTitleWrod = PBField.initString("");
|
||||
public final PBStringField recordUrl = PBField.initString("");
|
||||
public final PBStringField rightDescWord = PBField.initString("");
|
||||
}
|
||||
|
||||
public static class StSignInRecordDaySigned extends MessageMicro<StSignInRecordDaySigned> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 13, 16, 26, 34 }, new String[] { "daySignedRatio", "dayTotalSignedUid", "daySignedPage", "daySignedUrl" }, new Object[] { Float.valueOf(0.0F), Integer.valueOf(0), null, "" }, StSignInRecordDaySigned.class);
|
||||
|
||||
public StDaySignedPage daySignedPage = new StDaySignedPage();
|
||||
|
||||
public final PBFloatField daySignedRatio = PBField.initFloat(0.0F);
|
||||
|
||||
public final PBStringField daySignedUrl = PBField.initString("");
|
||||
|
||||
public final PBInt32Field dayTotalSignedUid = PBField.initInt32(0);
|
||||
}
|
||||
|
||||
|
||||
public static class SignInStatusBase extends MessageMicro<SignInStatusBase> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "status", "currentTimeStamp" }, new Object[] { Integer.valueOf(0), Long.valueOf(0L) }, SignInStatusBase.class);
|
||||
|
||||
public final PBInt64Field currentTimeStamp = PBField.initInt64(0L);
|
||||
|
||||
public final PBEnumField status = PBField.initEnum(0);
|
||||
}
|
||||
|
||||
|
||||
public static class StSignInRecordRsp extends MessageMicro<StSignInRecordRsp> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 26, 34, 42, 50 }, new String[] { "ret", "base", "userRecord", "daySigned", "kingRecord", "level" }, new Object[] { null, null, null, null, null, null }, StSignInRecordRsp.class);
|
||||
|
||||
public SignInStatusBase base = new SignInStatusBase();
|
||||
|
||||
public StSignInRecordDaySigned daySigned = new StSignInRecordDaySigned();
|
||||
|
||||
public StSignInRecordKing kingRecord = new StSignInRecordKing();
|
||||
|
||||
public StViewGroupLevel level = new StViewGroupLevel();
|
||||
|
||||
public Ret ret = new Ret();
|
||||
|
||||
public StSignInRecordUser userRecord = new StSignInRecordUser();
|
||||
}
|
||||
|
||||
public static class Ret extends MessageMicro<Ret> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 18 }, new String[] { "code", "msg" }, new Object[] { Integer.valueOf(0), "" }, Ret.class);
|
||||
|
||||
public final PBEnumField code = PBField.initEnum(0);
|
||||
|
||||
public final PBStringField msg = PBField.initString("");
|
||||
}
|
||||
|
||||
|
||||
public static class StSignInRecordUser extends MessageMicro<StSignInRecordUser> {
|
||||
static final MessageMicro.FieldMap __fieldMap__;
|
||||
|
||||
public final PBInt64Field continueSignedDays = PBField.initInt64(0L);
|
||||
|
||||
public final PBInt64Field earliestSignedTimeStamp = PBField.initInt64(0L);
|
||||
|
||||
public final PBStringField groupName = PBField.initString("");
|
||||
|
||||
public final PBRepeatField<String> historySignedDays = PBField.initRepeat(PBField.initString(""));
|
||||
|
||||
public final PBInt32Field totalSignedDays = PBField.initInt32(0);
|
||||
|
||||
static {
|
||||
Long long_ = Long.valueOf(0L);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 16, 24, 32, 42, 50 }, new String[] { "totalSignedDays", "earliestSignedTimeStamp", "continueSignedDays", "historySignedDays", "groupName" }, new Object[] { Integer.valueOf(0), long_, long_, "", "" }, StSignInRecordUser.class);
|
||||
}
|
||||
}
|
||||
|
||||
public static class StDaySignedInfo extends MessageMicro<StDaySignedInfo> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 32 }, new String[] { "uid", "uidGroupNick", "signedTimeStamp", "signInRank" }, new Object[] { "", "", Long.valueOf(0L), Integer.valueOf(0) }, StDaySignedInfo.class);
|
||||
|
||||
public final PBInt32Field signInRank = PBField.initInt32(0);
|
||||
|
||||
public final PBInt64Field signedTimeStamp = PBField.initInt64(0L);
|
||||
|
||||
public final PBStringField uid = PBField.initString("");
|
||||
|
||||
public final PBStringField uidGroupNick = PBField.initString("");
|
||||
}
|
||||
|
||||
public static class StDaySignedPage extends MessageMicro<StDaySignedPage> {
|
||||
static final MessageMicro.FieldMap __fieldMap__;
|
||||
|
||||
public final PBRepeatMessageField<StDaySignedInfo> infos = PBField.initRepeatMessage(StDaySignedInfo.class);
|
||||
|
||||
public final PBInt32Field offset = PBField.initInt32(0);
|
||||
|
||||
public final PBInt32Field total = PBField.initInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 16, 24 }, new String[] { "infos", "offset", "total" }, new Object[] { null, integer, integer }, StDaySignedPage.class);
|
||||
}
|
||||
}
|
||||
|
||||
public static class StKingSignedInfo extends MessageMicro<StKingSignedInfo> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 32 }, new String[] { "uid", "groupNick", "signedTimeStamp", "signedCount" }, new Object[] { "", "", Long.valueOf(0L), Integer.valueOf(0) }, StKingSignedInfo.class);
|
||||
|
||||
public final PBStringField groupNick = PBField.initString("");
|
||||
|
||||
public final PBInt32Field signedCount = PBField.initInt32(0);
|
||||
|
||||
public final PBInt64Field signedTimeStamp = PBField.initInt64(0L);
|
||||
|
||||
public final PBStringField uid = PBField.initString("");
|
||||
}
|
||||
|
||||
public static class StSignInStatusReq extends MessageMicro<StSignInStatusReq> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 34 }, new String[] { "uid", "groupId", "scene", "clientVersion" }, new Object[] { "", "", Integer.valueOf(0), "" }, StSignInStatusReq.class);
|
||||
|
||||
public final PBStringField clientVersion = PBField.initString("");
|
||||
|
||||
public final PBStringField groupId = PBField.initString("");
|
||||
|
||||
public final PBEnumField scene = PBField.initEnum(0);
|
||||
|
||||
public final PBStringField uid = PBField.initString("");
|
||||
}
|
||||
|
||||
|
||||
public static class StSignInWriteReq extends MessageMicro<StSignInWriteReq> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 26 }, new String[] { "uid", "groupId", "clientVersion" }, new Object[] { "", "", "" }, StSignInWriteReq.class);
|
||||
|
||||
public final PBStringField clientVersion = PBField.initString("");
|
||||
|
||||
public final PBStringField groupId = PBField.initString("");
|
||||
|
||||
public final PBStringField uid = PBField.initString("");
|
||||
}
|
||||
|
||||
public static class StViewGroupLevel extends MessageMicro<StViewGroupLevel> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18 }, new String[] { "title", "url" }, new Object[] { "", "" }, StViewGroupLevel.class);
|
||||
|
||||
public final PBStringField title = PBField.initString("");
|
||||
|
||||
public final PBStringField url = PBField.initString("");
|
||||
}
|
||||
|
||||
|
||||
public static class StSignInRecordKing extends MessageMicro<StSignInRecordKing> {
|
||||
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 26, 34 }, new String[] { "yesterdayFirst", "topSignedTotal", "topSignedContinue", "kingUrl" }, new Object[] { null, null, null, "" }, StSignInRecordKing.class);
|
||||
|
||||
public final PBStringField kingUrl = PBField.initString("");
|
||||
|
||||
public final PBRepeatMessageField<StKingSignedInfo> topSignedContinue = PBField.initRepeatMessage(StKingSignedInfo.class);
|
||||
|
||||
public final PBRepeatMessageField<StKingSignedInfo> topSignedTotal = PBField.initRepeatMessage(StKingSignedInfo.class);
|
||||
|
||||
public StKingSignedInfo yesterdayFirst = new StKingSignedInfo();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1,21 @@
|
||||
package tencent.im.troop.honor;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBRepeatField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
|
||||
public class troop_honor {
|
||||
public static class GroupUserCardHonor extends MessageMicro<GroupUserCardHonor> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBRepeatField<Integer> id = PBField.initRepeat((PBField) PBUInt32Field.__repeatHelper__);
|
||||
|
||||
public final PBUInt32Field level = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "id", "level" }, new Object[] { integer, integer }, GroupUserCardHonor.class);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
|
||||
public final class structmsg$AddFrdSNInfo extends MessageMicro<structmsg$AddFrdSNInfo> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBUInt32Field uint32_not_see_dynamic = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_set_sn = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "uint32_not_see_dynamic", "uint32_set_sn" }, new Object[] { integer, integer }, structmsg$AddFrdSNInfo.class);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,54 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
|
||||
public final class structmsg$FlagInfo extends MessageMicro<structmsg$FlagInfo> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBUInt32Field FrdMsg_Discuss2ManyChat = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field FrdMsg_GetBusiCard = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field FrdMsg_NeedWaitingMsg = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field FrdMsg_uint32_need_all_unread_msg = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_GetC2cInviteJoinGroup = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_GetDisbandedByAdmin = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_GetOfficialAccount = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_GetPayInGroup = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_HiddenGrp = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_Kick_Admin = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_NeedAutoAdminWording = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_NotAllowJoinGrp_InviteNotFrd = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_WordingDown = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_get_quit_pay_group_msg_flag = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_get_transfer_group_msg_flag = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_mask_invite_auto_join = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field GrpMsg_support_invite_auto_join = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
|
||||
8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
|
||||
88, 96, 104, 112, 120, 128, 136 }, new String[] {
|
||||
"GrpMsg_Kick_Admin", "GrpMsg_HiddenGrp", "GrpMsg_WordingDown", "FrdMsg_GetBusiCard", "GrpMsg_GetOfficialAccount", "GrpMsg_GetPayInGroup", "FrdMsg_Discuss2ManyChat", "GrpMsg_NotAllowJoinGrp_InviteNotFrd", "FrdMsg_NeedWaitingMsg", "FrdMsg_uint32_need_all_unread_msg",
|
||||
"GrpMsg_NeedAutoAdminWording", "GrpMsg_get_transfer_group_msg_flag", "GrpMsg_get_quit_pay_group_msg_flag", "GrpMsg_support_invite_auto_join", "GrpMsg_mask_invite_auto_join", "GrpMsg_GetDisbandedByAdmin", "GrpMsg_GetC2cInviteJoinGroup" }, new Object[] {
|
||||
integer, integer, integer, integer, integer, integer, integer, integer, integer, integer,
|
||||
integer, integer, integer, integer, integer, integer, integer }, structmsg$FlagInfo.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
|
||||
public final class structmsg$FriendInfo extends MessageMicro<structmsg$FriendInfo> {
|
||||
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18 }, new String[] { "msg_joint_friend", "msg_blacklist" }, new Object[] { "", "" }, structmsg$FriendInfo.class);
|
||||
|
||||
public final PBStringField msg_blacklist = PBField.initString("");
|
||||
|
||||
public final PBStringField msg_joint_friend = PBField.initString("");
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
|
||||
public final class structmsg$GroupInfo extends MessageMicro<structmsg$GroupInfo> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBUInt32Field display_action = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field group_auth_type = PBField.initUInt32(0);
|
||||
|
||||
public final PBStringField msg_alert = PBField.initString("");
|
||||
|
||||
public final PBStringField msg_detail_alert = PBField.initString("");
|
||||
|
||||
public final PBStringField msg_other_admin_done = PBField.initString("");
|
||||
|
||||
public final PBUInt32Field uint32_app_privilege_flag = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 26, 34, 42, 48 }, new String[] { "group_auth_type", "display_action", "msg_alert", "msg_detail_alert", "msg_other_admin_done", "uint32_app_privilege_flag" }, new Object[] { integer, integer, "", "", "", integer }, structmsg$GroupInfo.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$MsgInviteExt extends MessageMicro<structmsg$MsgInviteExt> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBUInt32Field uint32_src_type = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_wait_state = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt64Field uint64_src_code = PBField.initUInt64(0L);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24 }, new String[] { "uint32_src_type", "uint64_src_code", "uint32_wait_state" }, new Object[] { integer, Long.valueOf(0L), integer }, structmsg$MsgInviteExt.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$MsgPayGroupExt extends MessageMicro<structmsg$MsgPayGroupExt> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBUInt64Field uint64_join_grp_time = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field uint64_quit_grp_time = PBField.initUInt64(0L);
|
||||
|
||||
static {
|
||||
Long long_ = Long.valueOf(0L);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "uint64_join_grp_time", "uint64_quit_grp_time" }, new Object[] { long_, long_ }, structmsg$MsgPayGroupExt.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBEnumField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$ReqNextSystemMsg extends MessageMicro<structmsg$ReqNextSystemMsg> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBEnumField checktype = PBField.initEnum(1);
|
||||
|
||||
public structmsg$FlagInfo flag = new structmsg$FlagInfo();
|
||||
|
||||
public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field following_group_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field friend_msg_type_flag = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt32Field language = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field msg_num = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_need_uid = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field version = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
Long long_ = Long.valueOf(0L);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 42, 48, 56, 64, 72, 128 }, new String[] { "msg_num", "following_friend_seq", "following_group_seq", "checktype", "flag", "language", "version", "friend_msg_type_flag", "uint32_req_msg_type", "uint32_need_uid" }, new Object[] { integer, long_, long_, Integer.valueOf(1), null, integer, integer, long_, integer, integer }, structmsg$ReqNextSystemMsg.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBEnumField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$ReqSystemMsgAction extends MessageMicro<structmsg$ReqSystemMsgAction> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public structmsg$SystemMsgActionInfo action_info = new structmsg$SystemMsgActionInfo();
|
||||
|
||||
public final PBUInt32Field group_msg_type = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field language = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt64Field msg_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBEnumField msg_type = PBField.initEnum(1);
|
||||
|
||||
public final PBUInt64Field req_uin = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt32Field src_id = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field sub_src_id = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field sub_type = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
Long long_ = Long.valueOf(0L);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40, 48, 56, 66, 72 }, new String[] { "msg_type", "msg_seq", "req_uin", "sub_type", "src_id", "sub_src_id", "group_msg_type", "action_info", "language" }, new Object[] { Integer.valueOf(1), long_, long_, integer, integer, integer, integer, null, integer }, structmsg$ReqSystemMsgAction.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBBoolField;
|
||||
import com.tencent.mobileqq.pb.PBEnumField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$ReqSystemMsgNew extends MessageMicro<structmsg$ReqSystemMsgNew> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBEnumField checktype = PBField.initEnum(1);
|
||||
|
||||
public structmsg$FlagInfo flag = new structmsg$FlagInfo();
|
||||
|
||||
public final PBUInt64Field friend_msg_type_flag = PBField.initUInt64(0L);
|
||||
|
||||
public final PBBoolField is_get_frd_ribbon = PBField.initBool(true);
|
||||
|
||||
public final PBBoolField is_get_grp_ribbon = PBField.initBool(true);
|
||||
|
||||
public final PBUInt32Field language = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt32Field msg_num = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_need_uid = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field version = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
Long long_ = Long.valueOf(0L);
|
||||
Boolean bool = Boolean.TRUE;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
|
||||
8, 16, 24, 32, 40, 50, 56, 64, 72, 80,
|
||||
88, 128 }, new String[] {
|
||||
"msg_num", "latest_friend_seq", "latest_group_seq", "version", "checktype", "flag", "language", "is_get_frd_ribbon", "is_get_grp_ribbon", "friend_msg_type_flag",
|
||||
"uint32_req_msg_type", "uint32_need_uid" }, new Object[] {
|
||||
integer, long_, long_, integer, Integer.valueOf(1), null, integer, bool, bool, long_,
|
||||
integer, integer }, structmsg$ReqSystemMsgNew.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBEnumField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$ReqSystemMsgRead extends MessageMicro<structmsg$ReqSystemMsgRead> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBEnumField checktype = PBField.initEnum(1);
|
||||
|
||||
public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt32Field type = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Long long_ = Long.valueOf(0L);
|
||||
Integer integer = Integer.valueOf(0);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40 }, new String[] { "latest_friend_seq", "latest_group_seq", "type", "checktype", "uint32_req_msg_type" }, new Object[] { long_, long_, integer, Integer.valueOf(1), integer }, structmsg$ReqSystemMsgRead.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
|
||||
public final class structmsg$RspHead extends MessageMicro<structmsg$RspHead> {
|
||||
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 18 }, new String[] { "result", "msg_fail" }, new Object[] { Integer.valueOf(0), "" }, structmsg$RspHead.class);
|
||||
|
||||
public final PBStringField msg_fail = PBField.initString("");
|
||||
|
||||
public final PBInt32Field result = PBField.initInt32(0);
|
||||
}
|
||||
|
@ -0,0 +1,37 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.ByteStringMicro;
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBBytesField;
|
||||
import com.tencent.mobileqq.pb.PBEnumField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBRepeatMessageField;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$RspNextSystemMsg extends MessageMicro<structmsg$RspNextSystemMsg> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBStringField bytes_game_nick = PBField.initString("");
|
||||
|
||||
public final PBBytesField bytes_undecid_for_qim = PBField.initBytes(ByteStringMicro.EMPTY);
|
||||
|
||||
public final PBEnumField checktype = PBField.initEnum(1);
|
||||
|
||||
public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field following_group_seq = PBField.initUInt64(0L);
|
||||
|
||||
public structmsg$RspHead head = new structmsg$RspHead();
|
||||
|
||||
public final PBRepeatMessageField<structmsg$StructMsg> msgs = PBField.initRepeatMessage(structmsg$StructMsg.class);
|
||||
|
||||
public final PBUInt32Field uint32_un_read_count3 = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Long long_ = Long.valueOf(0L);
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 32, 40, 802, 810, 816 }, new String[] { "head", "msgs", "following_friend_seq", "following_group_seq", "checktype", "bytes_game_nick", "bytes_undecid_for_qim", "uint32_un_read_count3" }, new Object[] { null, null, long_, long_, Integer.valueOf(1), "", byteStringMicro, Integer.valueOf(0) }, structmsg$RspNextSystemMsg.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
|
||||
public final class structmsg$RspSystemMsgAction extends MessageMicro<structmsg$RspSystemMsgAction> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public structmsg$RspHead head = new structmsg$RspHead();
|
||||
|
||||
public final PBStringField msg_detail = PBField.initString("");
|
||||
|
||||
public final PBStringField msg_invalid_decided = PBField.initString("");
|
||||
|
||||
public final PBUInt32Field remark_result = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field type = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 42, 48 }, new String[] { "head", "msg_detail", "type", "msg_invalid_decided", "remark_result" }, new Object[] { null, "", integer, "", integer }, structmsg$RspSystemMsgAction.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.ByteStringMicro;
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBBytesField;
|
||||
import com.tencent.mobileqq.pb.PBEnumField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBRepeatMessageField;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$RspSystemMsgNew extends MessageMicro<structmsg$RspSystemMsgNew> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBStringField bytes_game_nick = PBField.initString("");
|
||||
|
||||
public final PBBytesField bytes_undecid_for_qim = PBField.initBytes(ByteStringMicro.EMPTY);
|
||||
|
||||
public final PBEnumField checktype = PBField.initEnum(1);
|
||||
|
||||
public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field following_group_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBRepeatMessageField<structmsg$StructMsg> friendmsgs = PBField.initRepeatMessage(structmsg$StructMsg.class);
|
||||
|
||||
public final PBRepeatMessageField<structmsg$StructMsg> groupmsgs = PBField.initRepeatMessage(structmsg$StructMsg.class);
|
||||
|
||||
public final PBStringField grp_msg_display = PBField.initString("");
|
||||
|
||||
public structmsg$RspHead head = new structmsg$RspHead();
|
||||
|
||||
public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBStringField msg_display = PBField.initString("");
|
||||
|
||||
public structmsg$StructMsg msg_ribbon_friend = new structmsg$StructMsg();
|
||||
|
||||
public structmsg$StructMsg msg_ribbon_group = new structmsg$StructMsg();
|
||||
|
||||
public final PBUInt32Field uint32_has_suspicious_flag = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_over = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field uint32_un_read_count3 = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field unread_friend_count = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field unread_group_count = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
Long long_ = Long.valueOf(0L);
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
|
||||
10, 16, 24, 32, 40, 48, 56, 74, 82, 90,
|
||||
98, 106, 114, 120, 160, 802, 810, 816, 824 }, new String[] {
|
||||
"head", "unread_friend_count", "unread_group_count", "latest_friend_seq", "latest_group_seq", "following_friend_seq", "following_group_seq", "friendmsgs", "groupmsgs", "msg_ribbon_friend",
|
||||
"msg_ribbon_group", "msg_display", "grp_msg_display", "uint32_over", "checktype", "bytes_game_nick", "bytes_undecid_for_qim", "uint32_un_read_count3", "uint32_has_suspicious_flag" }, new Object[] {
|
||||
null, integer, integer, long_, long_, long_, long_, null, null, null,
|
||||
null, "", "", integer, Integer.valueOf(1), "", byteStringMicro, integer, integer }, structmsg$RspSystemMsgNew.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBEnumField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
|
||||
public final class structmsg$RspSystemMsgRead extends MessageMicro<structmsg$RspSystemMsgRead> {
|
||||
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 16, 24 }, new String[] { "head", "type", "checktype" }, new Object[] { null, Integer.valueOf(0), Integer.valueOf(1) }, structmsg$RspSystemMsgRead.class);
|
||||
|
||||
public final PBEnumField checktype = PBField.initEnum(1);
|
||||
|
||||
public structmsg$RspHead head = new structmsg$RspHead();
|
||||
|
||||
public final PBUInt32Field type = PBField.initUInt32(0);
|
||||
}
|
||||
|
@ -0,0 +1,31 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBEnumField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$StructMsg extends MessageMicro<structmsg$StructMsg> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public structmsg$SystemMsg msg = new structmsg$SystemMsg();
|
||||
|
||||
public final PBUInt64Field msg_seq = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field msg_time = PBField.initUInt64(0L);
|
||||
|
||||
public final PBEnumField msg_type = PBField.initEnum(1);
|
||||
|
||||
public final PBUInt64Field req_uin = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt32Field uint32_unread_flag = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field version = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
Long long_ = Long.valueOf(0L);
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40, 48, 402 }, new String[] { "version", "msg_type", "msg_seq", "msg_time", "req_uin", "uint32_unread_flag", "msg" }, new Object[] { integer, Integer.valueOf(1), long_, long_, long_, integer, null }, structmsg$StructMsg.class);
|
||||
}
|
||||
}
|
@ -0,0 +1,186 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.ByteStringMicro;
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBBytesField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBRepeatMessageField;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$SystemMsg extends MessageMicro<structmsg$SystemMsg> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public final PBUInt64Field action_uin = PBField.initUInt64(0L);
|
||||
|
||||
public final PBStringField action_uin_nick;
|
||||
|
||||
public final PBBytesField action_uin_qq_nick;
|
||||
|
||||
public final PBBytesField action_uin_remark;
|
||||
|
||||
public final PBRepeatMessageField<structmsg$SystemMsgAction> actions = PBField.initRepeatMessage(structmsg$SystemMsgAction.class);
|
||||
|
||||
public final PBUInt64Field actor_uin = PBField.initUInt64(0L);
|
||||
|
||||
public final PBStringField actor_uin_nick;
|
||||
|
||||
public final PBBytesField bytes_addtion;
|
||||
|
||||
public final PBBytesField bytes_game_msg;
|
||||
|
||||
public final PBBytesField bytes_game_nick;
|
||||
|
||||
public final PBBytesField bytes_name_more;
|
||||
|
||||
public final PBBytesField bytes_source_desc;
|
||||
|
||||
public final PBBytesField bytes_transparent_group_notify;
|
||||
|
||||
public final PBBytesField bytes_warning_tips;
|
||||
|
||||
public final PBUInt32Field card_switch;
|
||||
|
||||
public final PBUInt64Field clone_uin = PBField.initUInt64(0L);
|
||||
|
||||
public final PBStringField clone_uin_nick;
|
||||
|
||||
public final PBBytesField eim_group_id_name;
|
||||
|
||||
public structmsg$FriendInfo friend_info = new structmsg$FriendInfo();
|
||||
|
||||
public final PBUInt64Field group_code = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt32Field group_ext_flag;
|
||||
|
||||
public structmsg$GroupInfo group_info = new structmsg$GroupInfo();
|
||||
|
||||
public final PBUInt32Field group_inviter_role = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field group_msg_type = PBField.initUInt32(0);
|
||||
|
||||
public final PBStringField group_name;
|
||||
|
||||
public final PBStringField msg_actor_describe = PBField.initString("");
|
||||
|
||||
public final PBStringField msg_additional = PBField.initString("");
|
||||
|
||||
public final PBStringField msg_additional_list = PBField.initString("");
|
||||
|
||||
public final PBStringField msg_decided = PBField.initString("");
|
||||
|
||||
public final PBStringField msg_describe = PBField.initString("");
|
||||
|
||||
public final PBStringField msg_detail;
|
||||
|
||||
public structmsg$MsgInviteExt msg_invite_extinfo = new structmsg$MsgInviteExt();
|
||||
|
||||
public structmsg$MsgPayGroupExt msg_pay_group_extinfo = new structmsg$MsgPayGroupExt();
|
||||
|
||||
public final PBStringField msg_qna;
|
||||
|
||||
public final PBStringField msg_source = PBField.initString("");
|
||||
|
||||
public final PBStringField msg_title = PBField.initString("");
|
||||
|
||||
public final PBBytesField pic_url;
|
||||
|
||||
public final PBUInt32Field relation = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field req_uin_age;
|
||||
|
||||
public final PBBytesField req_uin_business_card;
|
||||
|
||||
public final PBInt32Field req_uin_faceid;
|
||||
|
||||
public final PBUInt32Field req_uin_gender;
|
||||
|
||||
public final PBStringField req_uin_nick;
|
||||
|
||||
public final PBBytesField req_uin_pre_remark;
|
||||
|
||||
public final PBUInt32Field reqsubtype = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field src_id = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field sub_src_id = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt32Field sub_type = PBField.initUInt32(0);
|
||||
|
||||
public final PBStringField uid;
|
||||
|
||||
public final PBUInt32Field uint32_c2c_invite_join_group_flag;
|
||||
|
||||
public final PBUInt32Field uint32_doubt_flag;
|
||||
|
||||
public final PBUInt32Field uint32_group_flagext3;
|
||||
|
||||
public final PBUInt32Field uint32_source_flag = PBField.initUInt32(0);
|
||||
|
||||
public final PBUInt64Field uint64_discuss_uin = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field uint64_eim_group_id = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt64Field uint64_group_owner_uin;
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
Long long_ = Long.valueOf(0L);
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] {
|
||||
8, 18, 26, 34, 42, 50, 56, 64, 74, 80,
|
||||
88, 96, 104, 114, 122, 128, 138, 146, 152, 160,
|
||||
168, 176, 184, 194, 202, 208, 218, 226, 232, 240,
|
||||
248, 258, 266, 274, 282, 400, 410, 418, 426, 434,
|
||||
442, 456, 466, 474, 482, 490, 506, 514, 522, 530,
|
||||
536, 544, 552, 808, 866, 882 }, new String[] {
|
||||
"sub_type", "msg_title", "msg_describe", "msg_additional", "msg_source", "msg_decided", "src_id", "sub_src_id", "actions", "group_code",
|
||||
"action_uin", "group_msg_type", "group_inviter_role", "friend_info", "group_info", "actor_uin", "msg_actor_describe", "msg_additional_list", "relation", "reqsubtype",
|
||||
"clone_uin", "uint64_discuss_uin", "uint64_eim_group_id", "msg_invite_extinfo", "msg_pay_group_extinfo", "uint32_source_flag", "bytes_game_nick", "bytes_game_msg", "uint32_group_flagext3", "uint64_group_owner_uin",
|
||||
"uint32_doubt_flag", "bytes_warning_tips", "bytes_name_more", "bytes_addtion", "bytes_transparent_group_notify", "req_uin_faceid", "req_uin_nick", "group_name", "action_uin_nick", "msg_qna",
|
||||
"msg_detail", "group_ext_flag", "actor_uin_nick", "pic_url", "clone_uin_nick", "req_uin_business_card", "eim_group_id_name", "req_uin_pre_remark", "action_uin_qq_nick", "action_uin_remark",
|
||||
"req_uin_gender", "req_uin_age", "uint32_c2c_invite_join_group_flag", "card_switch", "bytes_source_desc", "uid" }, new Object[] {
|
||||
integer, "", "", "", "", "", integer, integer, null, long_,
|
||||
long_, integer, integer, null, null, long_, "", "", integer, integer,
|
||||
long_, long_, long_, null, null, integer, byteStringMicro, byteStringMicro, integer, long_,
|
||||
integer, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, integer, "", "", "", "",
|
||||
"", integer, "", byteStringMicro, "", byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro,
|
||||
integer, integer, integer, integer, byteStringMicro, "" }, structmsg$SystemMsg.class);
|
||||
}
|
||||
|
||||
public structmsg$SystemMsg() {
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
this.bytes_game_nick = PBField.initBytes(byteStringMicro);
|
||||
this.bytes_game_msg = PBField.initBytes(byteStringMicro);
|
||||
this.uint32_group_flagext3 = PBField.initUInt32(0);
|
||||
this.uint64_group_owner_uin = PBField.initUInt64(0L);
|
||||
this.uint32_doubt_flag = PBField.initUInt32(0);
|
||||
this.bytes_warning_tips = PBField.initBytes(byteStringMicro);
|
||||
this.bytes_name_more = PBField.initBytes(byteStringMicro);
|
||||
this.bytes_addtion = PBField.initBytes(byteStringMicro);
|
||||
this.bytes_transparent_group_notify = PBField.initBytes(byteStringMicro);
|
||||
this.req_uin_faceid = PBField.initInt32(0);
|
||||
this.req_uin_nick = PBField.initString("");
|
||||
this.group_name = PBField.initString("");
|
||||
this.action_uin_nick = PBField.initString("");
|
||||
this.msg_qna = PBField.initString("");
|
||||
this.msg_detail = PBField.initString("");
|
||||
this.group_ext_flag = PBField.initUInt32(0);
|
||||
this.actor_uin_nick = PBField.initString("");
|
||||
this.pic_url = PBField.initBytes(byteStringMicro);
|
||||
this.clone_uin_nick = PBField.initString("");
|
||||
this.req_uin_business_card = PBField.initBytes(byteStringMicro);
|
||||
this.eim_group_id_name = PBField.initBytes(byteStringMicro);
|
||||
this.req_uin_pre_remark = PBField.initBytes(byteStringMicro);
|
||||
this.action_uin_qq_nick = PBField.initBytes(byteStringMicro);
|
||||
this.action_uin_remark = PBField.initBytes(byteStringMicro);
|
||||
this.req_uin_gender = PBField.initUInt32(0);
|
||||
this.req_uin_age = PBField.initUInt32(0);
|
||||
this.uint32_c2c_invite_join_group_flag = PBField.initUInt32(0);
|
||||
this.card_switch = PBField.initUInt32(0);
|
||||
this.bytes_source_desc = PBField.initBytes(byteStringMicro);
|
||||
this.uid = PBField.initString("");
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
|
||||
public final class structmsg$SystemMsgAction extends MessageMicro<structmsg$SystemMsgAction> {
|
||||
static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 34, 42 }, new String[] { "name", "result", "action", "action_info", "detail_name" }, new Object[] { "", "", Integer.valueOf(0), null, "" }, structmsg$SystemMsgAction.class);
|
||||
|
||||
public final PBUInt32Field action = PBField.initUInt32(0);
|
||||
|
||||
public structmsg$SystemMsgActionInfo action_info = new structmsg$SystemMsgActionInfo();
|
||||
|
||||
public final PBStringField detail_name = PBField.initString("");
|
||||
|
||||
public final PBStringField name = PBField.initString("");
|
||||
|
||||
public final PBStringField result = PBField.initString("");
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package tencent.mobileim.structmsg;
|
||||
|
||||
import com.tencent.mobileqq.pb.ByteStringMicro;
|
||||
import com.tencent.mobileqq.pb.MessageMicro;
|
||||
import com.tencent.mobileqq.pb.PBBoolField;
|
||||
import com.tencent.mobileqq.pb.PBBytesField;
|
||||
import com.tencent.mobileqq.pb.PBEnumField;
|
||||
import com.tencent.mobileqq.pb.PBField;
|
||||
import com.tencent.mobileqq.pb.PBStringField;
|
||||
import com.tencent.mobileqq.pb.PBUInt32Field;
|
||||
import com.tencent.mobileqq.pb.PBUInt64Field;
|
||||
|
||||
public final class structmsg$SystemMsgActionInfo extends MessageMicro<structmsg$SystemMsgActionInfo> {
|
||||
static final FieldMap __fieldMap__;
|
||||
|
||||
public structmsg$AddFrdSNInfo addFrdSNInfo = new structmsg$AddFrdSNInfo();
|
||||
|
||||
public final PBBoolField blacklist = PBField.initBool(false);
|
||||
|
||||
public final PBUInt64Field group_code = PBField.initUInt64(0L);
|
||||
|
||||
public final PBUInt32Field group_id = PBField.initUInt32(0);
|
||||
|
||||
public final PBStringField msg = PBField.initString("");
|
||||
|
||||
public final PBStringField remark = PBField.initString("");
|
||||
|
||||
public final PBBytesField sig = PBField.initBytes(ByteStringMicro.EMPTY);
|
||||
|
||||
public final PBEnumField type = PBField.initEnum(1);
|
||||
|
||||
public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0);
|
||||
|
||||
static {
|
||||
Integer integer = Integer.valueOf(0);
|
||||
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
|
||||
Boolean bool = Boolean.FALSE;
|
||||
__fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 26, 402, 408, 418, 424, 434, 440 }, new String[] { "type", "group_code", "sig", "msg", "group_id", "remark", "blacklist", "addFrdSNInfo", "uint32_req_msg_type" }, new Object[] { Integer.valueOf(1), Long.valueOf(0L), byteStringMicro, "", integer, "", bool, null, integer }, structmsg$SystemMsgActionInfo.class);
|
||||
}
|
||||
}
|
@ -7,7 +7,7 @@ pluginManagement {
|
||||
}
|
||||
|
||||
dependencyResolutionManagement {
|
||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
|
@ -3,18 +3,18 @@ plugins {
|
||||
id("org.jetbrains.kotlin.android")
|
||||
//id("io.realm.kotlin")
|
||||
id("kotlin-kapt")
|
||||
kotlin("plugin.serialization") version "1.8.0"
|
||||
kotlin("plugin.serialization") version "1.8.10"
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "moe.fuqiuluo.xposed"
|
||||
compileSdk = 33
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
minSdk = 24
|
||||
minSdk = 27
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
consumerProguardFiles("consumer-rules.pro")
|
||||
@Suppress("UnstableApiUsage")
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
cppFlags += ""
|
||||
@ -50,6 +50,9 @@ android {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly ("de.robv.android.xposed:api:82")
|
||||
compileOnly (project(":qqinterface"))
|
||||
|
||||
implementation("androidx.core:core-ktx:1.9.0")
|
||||
implementation("androidx.appcompat:appcompat:1.6.1")
|
||||
implementation("com.google.android.material:material:1.9.0")
|
||||
@ -59,7 +62,8 @@ dependencies {
|
||||
//implementation("io.realm.kotlin:library-sync:1.11.0")
|
||||
|
||||
val ktorVersion = "2.3.3"
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1")
|
||||
//implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1")
|
||||
implementation("io.github.xn32:json5k:0.3.0")
|
||||
implementation("org.jetbrains.kotlinx:kotlinx-io-jvm:0.1.16")
|
||||
implementation("io.ktor:ktor-server-core:$ktorVersion")
|
||||
implementation("io.ktor:ktor-server-host-common:$ktorVersion")
|
||||
@ -71,6 +75,7 @@ dependencies {
|
||||
implementation("io.ktor:ktor-client-cio:$ktorVersion")
|
||||
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
|
||||
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
|
||||
//implementation("io.ktor:ktor-serialization-kotlinx-protobuf:$ktorVersion")
|
||||
implementation("io.ktor:ktor-network-tls-certificates:$ktorVersion")
|
||||
|
||||
/**
|
||||
@ -93,11 +98,10 @@ dependencies {
|
||||
// optional - Kotlin Extensions and Coroutines support for Room
|
||||
implementation("androidx.room:room-ktx:$roomVersion")
|
||||
|
||||
compileOnly ("de.robv.android.xposed:api:82")
|
||||
compileOnly (project(":qqinterface"))
|
||||
|
||||
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("androidx.compose.ui:ui-test-junit4")
|
||||
}
|
||||
|
||||
|
1
xposed/src/main/assets/native_init
Normal file
1
xposed/src/main/assets/native_init
Normal file
@ -0,0 +1 @@
|
||||
libclover.so
|
@ -1,38 +1,17 @@
|
||||
|
||||
# For more information about using CMake with Android Studio, read the
|
||||
# documentation: https://d.android.com/studio/projects/add-native-code.html.
|
||||
# For more examples on how to use CMake, see https://github.com/android/ndk-samples.
|
||||
|
||||
# Sets the minimum CMake version required for this project.
|
||||
cmake_minimum_required(VERSION 3.22.1)
|
||||
|
||||
# Declares the project name. The project name can be accessed via ${ PROJECT_NAME},
|
||||
# Since this is the top level CMakeLists.txt, the project name is also accessible
|
||||
# with ${CMAKE_PROJECT_NAME} (both CMake variables are in-sync within the top level
|
||||
# build script scope).
|
||||
project("xposed")
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
project("clover")
|
||||
|
||||
include_directories(helper)
|
||||
|
||||
# Creates and names a library, sets it as either STATIC
|
||||
# or SHARED, and provides the relative paths to its source code.
|
||||
# You can define multiple libraries, and CMake builds them for you.
|
||||
# Gradle automatically packages shared libraries with your APK.
|
||||
#
|
||||
# In this top level CMakeLists.txt, ${CMAKE_PROJECT_NAME} is used to define
|
||||
# the target library name; in the sub-module's CMakeLists.txt, ${PROJECT_NAME}
|
||||
# is preferred for the same purpose.
|
||||
#
|
||||
# In order to load a library into your app from Java/Kotlin, you must call
|
||||
# System.loadLibrary() and pass the name of the library defined here;
|
||||
# for GameActivity/NativeActivity derived applications, the same library name must be
|
||||
# used in the AndroidManifest.xml file.
|
||||
add_library(${CMAKE_PROJECT_NAME} SHARED
|
||||
# List C/C++ source files with relative paths to this CMakeLists.txt.
|
||||
xposed.cpp)
|
||||
anti_detection/anti_detection.cpp
|
||||
helper/jnihelper.cpp
|
||||
clover.cpp)
|
||||
|
||||
# Specifies libraries CMake should link to your target library. You
|
||||
# can link libraries from various origins, such as libraries defined in this
|
||||
# build script, prebuilt third-party libraries, or Android system libraries.
|
||||
target_link_libraries(${CMAKE_PROJECT_NAME}
|
||||
# List libraries link to the target library
|
||||
android
|
||||
log)
|
||||
|
6
xposed/src/main/cpp/anti_detection/anti_detection.cpp
Normal file
6
xposed/src/main/cpp/anti_detection/anti_detection.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
#include "anti_detection.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
26
xposed/src/main/cpp/anti_detection/anti_detection.h
Normal file
26
xposed/src/main/cpp/anti_detection/anti_detection.h
Normal file
@ -0,0 +1,26 @@
|
||||
#ifndef SHAMROCK_ANTI_DETECTION_H
|
||||
#define SHAMROCK_ANTI_DETECTION_H
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <initializer_list>
|
||||
#include "lsposed.h"
|
||||
#include "jnihelper.h"
|
||||
|
||||
static std::vector<std::string> qemu_detect_props = {
|
||||
"init.svc.qemu-props", "qemu.hw.mainkeys", "qemu.sf.fake_camera", "ro.kernel.android.qemud",
|
||||
"qemu.sf.lcd_density", "init.svc.qemud", "ro.kernel.qemu",
|
||||
"libc.debug.malloc"
|
||||
};
|
||||
|
||||
static int (*backup_system_property_get)(const char *name, char *value);
|
||||
static FILE* (*backup_fopen)(const char *filename, const char *mode);
|
||||
static int (*backup_memcmp)(const void* __lhs, const void* __rhs, size_t __n);
|
||||
//static const char* (*backup_strstr)(const char* h, const char* n);
|
||||
|
||||
//int fake_system_property_get(const char *name, char *value);
|
||||
//FILE* fake_fopen(const char *filename, const char *mode);
|
||||
|
||||
//void on_library_loaded(const char *name, void *handle);
|
||||
|
||||
#endif //SHAMROCK_ANTI_DETECTION_H
|
189
xposed/src/main/cpp/clover.cpp
Normal file
189
xposed/src/main/cpp/clover.cpp
Normal file
@ -0,0 +1,189 @@
|
||||
#include <jni.h>
|
||||
#include "anti_detection/anti_detection.h"
|
||||
#include "helper/lsposed.h"
|
||||
#include "jnihelper.h"
|
||||
|
||||
static JavaVM *global_jvm = nullptr;
|
||||
static HookFunType hook_function = nullptr;
|
||||
|
||||
extern "C" [[gnu::visibility("default")]] [[gnu::used]]
|
||||
jint JNI_OnLoad(JavaVM *jvm, void*) {
|
||||
global_jvm = jvm;
|
||||
int attach = 0;
|
||||
JNIEnv *env = JNIHelper::getJNIEnv(jvm, &attach);
|
||||
|
||||
// do something
|
||||
LOGI("[Shamrock] JNI_OnLoad NativeModule Init: %p", env);
|
||||
|
||||
if (attach == 1) {
|
||||
JNIHelper::delJNIEnv(jvm);
|
||||
}
|
||||
|
||||
//hook_function((void *)env->functions->FindClass, (void *)fake_FindClass, (void **)&backup_FindClass);
|
||||
return JNI_VERSION_1_6;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_moe_fuqiuluo_shamrock_xposed_XposedEntry_00024Companion_injected(JNIEnv *env, jobject thiz) {
|
||||
LOGI("[Shamrock] injected: %p", hook_function);
|
||||
return hook_function != nullptr;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_moe_fuqiuluo_shamrock_xposed_XposedEntry_00024Companion_hasEnv(JNIEnv *env, jobject thiz) {
|
||||
LOGI("[Shamrock] hasEnv: %p", global_jvm);
|
||||
return global_jvm != nullptr;
|
||||
}
|
||||
|
||||
int fake_system_property_get(const char *name, char *value) {
|
||||
for (auto &prop: qemu_detect_props) {
|
||||
if (strstr(name, prop.c_str())) {
|
||||
LOGI("[Shamrock] bypass qemu detection");
|
||||
value[0] = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (strstr(name, "ro.debuggable")
|
||||
|| strstr(name, "ro.kernel.qemu.gles")
|
||||
|| strstr(name, "debug.atrace.tags.enableflags")) {
|
||||
strcpy(value, "0");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (strstr(name, "ro.product.cpu.abilist")) {
|
||||
int len = backup_system_property_get(name, value);
|
||||
if (len > 0) {
|
||||
if (strstr(value, "x86")) {
|
||||
strcpy(value, "arm64-v8a,armeabi-v7a,armeabi");
|
||||
return 29;
|
||||
}
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
if (strstr(name, "ro.hardware")) {
|
||||
int len = backup_system_property_get(name, value);
|
||||
if (len > 0) {
|
||||
if (strstr(value, "generic")
|
||||
|| strstr(value, "unknown")
|
||||
|| strstr(value, "emulator")
|
||||
|| strstr(value, "vbox")
|
||||
|| strstr(value, "nox") //部分NoxAppPlayer
|
||||
|| strstr(value, "genymotion")
|
||||
|| strstr(value, "goldfish")) {
|
||||
strcpy(value, "qcom");
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
//LOGI("[Shamrock] fake_system_property_get(%s)", name);
|
||||
return backup_system_property_get(name, value);
|
||||
}
|
||||
|
||||
FILE* fake_fopen(const char *filename, const char *mode) {
|
||||
if (strstr(filename, "qemu_pipe")) {
|
||||
LOGI("[Shamrock] bypass qemu detection");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const char* emuSpecFile[] = {
|
||||
"libhoudini.so",
|
||||
"libndk.so",
|
||||
"libnoxd.so", //NoxAppPlayer
|
||||
"libnoxspeedup.so", //NoxAppPlayer
|
||||
"nox-prop", //NoxAppPlayer (MayUseless?)
|
||||
"nox-vbox-sf", //NoxAppPlayer (MayUseless?)
|
||||
"noxd", //NoxAppPlayer (MayUseless?)
|
||||
"noxspeedup", //NoxAppPlayer (MayUseless?)
|
||||
};
|
||||
for (const char* keyword : emuSpecFile) {
|
||||
if (strstr(filename, keyword)) {
|
||||
LOGI("[Shamrock] bypass emu detection");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (strstr(filename, "libdobby.so")) {
|
||||
LOGI("[Shamrock] bypass dobby detection");
|
||||
return nullptr;
|
||||
}
|
||||
return backup_fopen(filename, mode);
|
||||
}
|
||||
|
||||
char * __cdecl my_strstr(const char *lhs, const char *rhs) {
|
||||
char *cur = (char *)lhs;
|
||||
char *l;
|
||||
char *r;
|
||||
if (!*rhs) {
|
||||
return ((char *)lhs);
|
||||
}
|
||||
while (*cur) {
|
||||
l = cur;
|
||||
r = (char *)rhs;
|
||||
while (*r && !(*l - *r)) {
|
||||
l++;
|
||||
r++;
|
||||
}
|
||||
if (!*r) {
|
||||
return cur;
|
||||
}
|
||||
cur++;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int fake_memcmp(const void* __lhs, const void* __rhs, size_t __n) {
|
||||
//if (my_strstr((const char*) __rhs, "lsposed")) {
|
||||
//return -1;
|
||||
//}
|
||||
//if (my_strstr((const char*) __rhs, "xposed")) {
|
||||
// return -1;
|
||||
//}
|
||||
if (my_strstr((const char*) __rhs, "shamrock")) {
|
||||
if (backup_memcmp(__lhs, __rhs, __n) == 0) {
|
||||
// 底层广播判断
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
if (my_strstr((const char*) __rhs, "riru")) {
|
||||
return -1;
|
||||
}
|
||||
//if (my_strstr((const char*) __rhs, "zygisk")) {
|
||||
// return -1;
|
||||
//}
|
||||
//if (my_strstr((const char*) __rhs, "magisk")) {
|
||||
// return -1;
|
||||
//}
|
||||
return backup_memcmp(__lhs, __rhs, __n);
|
||||
}
|
||||
|
||||
void on_library_loaded(const char *name, void *handle) {
|
||||
|
||||
}
|
||||
|
||||
extern "C" [[gnu::visibility("default")]] [[gnu::used]]
|
||||
NativeOnModuleLoaded native_init(const NativeAPIEntries *entries) {
|
||||
hook_function = entries->hook_func;
|
||||
LOGI("[Shamrock] LSPosed NativeModule Init: %p", hook_function);
|
||||
|
||||
return on_library_loaded;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_moe_fuqiuluo_shamrock_xposed_actions_AntiDetection_antiNativeDetections(JNIEnv *env,
|
||||
jobject thiz) {
|
||||
if (hook_function == nullptr) return false;
|
||||
hook_function((void*) __system_property_get, (void *)fake_system_property_get, (void **) &backup_system_property_get);
|
||||
hook_function((void*) fopen, (void*) fake_fopen, (void**) &backup_fopen);
|
||||
//hook_function((void*) strstr, (void*) fake_strstr, (void**) &backup_strstr);
|
||||
hook_function((void*) memcmp, (void*) fake_memcmp, (void**) &backup_memcmp);
|
||||
|
||||
return true;
|
||||
}
|
26
xposed/src/main/cpp/helper/jnihelper.cpp
Normal file
26
xposed/src/main/cpp/helper/jnihelper.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
#include "jnihelper.h"
|
||||
|
||||
JNIEnv *JNIHelper::getJNIEnv(JavaVM * jvm, int *attach) {
|
||||
if (jvm == NULL) return NULL;
|
||||
|
||||
*attach = 0;
|
||||
JNIEnv *jni_env = NULL;
|
||||
|
||||
int status = jvm->GetEnv((void **)&jni_env, JNI_VERSION_1_6);
|
||||
|
||||
if (status == JNI_EDETACHED || jni_env == NULL) {
|
||||
status = jvm->AttachCurrentThread(&jni_env, NULL);
|
||||
if (status < 0) {
|
||||
jni_env = NULL;
|
||||
} else {
|
||||
*attach = 1;
|
||||
}
|
||||
}
|
||||
return jni_env;
|
||||
}
|
||||
|
||||
jint JNIHelper::delJNIEnv(JavaVM * jvm) {
|
||||
if (jvm == nullptr) return 0;
|
||||
return jvm->DetachCurrentThread();
|
||||
}
|
||||
|
14
xposed/src/main/cpp/helper/jnihelper.h
Normal file
14
xposed/src/main/cpp/helper/jnihelper.h
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef SHAMROCK_JNIHELPER_H
|
||||
#define SHAMROCK_JNIHELPER_H
|
||||
|
||||
#include "jni.h"
|
||||
#include "android/log.h"
|
||||
|
||||
namespace JNIHelper {
|
||||
JNIEnv *getJNIEnv(JavaVM * jvm, int *attach);
|
||||
|
||||
jint delJNIEnv(JavaVM * jvm);
|
||||
}
|
||||
|
||||
|
||||
#endif //SHAMROCK_JNIHELPER_H
|
27
xposed/src/main/cpp/helper/lsposed.h
Normal file
27
xposed/src/main/cpp/helper/lsposed.h
Normal file
@ -0,0 +1,27 @@
|
||||
#ifndef SHAMROCK_LSPOSED_H
|
||||
#define SHAMROCK_LSPOSED_H
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
#define TAG "LSPosed-Bridge"
|
||||
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__)
|
||||
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG ,__VA_ARGS__)
|
||||
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,TAG ,__VA_ARGS__)
|
||||
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG ,__VA_ARGS__)
|
||||
#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,TAG ,__VA_ARGS__)
|
||||
|
||||
typedef int (*HookFunType)(void *func, void *replace, void **backup);
|
||||
|
||||
typedef int (*UnhookFunType)(void *func);
|
||||
|
||||
typedef void (*NativeOnModuleLoaded)(const char *name, void *handle);
|
||||
|
||||
typedef struct {
|
||||
uint32_t version;
|
||||
HookFunType hook_func;
|
||||
UnhookFunType unhook_func;
|
||||
} NativeAPIEntries;
|
||||
|
||||
typedef NativeOnModuleLoaded (*NativeInit)(const NativeAPIEntries *entries);
|
||||
|
||||
#endif //SHAMROCK_LSPOSED_H
|
@ -1,5 +0,0 @@
|
||||
#include <jni.h>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <sys/auxv.h>
|
||||
|
@ -50,7 +50,7 @@ val ProtoValue.asLong: Long
|
||||
get() = (this as ProtoNumber).value.toLong()
|
||||
|
||||
val ProtoValue.asULong: Long
|
||||
get() = (this as ProtoNumber).value.toLong() and 0xFFFFFFFFL
|
||||
get() = (this as ProtoNumber).value.toLong() and Long.MAX_VALUE
|
||||
|
||||
val ProtoValue.asMap: ProtoMap
|
||||
get() = (this as ProtoMap)
|
||||
|
@ -61,7 +61,7 @@ class ProtoMap(
|
||||
var curMap = value
|
||||
tags.forEachIndexed { index, tag ->
|
||||
if (index == tags.size - 1) {
|
||||
return curMap[tag] ?: error("Tag $tag not found")
|
||||
return curMap[tag] ?: error("pb[${tags.joinToString(", ")}][$index] Tag $tag not found")
|
||||
}
|
||||
curMap[tag]?.let { v ->
|
||||
if (v is ProtoMap) {
|
||||
@ -69,7 +69,7 @@ class ProtoMap(
|
||||
} else {
|
||||
return v
|
||||
}
|
||||
} ?: error("Tag $tag not found")
|
||||
} ?: error("pb[${tags.joinToString(", ")}][$index] Tag $tag not found")
|
||||
}
|
||||
error("Instance is not ProtoMap for get(${tags.first()})")
|
||||
}
|
||||
|
@ -0,0 +1,5 @@
|
||||
@file:OptIn(ExperimentalSerializationApi::class)
|
||||
package moe.fuqiuluo.qqinterface.entries
|
||||
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.Serializable
|
@ -11,6 +11,8 @@ import kotlinx.coroutines.DelicateCoroutinesApi
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import kotlinx.coroutines.withTimeoutOrNull
|
||||
import moe.fuqiuluo.proto.protobufOf
|
||||
import moe.fuqiuluo.shamrock.utils.PlatformUtils
|
||||
import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher
|
||||
@ -35,45 +37,41 @@ internal abstract class BaseSvc {
|
||||
return ToServiceMsg("mobileqq.service", app.currentAccountUin, cmd)
|
||||
}
|
||||
|
||||
suspend fun sendOidbAW(cmd: String, cmdId: Int, serviceId: Int, data: ByteArray, trpc: Boolean = false): ByteArray? {
|
||||
return suspendCoroutine { continuation ->
|
||||
val seq = MsfCore.getNextSeq()
|
||||
val timer = timer(initialDelay = 5000L, period = 5000L) {
|
||||
suspend fun sendOidbAW(cmd: String, cmdId: Int, serviceId: Int, data: ByteArray, trpc: Boolean = false, timeout: Long = 5000L): ByteArray? {
|
||||
val seq = MsfCore.getNextSeq()
|
||||
return withTimeoutOrNull(timeout) {
|
||||
suspendCancellableCoroutine { continuation ->
|
||||
GlobalScope.launch(Dispatchers.Default) {
|
||||
PacketHandler.unregisterLessHandler(seq)
|
||||
continuation.resume(null)
|
||||
DynamicReceiver.register(IPCRequest(cmd, seq) {
|
||||
val buffer = it.getByteArrayExtra("buffer")!!
|
||||
continuation.resume(buffer)
|
||||
})
|
||||
}
|
||||
if (trpc) sendTrpcOidb(cmd, cmdId, serviceId, data, seq)
|
||||
else sendOidb(cmd, cmdId, serviceId, data, seq)
|
||||
}
|
||||
GlobalScope.launch(Dispatchers.Default) {
|
||||
DynamicReceiver.register(IPCRequest(cmd, seq) {
|
||||
val buffer = it.getByteArrayExtra("buffer")!!
|
||||
timer.cancel()
|
||||
continuation.resume(buffer)
|
||||
})
|
||||
}
|
||||
if (trpc) sendTrpcOidb(cmd, cmdId, serviceId, data, seq)
|
||||
else sendOidb(cmd, cmdId, serviceId, data, seq)
|
||||
}
|
||||
}.also {
|
||||
if (it == null)
|
||||
DynamicReceiver.unregister(seq)
|
||||
}?.copyOf()
|
||||
}
|
||||
|
||||
suspend fun sendBufferAW(cmd: String, isPb: Boolean, data: ByteArray): ByteArray? {
|
||||
return suspendCoroutine { continuation ->
|
||||
val seq = MsfCore.getNextSeq()
|
||||
val timer = timer(initialDelay = 5000L, period = 5000L) {
|
||||
suspend fun sendBufferAW(cmd: String, isPb: Boolean, data: ByteArray, timeout: Long = 5000L): ByteArray? {
|
||||
val seq = MsfCore.getNextSeq()
|
||||
return withTimeoutOrNull<ByteArray?>(timeout) {
|
||||
suspendCancellableCoroutine { continuation ->
|
||||
GlobalScope.launch(Dispatchers.Default) {
|
||||
PacketHandler.unregisterLessHandler(seq)
|
||||
continuation.resume(null)
|
||||
DynamicReceiver.register(IPCRequest(cmd, seq) {
|
||||
val buffer = it.getByteArrayExtra("buffer")!!
|
||||
continuation.resume(buffer)
|
||||
})
|
||||
sendBuffer(cmd, isPb, data, seq)
|
||||
}
|
||||
}
|
||||
GlobalScope.launch(Dispatchers.Default) {
|
||||
DynamicReceiver.register(IPCRequest(cmd, seq) {
|
||||
val buffer = it.getByteArrayExtra("buffer")!!
|
||||
timer.cancel()
|
||||
continuation.resume(buffer)
|
||||
})
|
||||
sendBuffer(cmd, isPb, data, seq)
|
||||
}
|
||||
}
|
||||
}.also {
|
||||
if (it == null)
|
||||
DynamicReceiver.unregister(seq)
|
||||
}?.copyOf()
|
||||
}
|
||||
|
||||
fun sendOidb(cmd: String, cmdId: Int, serviceId: Int, buffer: ByteArray, seq: Int = -1, trpc: Boolean = false) {
|
||||
@ -110,7 +108,7 @@ internal abstract class BaseSvc {
|
||||
app.sendToService(to)
|
||||
}
|
||||
|
||||
fun sendBuffer(cmd: String, isPb: Boolean, buffer: ByteArray, seq: Int) {
|
||||
fun sendBuffer(cmd: String, isPb: Boolean, buffer: ByteArray, seq: Int = MsfCore.getNextSeq()) {
|
||||
val toServiceMsg = ToServiceMsg("mobileqq.service", app.currentUin, cmd)
|
||||
toServiceMsg.putWupBuffer(buffer)
|
||||
toServiceMsg.addAttribute("req_pb_protocol_flag", isPb)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user