├── .github └── workflows │ ├── maven.yml │ └── release.yml ├── .gitignore ├── .idea ├── .gitignore ├── artifacts │ └── getjuan_jar.xml ├── compiler.xml ├── encodings.xml ├── getjuan.iml ├── jarRepositories.xml ├── misc.xml ├── modules.xml ├── uiDesigner.xml └── vcs.xml ├── README.md ├── _miain_.py ├── botpy.log ├── cache └── validator.bin ├── getjuan.iml ├── logs ├── 2024-09-05.log └── 2024-09-06.log ├── pom.xml ├── src └── main │ ├── java │ ├── Config │ │ ├── ServerConfig.java │ │ └── Setting.java │ ├── Connect │ │ ├── DecompressionUtils.java │ │ ├── Dispose.java │ │ ├── HttpUtils.java │ │ ├── RemoveLogin.java │ │ ├── RequestBodyBuilder.java │ │ ├── RequestHeadersBuilder.java │ │ └── SendReq.java │ ├── META-INF │ │ └── MANIFEST.MF │ ├── Main.java │ └── logic │ │ ├── BuildUserAll.java │ │ ├── Json.java │ │ ├── ModifyData.java │ │ ├── ReturnCode.java │ │ └── UserInputUtils.java │ └── resources │ └── META-INF │ └── plugin.yml └── userall.txt /.github/workflows/maven.yml: -------------------------------------------------------------------------------- 1 | name: Java CI with Maven 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 8 | 9 | permissions: 10 | contents: write 11 | security-events: write 12 | 13 | jobs: 14 | build: 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Set up JDK 17 20 | uses: actions/setup-java@v4 21 | with: 22 | java-version: '17' 23 | distribution: 'temurin' 24 | cache: maven 25 | - name: Build with Maven 26 | run: mvn -B package --file pom.xml 27 | 28 | # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive 29 | - name: Update dependency graph 30 | uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6 31 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Build and Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*.*.*' # 触发条件:推送标签 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout repository 14 | uses: Natsunokonoha/checkout@main 15 | 16 | - name: Set up JDK 17 17 | uses: Natsunokonoha/setup-java@main 18 | with: 19 | java-version: '17' 20 | 21 | - name: Build with Maven 22 | run: mvn clean package 23 | 24 | - name: List files in target directory 25 | run: ls -la target/ 26 | 27 | - name: Create GitHub Release 28 | id: create_release 29 | uses: Natsunokonoha/create-release@main 30 | env: 31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 32 | with: 33 | tag_name: ${{ github.ref }} 34 | release_name: Release ${{ github.ref }} 35 | draft: false 36 | prerelease: false 37 | 38 | - name: Output upload URL 39 | run: echo "Upload URL: ${{ steps.create_release.outputs.upload_url }}" 40 | 41 | - name: Upload JAR to Release 42 | uses: Natsunokonoha/upload-release-asset@main 43 | with: 44 | upload_url: ${{ steps.create_release.outputs.upload_url }} 45 | asset_path: target/your-project.jar 46 | asset_name: getjuan.jar 47 | asset_content_type: application/getjuan 48 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### IntelliJ IDEA ### 2 | out/ 3 | !**/src/main/**/out/ 4 | !**/src/test/**/out/ 5 | 6 | ### Eclipse ### 7 | .apt_generated 8 | .classpath 9 | .factorypath 10 | .project 11 | .settings 12 | .springBeans 13 | .sts4-cache 14 | bin/ 15 | !**/src/main/**/bin/ 16 | !**/src/test/**/bin/ 17 | 18 | ### NetBeans ### 19 | /nbproject/private/ 20 | /nbbuild/ 21 | /dist/ 22 | /nbdist/ 23 | /.nb-gradle/ 24 | 25 | ### VS Code ### 26 | .vscode/ 27 | 28 | ### Mac OS ### 29 | .DS_Store 30 | # 项目排除路径 31 | /target/ -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # 默认忽略的文件 2 | /shelf/ 3 | /workspace.xml 4 | # 基于编辑器的 HTTP 客户端请求 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/artifacts/getjuan_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | $PROJECT_DIR$/out/artifacts/getjuan_jar 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/getjuan.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/uiDesigner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 舞萌DX工具 2 | ## ⚖本项目遵循MPL2.0 3 | ## 他能干什么? 4 | 最终目的是实现用户对自己账户内容的一些修改包括但不限于发票、修改乐曲数据、b50、获得新乐曲等然后集成到qqbot里面去。 5 | 6 | ## 目前的实现 7 | 🟢发票 8 | 9 | 🟢暴力登出(解小黑屋) 10 | ## 正在实现的功能 11 | 🟡构建完整的userAll 12 | 13 | 🔴无限每日集章 14 | 15 | 🔴获得歌曲 16 | 17 | 🔴一键打段位 18 | 19 | 🔴修改乐曲数据 20 | 21 | 🔴修改物品 22 | 23 | 🔴修改旅行伙伴 24 | 25 | ## 未来实现的功能 26 | 🔴接入QQbotApi 27 | 28 | 🔴接入水鱼查分器 29 | 30 | 🔴创建数据库保存bot相关 31 | 32 | 🔴创建b50 33 | 34 | 🔴使用分布ip减少不可用的情况 35 | 36 | -------------------------------------------------------------------------------- /_miain_.py: -------------------------------------------------------------------------------- 1 | import botpy 2 | 3 | import botpy 4 | from botpy.types.message import Message 5 | 6 | class MyClient(botpy.Client): 7 | async def on_at_message_create(self, message: Message): 8 | await self.api.post_message(channel_id=message.channel_id, content="content") 9 | 10 | intents = botpy.Intents(public_guild_messages=True) 11 | client = MyClient(intents=intents) 12 | client.run(appid={}, token={}) 13 | -------------------------------------------------------------------------------- /botpy.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HoshinoStarry/NaTsuTool/9d2b63325c602126cd0a1c6040a0b077b6df4823/botpy.log -------------------------------------------------------------------------------- /cache/validator.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HoshinoStarry/NaTsuTool/9d2b63325c602126cd0a1c6040a0b077b6df4823/cache/validator.bin -------------------------------------------------------------------------------- /getjuan.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /logs/2024-09-05.log: -------------------------------------------------------------------------------- 1 | [qq-pd-group][Normal][09/05-21:48:03:043]=>can't load extension(s) [io.github.kloping.little_web.WebExtension, io.github.kloping.spt.SptRedis] 2 | [qq-pd-group][Info] [09/05-21:48:03:146]=>version 0.6.3-L1 sptool start success 3 | [qq-pd-group][Normal][09/05-21:48:03:147]=>autoStand contextManager in Start0 4 | [qq-pd-group][Normal][09/05-21:48:03:147]=>计时任务结束... 5 | [qq-pd-group][Normal][09/05-21:48:03:147]=>autoStand authV2Base in Start0 6 | [qq-pd-group][Normal][09/05-21:48:03:148]=>autoStand contextManager in WssWorker 7 | [qq-pd-group][Normal][09/05-21:48:03:148]=>autoStand botBase in WssWorker 8 | [qq-pd-group][Normal][09/05-21:48:03:148]=>autoStand logger in WssWorker 9 | [qq-pd-group][Normal][09/05-21:48:03:148]=>autoStand config in WssWorker 10 | [qq-pd-group][Normal][09/05-21:48:03:148]=>autoStand bot in GroupRobotEventRegister 11 | [qq-pd-group][Normal][09/05-21:48:03:148]=>autoStand logger in Bot 12 | [qq-pd-group][Normal][09/05-21:48:03:148]=>autoStand interActionBase in Bot 13 | [qq-pd-group][Normal][09/05-21:48:03:148]=>autoStand guildBase in Bot 14 | [qq-pd-group][Normal][09/05-21:48:03:149]=>autoStand userBase in Bot 15 | [qq-pd-group][Normal][09/05-21:48:03:149]=>autoStand channelBase in Bot 16 | [qq-pd-group][Normal][09/05-21:48:03:149]=>autoStand dmsBase in Bot 17 | [qq-pd-group][Normal][09/05-21:48:03:149]=>autoStand messageBase in Bot 18 | [qq-pd-group][Normal][09/05-21:48:03:149]=>autoStand memberBase in Bot 19 | [qq-pd-group][Normal][09/05-21:48:03:149]=>autoStand groupBaseV2 in Bot 20 | [qq-pd-group][Normal][09/05-21:48:03:149]=>autoStand userBaseV2 in Bot 21 | [qq-pd-group][Normal][09/05-21:48:03:149]=>autoStand authV2Base in Bot 22 | [qq-pd-group][Normal][09/05-21:48:03:150]=>autoStand config in Bot 23 | [qq-pd-group][Normal][09/05-21:48:03:150]=>autoStand logger in HttpClientConfig 24 | [qq-pd-group][Normal][09/05-21:48:03:150]=>autoStand bot in HttpClientConfig 25 | [qq-pd-group][Normal][09/05-21:48:03:150]=>autoStand config in Events 26 | [qq-pd-group][Normal][09/05-21:48:03:150]=>autoStand logger in Events 27 | [qq-pd-group][Normal][09/05-21:48:03:150]=>autoStand bot in Events 28 | [qq-pd-group][Normal][09/05-21:48:03:150]=>autoStand bot in ChannelEventsRegister 29 | [qq-pd-group][Normal][09/05-21:48:03:150]=>autoStand bot in InterActionEventRegister 30 | [qq-pd-group][Normal][09/05-21:48:03:150]=>autoStand logger in InterActionEventRegister 31 | [qq-pd-group][Normal][09/05-21:48:03:150]=>autoStand logger in AuthAndHeartbeat 32 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand contextManager in AuthAndHeartbeat 33 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand wssWorker in AuthAndHeartbeat 34 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand config in AuthAndHeartbeat 35 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand bot in AuthAndHeartbeat 36 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand bot in MemberEventRegisters 37 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand bot in FriendEventsRegister 38 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand bot in MessageDeleteEventRegister 39 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand bot in GuildEventsRegister 40 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand logger in GuildEventsRegister 41 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand bot in GroupEventsRegister 42 | [qq-pd-group][Normal][09/05-21:48:03:152]=>autoStand logger in GroupEventsRegister 43 | [qq-pd-group][Normal][09/05-21:48:03:153]=>autoStand bot in MessageReactionEventRegister 44 | [qq-pd-group][Normal][09/05-21:48:03:153]=>autoStand bot in MessageEventsRegister 45 | [qq-pd-group][Error] [09/05-21:48:03:759]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 46 | [qq-pd-group][Normal][09/05-21:48:03:873]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"90b5a1c5c0dac6f2bf58e9711882d3ee"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 47 | [qq-pd-group][Error] [09/05-21:48:03:874]=>在WebSocketClient启动时失败 48 | [qq-pd-group][Normal][09/05-21:48:10:514]=>can't load extension(s) [io.github.kloping.little_web.WebExtension, io.github.kloping.spt.SptRedis] 49 | [qq-pd-group][Info] [09/05-21:48:10:613]=>version 0.6.3-L1 sptool start success 50 | [qq-pd-group][Normal][09/05-21:48:10:614]=>autoStand contextManager in Start0 51 | [qq-pd-group][Normal][09/05-21:48:10:614]=>计时任务结束... 52 | [qq-pd-group][Normal][09/05-21:48:10:614]=>autoStand authV2Base in Start0 53 | [qq-pd-group][Normal][09/05-21:48:10:614]=>autoStand contextManager in WssWorker 54 | [qq-pd-group][Normal][09/05-21:48:10:614]=>autoStand botBase in WssWorker 55 | [qq-pd-group][Normal][09/05-21:48:10:615]=>autoStand logger in WssWorker 56 | [qq-pd-group][Normal][09/05-21:48:10:615]=>autoStand config in WssWorker 57 | [qq-pd-group][Normal][09/05-21:48:10:615]=>autoStand bot in GroupRobotEventRegister 58 | [qq-pd-group][Normal][09/05-21:48:10:615]=>autoStand logger in Bot 59 | [qq-pd-group][Normal][09/05-21:48:10:615]=>autoStand interActionBase in Bot 60 | [qq-pd-group][Normal][09/05-21:48:10:615]=>autoStand guildBase in Bot 61 | [qq-pd-group][Normal][09/05-21:48:10:615]=>autoStand userBase in Bot 62 | [qq-pd-group][Normal][09/05-21:48:10:616]=>autoStand channelBase in Bot 63 | [qq-pd-group][Normal][09/05-21:48:10:616]=>autoStand dmsBase in Bot 64 | [qq-pd-group][Normal][09/05-21:48:10:616]=>autoStand messageBase in Bot 65 | [qq-pd-group][Normal][09/05-21:48:10:616]=>autoStand memberBase in Bot 66 | [qq-pd-group][Normal][09/05-21:48:10:616]=>autoStand groupBaseV2 in Bot 67 | [qq-pd-group][Normal][09/05-21:48:10:616]=>autoStand userBaseV2 in Bot 68 | [qq-pd-group][Normal][09/05-21:48:10:616]=>autoStand authV2Base in Bot 69 | [qq-pd-group][Normal][09/05-21:48:10:616]=>autoStand config in Bot 70 | [qq-pd-group][Normal][09/05-21:48:10:617]=>autoStand logger in HttpClientConfig 71 | [qq-pd-group][Normal][09/05-21:48:10:617]=>autoStand bot in HttpClientConfig 72 | [qq-pd-group][Normal][09/05-21:48:10:617]=>autoStand config in Events 73 | [qq-pd-group][Normal][09/05-21:48:10:617]=>autoStand logger in Events 74 | [qq-pd-group][Normal][09/05-21:48:10:617]=>autoStand bot in Events 75 | [qq-pd-group][Normal][09/05-21:48:10:617]=>autoStand bot in ChannelEventsRegister 76 | [qq-pd-group][Normal][09/05-21:48:10:617]=>autoStand bot in InterActionEventRegister 77 | [qq-pd-group][Normal][09/05-21:48:10:617]=>autoStand logger in InterActionEventRegister 78 | [qq-pd-group][Normal][09/05-21:48:10:617]=>autoStand logger in AuthAndHeartbeat 79 | [qq-pd-group][Normal][09/05-21:48:10:617]=>autoStand contextManager in AuthAndHeartbeat 80 | [qq-pd-group][Normal][09/05-21:48:10:618]=>autoStand wssWorker in AuthAndHeartbeat 81 | [qq-pd-group][Normal][09/05-21:48:10:618]=>autoStand config in AuthAndHeartbeat 82 | [qq-pd-group][Normal][09/05-21:48:10:618]=>autoStand bot in AuthAndHeartbeat 83 | [qq-pd-group][Normal][09/05-21:48:10:618]=>autoStand bot in MemberEventRegisters 84 | [qq-pd-group][Normal][09/05-21:48:10:618]=>autoStand bot in FriendEventsRegister 85 | [qq-pd-group][Normal][09/05-21:48:10:618]=>autoStand bot in MessageDeleteEventRegister 86 | [qq-pd-group][Normal][09/05-21:48:10:618]=>autoStand bot in GuildEventsRegister 87 | [qq-pd-group][Normal][09/05-21:48:10:618]=>autoStand logger in GuildEventsRegister 88 | [qq-pd-group][Normal][09/05-21:48:10:618]=>autoStand bot in GroupEventsRegister 89 | [qq-pd-group][Normal][09/05-21:48:10:618]=>autoStand logger in GroupEventsRegister 90 | [qq-pd-group][Normal][09/05-21:48:10:619]=>autoStand bot in MessageReactionEventRegister 91 | [qq-pd-group][Normal][09/05-21:48:10:619]=>autoStand bot in MessageEventsRegister 92 | [qq-pd-group][Error] [09/05-21:48:11:104]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 93 | [qq-pd-group][Normal][09/05-21:48:11:203]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"088763bc1e6a9de3cfd647d1f5adfd94"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 94 | [qq-pd-group][Error] [09/05-21:48:11:204]=>在WebSocketClient启动时失败 95 | [qq-pd-group][Error] [09/05-21:48:21:409]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 96 | [qq-pd-group][Normal][09/05-21:48:21:409]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"160b693d6adcc66163903faa9de598f8"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 97 | [qq-pd-group][Error] [09/05-21:48:21:410]=>在WebSocketClient启动时失败 98 | [qq-pd-group][Error] [09/05-21:48:31:593]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 99 | [qq-pd-group][Normal][09/05-21:48:31:594]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"c058f3ad1482224be07590bb808b4bd1"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 100 | [qq-pd-group][Error] [09/05-21:48:31:594]=>在WebSocketClient启动时失败 101 | [qq-pd-group][Normal][09/05-22:23:09:469]=>can't load extension(s) [io.github.kloping.little_web.WebExtension, io.github.kloping.spt.SptRedis] 102 | [qq-pd-group][Info] [09/05-22:23:09:567]=>version 0.6.3-L1 sptool start success 103 | [qq-pd-group][Normal][09/05-22:23:09:568]=>autoStand contextManager in Start0 104 | [qq-pd-group][Normal][09/05-22:23:09:568]=>计时任务结束... 105 | [qq-pd-group][Normal][09/05-22:23:09:569]=>autoStand authV2Base in Start0 106 | [qq-pd-group][Normal][09/05-22:23:09:569]=>autoStand contextManager in WssWorker 107 | [qq-pd-group][Normal][09/05-22:23:09:569]=>autoStand botBase in WssWorker 108 | [qq-pd-group][Normal][09/05-22:23:09:569]=>autoStand logger in WssWorker 109 | [qq-pd-group][Normal][09/05-22:23:09:569]=>autoStand config in WssWorker 110 | [qq-pd-group][Normal][09/05-22:23:09:569]=>autoStand bot in GroupRobotEventRegister 111 | [qq-pd-group][Normal][09/05-22:23:09:570]=>autoStand logger in Bot 112 | [qq-pd-group][Normal][09/05-22:23:09:570]=>autoStand interActionBase in Bot 113 | [qq-pd-group][Normal][09/05-22:23:09:570]=>autoStand guildBase in Bot 114 | [qq-pd-group][Normal][09/05-22:23:09:570]=>autoStand userBase in Bot 115 | [qq-pd-group][Normal][09/05-22:23:09:570]=>autoStand channelBase in Bot 116 | [qq-pd-group][Normal][09/05-22:23:09:570]=>autoStand dmsBase in Bot 117 | [qq-pd-group][Normal][09/05-22:23:09:570]=>autoStand messageBase in Bot 118 | [qq-pd-group][Normal][09/05-22:23:09:570]=>autoStand memberBase in Bot 119 | [qq-pd-group][Normal][09/05-22:23:09:571]=>autoStand groupBaseV2 in Bot 120 | [qq-pd-group][Normal][09/05-22:23:09:571]=>autoStand userBaseV2 in Bot 121 | [qq-pd-group][Normal][09/05-22:23:09:571]=>autoStand authV2Base in Bot 122 | [qq-pd-group][Normal][09/05-22:23:09:571]=>autoStand config in Bot 123 | [qq-pd-group][Normal][09/05-22:23:09:571]=>autoStand logger in HttpClientConfig 124 | [qq-pd-group][Normal][09/05-22:23:09:571]=>autoStand bot in HttpClientConfig 125 | [qq-pd-group][Normal][09/05-22:23:09:571]=>autoStand config in Events 126 | [qq-pd-group][Normal][09/05-22:23:09:571]=>autoStand logger in Events 127 | [qq-pd-group][Normal][09/05-22:23:09:571]=>autoStand bot in Events 128 | [qq-pd-group][Normal][09/05-22:23:09:572]=>autoStand bot in ChannelEventsRegister 129 | [qq-pd-group][Normal][09/05-22:23:09:572]=>autoStand bot in InterActionEventRegister 130 | [qq-pd-group][Normal][09/05-22:23:09:572]=>autoStand logger in InterActionEventRegister 131 | [qq-pd-group][Normal][09/05-22:23:09:572]=>autoStand logger in AuthAndHeartbeat 132 | [qq-pd-group][Normal][09/05-22:23:09:572]=>autoStand contextManager in AuthAndHeartbeat 133 | [qq-pd-group][Normal][09/05-22:23:09:572]=>autoStand wssWorker in AuthAndHeartbeat 134 | [qq-pd-group][Normal][09/05-22:23:09:572]=>autoStand config in AuthAndHeartbeat 135 | [qq-pd-group][Normal][09/05-22:23:09:573]=>autoStand bot in AuthAndHeartbeat 136 | [qq-pd-group][Normal][09/05-22:23:09:573]=>autoStand bot in MemberEventRegisters 137 | [qq-pd-group][Normal][09/05-22:23:09:573]=>autoStand bot in FriendEventsRegister 138 | [qq-pd-group][Normal][09/05-22:23:09:573]=>autoStand bot in MessageDeleteEventRegister 139 | [qq-pd-group][Normal][09/05-22:23:09:573]=>autoStand bot in GuildEventsRegister 140 | [qq-pd-group][Normal][09/05-22:23:09:573]=>autoStand logger in GuildEventsRegister 141 | [qq-pd-group][Normal][09/05-22:23:09:573]=>autoStand bot in GroupEventsRegister 142 | [qq-pd-group][Normal][09/05-22:23:09:573]=>autoStand logger in GroupEventsRegister 143 | [qq-pd-group][Normal][09/05-22:23:09:573]=>autoStand bot in MessageReactionEventRegister 144 | [qq-pd-group][Normal][09/05-22:23:09:574]=>autoStand bot in MessageEventsRegister 145 | [qq-pd-group][Error] [09/05-22:23:10:352]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 146 | [qq-pd-group][Normal][09/05-22:23:10:460]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"69f950d7f76d5f9569b7edc46dbb1c7b"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 147 | [qq-pd-group][Error] [09/05-22:23:10:461]=>在WebSocketClient启动时失败 148 | [qq-pd-group][Error] [09/05-22:23:20:796]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 149 | [qq-pd-group][Normal][09/05-22:23:20:796]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"dba6a4081a4630a525e682ac56c9cc3a"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 150 | [qq-pd-group][Error] [09/05-22:23:20:797]=>在WebSocketClient启动时失败 151 | [qq-pd-group][Error] [09/05-22:23:31:123]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 152 | [qq-pd-group][Normal][09/05-22:23:31:123]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"b247e57aa7c1e84c25bf596575426811"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 153 | [qq-pd-group][Error] [09/05-22:23:31:124]=>在WebSocketClient启动时失败 154 | [qq-pd-group][Error] [09/05-22:23:41:483]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 155 | [qq-pd-group][Normal][09/05-22:23:41:483]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"403644efb5def3ff01a10a10ffdbb108"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 156 | [qq-pd-group][Error] [09/05-22:23:41:484]=>在WebSocketClient启动时失败 157 | [qq-pd-group][Error] [09/05-22:23:51:806]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 158 | [qq-pd-group][Normal][09/05-22:23:51:806]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"9212e96226edaa8dcf1fe864655d74ef"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 159 | [qq-pd-group][Error] [09/05-22:23:51:807]=>在WebSocketClient启动时失败 160 | [qq-pd-group][Error] [09/05-22:24:02:080]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 161 | [qq-pd-group][Normal][09/05-22:24:02:081]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"4e3ed582e6a62f172212d46237b070c8"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 162 | [qq-pd-group][Error] [09/05-22:24:02:081]=>在WebSocketClient启动时失败 163 | [qq-pd-group][Error] [09/05-22:24:12:454]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 164 | [qq-pd-group][Normal][09/05-22:24:12:455]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"5a43d2c76ffcdec0cc2eead52f8d592f"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 165 | [qq-pd-group][Error] [09/05-22:24:12:455]=>在WebSocketClient启动时失败 166 | [qq-pd-group][Error] [09/05-22:24:22:646]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 167 | [qq-pd-group][Normal][09/05-22:24:22:646]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"0734eba2f0d0b7cde21c97e6e1e538d9"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 168 | [qq-pd-group][Error] [09/05-22:24:22:646]=>在WebSocketClient启动时失败 169 | [qq-pd-group][Error] [09/05-22:24:32:889]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 170 | [qq-pd-group][Normal][09/05-22:24:32:889]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"6ca4c3391180af620e382b9a124fa49c"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 171 | [qq-pd-group][Error] [09/05-22:24:32:889]=>在WebSocketClient启动时失败 172 | [qq-pd-group][Error] [09/05-22:24:43:114]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 173 | [qq-pd-group][Normal][09/05-22:24:43:114]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"90ca395b9c89485fbd9929cbe9c38524"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 174 | [qq-pd-group][Error] [09/05-22:24:43:114]=>在WebSocketClient启动时失败 175 | [qq-pd-group][Error] [09/05-22:24:53:319]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 176 | [qq-pd-group][Normal][09/05-22:24:53:322]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"01168389dd56ceaa2ce141f63fc1dc87"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 177 | [qq-pd-group][Error] [09/05-22:24:53:322]=>在WebSocketClient启动时失败 178 | [qq-pd-group][Error] [09/05-22:25:03:558]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 179 | [qq-pd-group][Normal][09/05-22:25:03:558]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"26e98c65b2badf268ac41720f3748dd9"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 180 | [qq-pd-group][Error] [09/05-22:25:03:559]=>在WebSocketClient启动时失败 181 | [qq-pd-group][Error] [09/05-22:25:13:781]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 182 | [qq-pd-group][Normal][09/05-22:25:13:781]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"4cc7918678948aa750721182e9e3fc33"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 183 | [qq-pd-group][Error] [09/05-22:25:13:781]=>在WebSocketClient启动时失败 184 | [qq-pd-group][Error] [09/05-22:25:23:985]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 185 | [qq-pd-group][Normal][09/05-22:25:23:985]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"9f3ff14ad89ee58478c1d7e89be78467"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 186 | [qq-pd-group][Error] [09/05-22:25:23:986]=>在WebSocketClient启动时失败 187 | [qq-pd-group][Error] [09/05-22:25:34:198]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 188 | [qq-pd-group][Normal][09/05-22:25:34:198]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"873176e819432a09eda480d094d2fee9"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 189 | [qq-pd-group][Error] [09/05-22:25:34:198]=>在WebSocketClient启动时失败 190 | [qq-pd-group][Error] [09/05-22:25:44:400]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 191 | [qq-pd-group][Normal][09/05-22:25:44:400]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"d814f4007edd907a994f0ac5712296ee"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 192 | [qq-pd-group][Error] [09/05-22:25:44:400]=>在WebSocketClient启动时失败 193 | [qq-pd-group][Error] [09/05-22:25:54:622]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 194 | [qq-pd-group][Normal][09/05-22:25:54:623]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"801d76008bb166b7c12c7beee8014f95"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 195 | [qq-pd-group][Error] [09/05-22:25:54:623]=>在WebSocketClient启动时失败 196 | [qq-pd-group][Error] [09/05-22:26:04:834]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 197 | [qq-pd-group][Normal][09/05-22:26:04:835]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"477d1f11e5d674a48a55d5f11ddc66e8"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 198 | [qq-pd-group][Error] [09/05-22:26:04:835]=>在WebSocketClient启动时失败 199 | [qq-pd-group][Error] [09/05-22:26:15:059]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 200 | [qq-pd-group][Normal][09/05-22:26:15:060]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"22ca9e51fdcf6416875de61d22b598ec"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 201 | [qq-pd-group][Error] [09/05-22:26:15:060]=>在WebSocketClient启动时失败 202 | [qq-pd-group][Error] [09/05-22:26:25:244]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 203 | [qq-pd-group][Normal][09/05-22:26:25:245]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"b7957a133e7a568f6babe37a65678cc2"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 204 | [qq-pd-group][Error] [09/05-22:26:25:245]=>在WebSocketClient启动时失败 205 | [qq-pd-group][Normal][09/05-22:26:35:475]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (200), and ({"url":"wss://api.sgroup.qq.com/websocket"}) may be converted to (UrlPack{url='wss://api.sgroup.qq.com/websocket'}) type Will be processed and filtered 206 | [qq-pd-group][Normal][09/05-22:26:35:475]=>ws url:wss://api.sgroup.qq.com/websocket 207 | [qq-pd-group][Info] [09/05-22:26:35:723]=>wss opened 208 | [qq-pd-group][Normal][09/05-22:26:35:729]=>receive {"d":{"heartbeat_interval":41250},"op":10} 209 | [qq-pd-group][Info] [09/05-22:26:35:729]=>Authentication 210 | [qq-pd-group][Normal][09/05-22:26:35:744]=>wss send: {"d":{"intents":1007162883,"shard":[0,1],"properties":{},"token":"Bot 102145937.ndTJajFSnzcUYjTKm7KwrPZd7DiD6EnZ"},"op":2} 211 | [qq-pd-group][Normal][09/05-22:26:35:816]=>receive {"op":9,"d":false} 212 | [qq-pd-group][Debug] [09/05-22:26:35:817]=>wss closed with code 4014 disallowed intents 213 | [qq-pd-group][Error] [09/05-22:26:35:817]=>无权限订阅事件 214 | [qq-pd-group][Normal][09/05-22:27:01:919]=>can't load extension(s) [io.github.kloping.little_web.WebExtension, io.github.kloping.spt.SptRedis] 215 | [qq-pd-group][Info] [09/05-22:27:02:016]=>version 0.6.3-L1 sptool start success 216 | [qq-pd-group][Normal][09/05-22:27:02:017]=>autoStand contextManager in Start0 217 | [qq-pd-group][Normal][09/05-22:27:02:017]=>计时任务结束... 218 | [qq-pd-group][Normal][09/05-22:27:02:017]=>autoStand authV2Base in Start0 219 | [qq-pd-group][Normal][09/05-22:27:02:018]=>autoStand contextManager in WssWorker 220 | [qq-pd-group][Normal][09/05-22:27:02:018]=>autoStand botBase in WssWorker 221 | [qq-pd-group][Normal][09/05-22:27:02:018]=>autoStand logger in WssWorker 222 | [qq-pd-group][Normal][09/05-22:27:02:018]=>autoStand config in WssWorker 223 | [qq-pd-group][Normal][09/05-22:27:02:018]=>autoStand bot in GroupRobotEventRegister 224 | [qq-pd-group][Normal][09/05-22:27:02:018]=>autoStand logger in Bot 225 | [qq-pd-group][Normal][09/05-22:27:02:018]=>autoStand interActionBase in Bot 226 | [qq-pd-group][Normal][09/05-22:27:02:018]=>autoStand guildBase in Bot 227 | [qq-pd-group][Normal][09/05-22:27:02:019]=>autoStand userBase in Bot 228 | [qq-pd-group][Normal][09/05-22:27:02:019]=>autoStand channelBase in Bot 229 | [qq-pd-group][Normal][09/05-22:27:02:019]=>autoStand dmsBase in Bot 230 | [qq-pd-group][Normal][09/05-22:27:02:019]=>autoStand messageBase in Bot 231 | [qq-pd-group][Normal][09/05-22:27:02:019]=>autoStand memberBase in Bot 232 | [qq-pd-group][Normal][09/05-22:27:02:019]=>autoStand groupBaseV2 in Bot 233 | [qq-pd-group][Normal][09/05-22:27:02:019]=>autoStand userBaseV2 in Bot 234 | [qq-pd-group][Normal][09/05-22:27:02:019]=>autoStand authV2Base in Bot 235 | [qq-pd-group][Normal][09/05-22:27:02:020]=>autoStand config in Bot 236 | [qq-pd-group][Normal][09/05-22:27:02:020]=>autoStand logger in HttpClientConfig 237 | [qq-pd-group][Normal][09/05-22:27:02:020]=>autoStand bot in HttpClientConfig 238 | [qq-pd-group][Normal][09/05-22:27:02:020]=>autoStand config in Events 239 | [qq-pd-group][Normal][09/05-22:27:02:020]=>autoStand logger in Events 240 | [qq-pd-group][Normal][09/05-22:27:02:020]=>autoStand bot in Events 241 | [qq-pd-group][Normal][09/05-22:27:02:021]=>autoStand bot in ChannelEventsRegister 242 | [qq-pd-group][Normal][09/05-22:27:02:021]=>autoStand bot in InterActionEventRegister 243 | [qq-pd-group][Normal][09/05-22:27:02:021]=>autoStand logger in InterActionEventRegister 244 | [qq-pd-group][Normal][09/05-22:27:02:021]=>autoStand logger in AuthAndHeartbeat 245 | [qq-pd-group][Normal][09/05-22:27:02:021]=>autoStand contextManager in AuthAndHeartbeat 246 | [qq-pd-group][Normal][09/05-22:27:02:021]=>autoStand wssWorker in AuthAndHeartbeat 247 | [qq-pd-group][Normal][09/05-22:27:02:021]=>autoStand config in AuthAndHeartbeat 248 | [qq-pd-group][Normal][09/05-22:27:02:021]=>autoStand bot in AuthAndHeartbeat 249 | [qq-pd-group][Normal][09/05-22:27:02:022]=>autoStand bot in MemberEventRegisters 250 | [qq-pd-group][Normal][09/05-22:27:02:022]=>autoStand bot in FriendEventsRegister 251 | [qq-pd-group][Normal][09/05-22:27:02:022]=>autoStand bot in MessageDeleteEventRegister 252 | [qq-pd-group][Normal][09/05-22:27:02:022]=>autoStand bot in GuildEventsRegister 253 | [qq-pd-group][Normal][09/05-22:27:02:022]=>autoStand logger in GuildEventsRegister 254 | [qq-pd-group][Normal][09/05-22:27:02:022]=>autoStand bot in GroupEventsRegister 255 | [qq-pd-group][Normal][09/05-22:27:02:022]=>autoStand logger in GroupEventsRegister 256 | [qq-pd-group][Normal][09/05-22:27:02:022]=>autoStand bot in MessageReactionEventRegister 257 | [qq-pd-group][Normal][09/05-22:27:02:022]=>autoStand bot in MessageEventsRegister 258 | [qq-pd-group][Normal][09/05-22:27:02:771]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (200), and ({"url":"wss://api.sgroup.qq.com/websocket"}) may be converted to (UrlPack{url='wss://api.sgroup.qq.com/websocket'}) type Will be processed and filtered 259 | [qq-pd-group][Normal][09/05-22:27:02:772]=>ws url:wss://api.sgroup.qq.com/websocket 260 | [qq-pd-group][Info] [09/05-22:27:03:039]=>wss opened 261 | [qq-pd-group][Normal][09/05-22:27:03:045]=>receive {"d":{"heartbeat_interval":41250},"op":10} 262 | [qq-pd-group][Info] [09/05-22:27:03:045]=>Authentication 263 | [qq-pd-group][Normal][09/05-22:27:03:061]=>wss send: {"d":{"intents":1007162883,"shard":[0,1],"properties":{},"token":"Bot 102145937.ndTJajFSnzcUYjTKm7KwrPZd7DiD6EnZ"},"op":2} 264 | [qq-pd-group][Normal][09/05-22:27:03:111]=>receive {"op":9,"d":false} 265 | [qq-pd-group][Debug] [09/05-22:27:03:112]=>wss closed with code 4014 disallowed intents 266 | [qq-pd-group][Error] [09/05-22:27:03:112]=>无权限订阅事件 267 | -------------------------------------------------------------------------------- /logs/2024-09-06.log: -------------------------------------------------------------------------------- 1 | [qq-pd-group][Normal][09/06-12:59:46:477]=>can't load extension(s) [io.github.kloping.little_web.WebExtension, io.github.kloping.spt.SptRedis] 2 | [qq-pd-group][Info] [09/06-12:59:46:576]=>version 0.6.3-L1 sptool start success 3 | [qq-pd-group][Normal][09/06-12:59:46:577]=>autoStand contextManager in Start0 4 | [qq-pd-group][Normal][09/06-12:59:46:578]=>autoStand authV2Base in Start0 5 | [qq-pd-group][Normal][09/06-12:59:46:578]=>autoStand contextManager in WssWorker 6 | [qq-pd-group][Normal][09/06-12:59:46:578]=>autoStand botBase in WssWorker 7 | [qq-pd-group][Normal][09/06-12:59:46:578]=>autoStand logger in WssWorker 8 | [qq-pd-group][Normal][09/06-12:59:46:579]=>autoStand config in WssWorker 9 | [qq-pd-group][Normal][09/06-12:59:46:577]=>计时任务结束... 10 | [qq-pd-group][Normal][09/06-12:59:46:579]=>autoStand bot in GroupRobotEventRegister 11 | [qq-pd-group][Normal][09/06-12:59:46:579]=>autoStand logger in Bot 12 | [qq-pd-group][Normal][09/06-12:59:46:579]=>autoStand interActionBase in Bot 13 | [qq-pd-group][Normal][09/06-12:59:46:579]=>autoStand guildBase in Bot 14 | [qq-pd-group][Normal][09/06-12:59:46:579]=>autoStand userBase in Bot 15 | [qq-pd-group][Normal][09/06-12:59:46:579]=>autoStand channelBase in Bot 16 | [qq-pd-group][Normal][09/06-12:59:46:579]=>autoStand dmsBase in Bot 17 | [qq-pd-group][Normal][09/06-12:59:46:579]=>autoStand messageBase in Bot 18 | [qq-pd-group][Normal][09/06-12:59:46:579]=>autoStand memberBase in Bot 19 | [qq-pd-group][Normal][09/06-12:59:46:580]=>autoStand groupBaseV2 in Bot 20 | [qq-pd-group][Normal][09/06-12:59:46:580]=>autoStand userBaseV2 in Bot 21 | [qq-pd-group][Normal][09/06-12:59:46:580]=>autoStand authV2Base in Bot 22 | [qq-pd-group][Normal][09/06-12:59:46:580]=>autoStand config in Bot 23 | [qq-pd-group][Normal][09/06-12:59:46:580]=>autoStand logger in HttpClientConfig 24 | [qq-pd-group][Normal][09/06-12:59:46:580]=>autoStand bot in HttpClientConfig 25 | [qq-pd-group][Normal][09/06-12:59:46:580]=>autoStand config in Events 26 | [qq-pd-group][Normal][09/06-12:59:46:580]=>autoStand logger in Events 27 | [qq-pd-group][Normal][09/06-12:59:46:580]=>autoStand bot in Events 28 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand bot in ChannelEventsRegister 29 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand bot in InterActionEventRegister 30 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand logger in InterActionEventRegister 31 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand logger in AuthAndHeartbeat 32 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand contextManager in AuthAndHeartbeat 33 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand wssWorker in AuthAndHeartbeat 34 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand config in AuthAndHeartbeat 35 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand bot in AuthAndHeartbeat 36 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand bot in MemberEventRegisters 37 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand bot in FriendEventsRegister 38 | [qq-pd-group][Normal][09/06-12:59:46:581]=>autoStand bot in MessageDeleteEventRegister 39 | [qq-pd-group][Normal][09/06-12:59:46:582]=>autoStand bot in GuildEventsRegister 40 | [qq-pd-group][Normal][09/06-12:59:46:582]=>autoStand logger in GuildEventsRegister 41 | [qq-pd-group][Normal][09/06-12:59:46:582]=>autoStand bot in GroupEventsRegister 42 | [qq-pd-group][Normal][09/06-12:59:46:582]=>autoStand logger in GroupEventsRegister 43 | [qq-pd-group][Normal][09/06-12:59:46:582]=>autoStand bot in MessageReactionEventRegister 44 | [qq-pd-group][Normal][09/06-12:59:46:582]=>autoStand bot in MessageEventsRegister 45 | [qq-pd-group][Error] [09/06-12:59:47:281]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 46 | [qq-pd-group][Normal][09/06-12:59:47:399]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"f05995bdc99203dc26ef160196444659"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 47 | [qq-pd-group][Error] [09/06-12:59:47:400]=>在WebSocketClient启动时失败 48 | [qq-pd-group][Error] [09/06-12:59:57:591]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 49 | [qq-pd-group][Normal][09/06-12:59:57:591]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"6de748e6e56f4ec5930a786f1c7a2701"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 50 | [qq-pd-group][Error] [09/06-12:59:57:592]=>在WebSocketClient启动时失败 51 | [qq-pd-group][Error] [09/06-13:00:07:780]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 52 | [qq-pd-group][Normal][09/06-13:00:07:780]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"5992e4ce64584bb09748638e5d559076"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 53 | [qq-pd-group][Error] [09/06-13:00:07:781]=>在WebSocketClient启动时失败 54 | [qq-pd-group][Error] [09/06-13:00:18:084]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 55 | [qq-pd-group][Normal][09/06-13:00:18:084]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"1ce493bdcf98de5ae2db0e28925a0e47"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 56 | [qq-pd-group][Error] [09/06-13:00:18:084]=>在WebSocketClient启动时失败 57 | [qq-pd-group][Error] [09/06-13:00:28:267]=>HTTP error fetching URL. Status=401, URL=[https://api.sgroup.qq.com/gateway] 58 | [qq-pd-group][Normal][09/06-13:00:28:268]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (401), and ({"message":"接口访问源IP不在白名单","code":11298,"err_code":40023002,"trace_id":"adce1ff93fc439ec21880b61e3c5b1e9"}) may be converted to (UrlPack{url='null'}) type Will be processed and filtered 59 | [qq-pd-group][Error] [09/06-13:00:28:268]=>在WebSocketClient启动时失败 60 | [qq-pd-group][Normal][09/06-13:02:33:481]=>can't load extension(s) [io.github.kloping.little_web.WebExtension, io.github.kloping.spt.SptRedis] 61 | [qq-pd-group][Info] [09/06-13:02:33:579]=>version 0.6.3-L1 sptool start success 62 | [qq-pd-group][Normal][09/06-13:02:33:580]=>autoStand contextManager in Start0 63 | [qq-pd-group][Normal][09/06-13:02:33:580]=>计时任务结束... 64 | [qq-pd-group][Normal][09/06-13:02:33:580]=>autoStand authV2Base in Start0 65 | [qq-pd-group][Normal][09/06-13:02:33:580]=>autoStand contextManager in WssWorker 66 | [qq-pd-group][Normal][09/06-13:02:33:580]=>autoStand botBase in WssWorker 67 | [qq-pd-group][Normal][09/06-13:02:33:580]=>autoStand logger in WssWorker 68 | [qq-pd-group][Normal][09/06-13:02:33:580]=>autoStand config in WssWorker 69 | [qq-pd-group][Normal][09/06-13:02:33:580]=>autoStand bot in GroupRobotEventRegister 70 | [qq-pd-group][Normal][09/06-13:02:33:580]=>autoStand logger in Bot 71 | [qq-pd-group][Normal][09/06-13:02:33:580]=>autoStand interActionBase in Bot 72 | [qq-pd-group][Normal][09/06-13:02:33:581]=>autoStand guildBase in Bot 73 | [qq-pd-group][Normal][09/06-13:02:33:581]=>autoStand userBase in Bot 74 | [qq-pd-group][Normal][09/06-13:02:33:581]=>autoStand channelBase in Bot 75 | [qq-pd-group][Normal][09/06-13:02:33:581]=>autoStand dmsBase in Bot 76 | [qq-pd-group][Normal][09/06-13:02:33:581]=>autoStand messageBase in Bot 77 | [qq-pd-group][Normal][09/06-13:02:33:581]=>autoStand memberBase in Bot 78 | [qq-pd-group][Normal][09/06-13:02:33:581]=>autoStand groupBaseV2 in Bot 79 | [qq-pd-group][Normal][09/06-13:02:33:581]=>autoStand userBaseV2 in Bot 80 | [qq-pd-group][Normal][09/06-13:02:33:582]=>autoStand authV2Base in Bot 81 | [qq-pd-group][Normal][09/06-13:02:33:582]=>autoStand config in Bot 82 | [qq-pd-group][Normal][09/06-13:02:33:582]=>autoStand logger in HttpClientConfig 83 | [qq-pd-group][Normal][09/06-13:02:33:582]=>autoStand bot in HttpClientConfig 84 | [qq-pd-group][Normal][09/06-13:02:33:582]=>autoStand config in Events 85 | [qq-pd-group][Normal][09/06-13:02:33:582]=>autoStand logger in Events 86 | [qq-pd-group][Normal][09/06-13:02:33:582]=>autoStand bot in Events 87 | [qq-pd-group][Normal][09/06-13:02:33:582]=>autoStand bot in ChannelEventsRegister 88 | [qq-pd-group][Normal][09/06-13:02:33:582]=>autoStand bot in InterActionEventRegister 89 | [qq-pd-group][Normal][09/06-13:02:33:582]=>autoStand logger in InterActionEventRegister 90 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand logger in AuthAndHeartbeat 91 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand contextManager in AuthAndHeartbeat 92 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand wssWorker in AuthAndHeartbeat 93 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand config in AuthAndHeartbeat 94 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand bot in AuthAndHeartbeat 95 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand bot in MemberEventRegisters 96 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand bot in FriendEventsRegister 97 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand bot in MessageDeleteEventRegister 98 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand bot in GuildEventsRegister 99 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand logger in GuildEventsRegister 100 | [qq-pd-group][Normal][09/06-13:02:33:584]=>autoStand bot in GroupEventsRegister 101 | [qq-pd-group][Normal][09/06-13:02:33:585]=>autoStand logger in GroupEventsRegister 102 | [qq-pd-group][Normal][09/06-13:02:33:585]=>autoStand bot in MessageReactionEventRegister 103 | [qq-pd-group][Normal][09/06-13:02:33:585]=>autoStand bot in MessageEventsRegister 104 | [qq-pd-group][Normal][09/06-13:02:34:268]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (200), and ({"url":"wss://api.sgroup.qq.com/websocket"}) may be converted to (UrlPack{url='wss://api.sgroup.qq.com/websocket'}) type Will be processed and filtered 105 | [qq-pd-group][Normal][09/06-13:02:34:269]=>ws url:wss://api.sgroup.qq.com/websocket 106 | [qq-pd-group][Info] [09/06-13:02:34:547]=>wss opened 107 | [qq-pd-group][Normal][09/06-13:02:34:552]=>receive {"d":{"heartbeat_interval":41250},"op":10} 108 | [qq-pd-group][Info] [09/06-13:02:34:552]=>Authentication 109 | [qq-pd-group][Normal][09/06-13:02:34:569]=>wss send: {"d":{"intents":1007162883,"shard":[0,1],"properties":{},"token":"Bot 102145937.ndTJajFSnzcUYjTKm7KwrPZd7DiD6EnZ"},"op":2} 110 | [qq-pd-group][Normal][09/06-13:02:34:648]=>receive {"op":9,"d":false} 111 | [qq-pd-group][Debug] [09/06-13:02:34:648]=>wss closed with code 4014 disallowed intents 112 | [qq-pd-group][Error] [09/06-13:02:34:649]=>无权限订阅事件 113 | [qq-pd-group][Normal][09/06-13:07:58:466]=>can't load extension(s) [io.github.kloping.little_web.WebExtension, io.github.kloping.spt.SptRedis] 114 | [qq-pd-group][Info] [09/06-13:07:58:569]=>version 0.6.3-L1 sptool start success 115 | [qq-pd-group][Normal][09/06-13:07:58:570]=>autoStand contextManager in Start0 116 | [qq-pd-group][Normal][09/06-13:07:58:570]=>计时任务结束... 117 | [qq-pd-group][Normal][09/06-13:07:58:570]=>autoStand authV2Base in Start0 118 | [qq-pd-group][Normal][09/06-13:07:58:570]=>autoStand contextManager in WssWorker 119 | [qq-pd-group][Normal][09/06-13:07:58:570]=>autoStand botBase in WssWorker 120 | [qq-pd-group][Normal][09/06-13:07:58:570]=>autoStand logger in WssWorker 121 | [qq-pd-group][Normal][09/06-13:07:58:570]=>autoStand config in WssWorker 122 | [qq-pd-group][Normal][09/06-13:07:58:571]=>autoStand bot in GroupRobotEventRegister 123 | [qq-pd-group][Normal][09/06-13:07:58:571]=>autoStand logger in Bot 124 | [qq-pd-group][Normal][09/06-13:07:58:571]=>autoStand interActionBase in Bot 125 | [qq-pd-group][Normal][09/06-13:07:58:571]=>autoStand guildBase in Bot 126 | [qq-pd-group][Normal][09/06-13:07:58:571]=>autoStand userBase in Bot 127 | [qq-pd-group][Normal][09/06-13:07:58:571]=>autoStand channelBase in Bot 128 | [qq-pd-group][Normal][09/06-13:07:58:571]=>autoStand dmsBase in Bot 129 | [qq-pd-group][Normal][09/06-13:07:58:572]=>autoStand messageBase in Bot 130 | [qq-pd-group][Normal][09/06-13:07:58:572]=>autoStand memberBase in Bot 131 | [qq-pd-group][Normal][09/06-13:07:58:572]=>autoStand groupBaseV2 in Bot 132 | [qq-pd-group][Normal][09/06-13:07:58:572]=>autoStand userBaseV2 in Bot 133 | [qq-pd-group][Normal][09/06-13:07:58:572]=>autoStand authV2Base in Bot 134 | [qq-pd-group][Normal][09/06-13:07:58:572]=>autoStand config in Bot 135 | [qq-pd-group][Normal][09/06-13:07:58:572]=>autoStand logger in HttpClientConfig 136 | [qq-pd-group][Normal][09/06-13:07:58:572]=>autoStand bot in HttpClientConfig 137 | [qq-pd-group][Normal][09/06-13:07:58:572]=>autoStand config in Events 138 | [qq-pd-group][Normal][09/06-13:07:58:573]=>autoStand logger in Events 139 | [qq-pd-group][Normal][09/06-13:07:58:573]=>autoStand bot in Events 140 | [qq-pd-group][Normal][09/06-13:07:58:573]=>autoStand bot in ChannelEventsRegister 141 | [qq-pd-group][Normal][09/06-13:07:58:573]=>autoStand bot in InterActionEventRegister 142 | [qq-pd-group][Normal][09/06-13:07:58:573]=>autoStand logger in InterActionEventRegister 143 | [qq-pd-group][Normal][09/06-13:07:58:573]=>autoStand logger in AuthAndHeartbeat 144 | [qq-pd-group][Normal][09/06-13:07:58:573]=>autoStand contextManager in AuthAndHeartbeat 145 | [qq-pd-group][Normal][09/06-13:07:58:573]=>autoStand wssWorker in AuthAndHeartbeat 146 | [qq-pd-group][Normal][09/06-13:07:58:573]=>autoStand config in AuthAndHeartbeat 147 | [qq-pd-group][Normal][09/06-13:07:58:573]=>autoStand bot in AuthAndHeartbeat 148 | [qq-pd-group][Normal][09/06-13:07:58:574]=>autoStand bot in MemberEventRegisters 149 | [qq-pd-group][Normal][09/06-13:07:58:574]=>autoStand bot in FriendEventsRegister 150 | [qq-pd-group][Normal][09/06-13:07:58:574]=>autoStand bot in MessageDeleteEventRegister 151 | [qq-pd-group][Normal][09/06-13:07:58:574]=>autoStand bot in GuildEventsRegister 152 | [qq-pd-group][Normal][09/06-13:07:58:574]=>autoStand logger in GuildEventsRegister 153 | [qq-pd-group][Normal][09/06-13:07:58:574]=>autoStand bot in GroupEventsRegister 154 | [qq-pd-group][Normal][09/06-13:07:58:574]=>autoStand logger in GroupEventsRegister 155 | [qq-pd-group][Normal][09/06-13:07:58:574]=>autoStand bot in MessageReactionEventRegister 156 | [qq-pd-group][Normal][09/06-13:07:58:574]=>autoStand bot in MessageEventsRegister 157 | [qq-pd-group][Normal][09/06-13:07:59:234]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://sandbox.api.sgroup.qq.com/gateway) URL is (200), and ({"url":"wss://sandbox.api.sgroup.qq.com/websocket"}) may be converted to (UrlPack{url='wss://sandbox.api.sgroup.qq.com/websocket'}) type Will be processed and filtered 158 | [qq-pd-group][Normal][09/06-13:07:59:235]=>ws url:wss://sandbox.api.sgroup.qq.com/websocket 159 | [qq-pd-group][Info] [09/06-13:07:59:449]=>wss opened 160 | [qq-pd-group][Normal][09/06-13:07:59:455]=>receive {"d":{"heartbeat_interval":41250},"op":10} 161 | [qq-pd-group][Info] [09/06-13:07:59:455]=>Authentication 162 | [qq-pd-group][Normal][09/06-13:07:59:471]=>wss send: {"d":{"intents":1007162883,"shard":[0,1],"properties":{},"token":"Bot 102145937.ndTJajFSnzcUYjTKm7KwrPZd7DiD6EnZ"},"op":2} 163 | [qq-pd-group][Normal][09/06-13:07:59:561]=>receive {"op":9,"d":false} 164 | [qq-pd-group][Debug] [09/06-13:07:59:562]=>wss closed with code 4014 disallowed intents 165 | [qq-pd-group][Error] [09/06-13:07:59:562]=>无权限订阅事件 166 | [qq-pd-group][Normal][09/06-13:08:43:731]=>can't load extension(s) [io.github.kloping.little_web.WebExtension, io.github.kloping.spt.SptRedis] 167 | [qq-pd-group][Info] [09/06-13:08:43:829]=>version 0.6.3-L1 sptool start success 168 | [qq-pd-group][Normal][09/06-13:08:43:830]=>autoStand contextManager in Start0 169 | [qq-pd-group][Normal][09/06-13:08:43:830]=>计时任务结束... 170 | [qq-pd-group][Normal][09/06-13:08:43:831]=>autoStand authV2Base in Start0 171 | [qq-pd-group][Normal][09/06-13:08:43:831]=>autoStand contextManager in WssWorker 172 | [qq-pd-group][Normal][09/06-13:08:43:831]=>autoStand botBase in WssWorker 173 | [qq-pd-group][Normal][09/06-13:08:43:831]=>autoStand logger in WssWorker 174 | [qq-pd-group][Normal][09/06-13:08:43:831]=>autoStand config in WssWorker 175 | [qq-pd-group][Normal][09/06-13:08:43:831]=>autoStand bot in GroupRobotEventRegister 176 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand logger in Bot 177 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand interActionBase in Bot 178 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand guildBase in Bot 179 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand userBase in Bot 180 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand channelBase in Bot 181 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand dmsBase in Bot 182 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand messageBase in Bot 183 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand memberBase in Bot 184 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand groupBaseV2 in Bot 185 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand userBaseV2 in Bot 186 | [qq-pd-group][Normal][09/06-13:08:43:832]=>autoStand authV2Base in Bot 187 | [qq-pd-group][Normal][09/06-13:08:43:833]=>autoStand config in Bot 188 | [qq-pd-group][Normal][09/06-13:08:43:833]=>autoStand logger in HttpClientConfig 189 | [qq-pd-group][Normal][09/06-13:08:43:833]=>autoStand bot in HttpClientConfig 190 | [qq-pd-group][Normal][09/06-13:08:43:833]=>autoStand config in Events 191 | [qq-pd-group][Normal][09/06-13:08:43:833]=>autoStand logger in Events 192 | [qq-pd-group][Normal][09/06-13:08:43:833]=>autoStand bot in Events 193 | [qq-pd-group][Normal][09/06-13:08:43:833]=>autoStand bot in ChannelEventsRegister 194 | [qq-pd-group][Normal][09/06-13:08:43:833]=>autoStand bot in InterActionEventRegister 195 | [qq-pd-group][Normal][09/06-13:08:43:833]=>autoStand logger in InterActionEventRegister 196 | [qq-pd-group][Normal][09/06-13:08:43:833]=>autoStand logger in AuthAndHeartbeat 197 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand contextManager in AuthAndHeartbeat 198 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand wssWorker in AuthAndHeartbeat 199 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand config in AuthAndHeartbeat 200 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand bot in AuthAndHeartbeat 201 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand bot in MemberEventRegisters 202 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand bot in FriendEventsRegister 203 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand bot in MessageDeleteEventRegister 204 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand bot in GuildEventsRegister 205 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand logger in GuildEventsRegister 206 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand bot in GroupEventsRegister 207 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand logger in GroupEventsRegister 208 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand bot in MessageReactionEventRegister 209 | [qq-pd-group][Normal][09/06-13:08:43:834]=>autoStand bot in MessageEventsRegister 210 | [qq-pd-group][Normal][09/06-13:08:44:399]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://sandbox.api.sgroup.qq.com/gateway) URL is (200), and ({"url":"wss://sandbox.api.sgroup.qq.com/websocket"}) may be converted to (UrlPack{url='wss://sandbox.api.sgroup.qq.com/websocket'}) type Will be processed and filtered 211 | [qq-pd-group][Normal][09/06-13:08:44:400]=>ws url:wss://sandbox.api.sgroup.qq.com/websocket 212 | [qq-pd-group][Info] [09/06-13:08:44:622]=>wss opened 213 | [qq-pd-group][Normal][09/06-13:08:44:628]=>receive {"d":{"heartbeat_interval":41250},"op":10} 214 | [qq-pd-group][Info] [09/06-13:08:44:628]=>Authentication 215 | [qq-pd-group][Normal][09/06-13:08:44:643]=>wss send: {"d":{"intents":1007162883,"shard":[0,1],"properties":{},"token":"Bot 102145937.ndTJajFSnzcUYjTKm7KwrPZd7DiD6EnZ"},"op":2} 216 | [qq-pd-group][Normal][09/06-13:08:44:720]=>receive {"op":9,"d":false} 217 | [qq-pd-group][Debug] [09/06-13:08:44:721]=>wss closed with code 4014 disallowed intents 218 | [qq-pd-group][Error] [09/06-13:08:44:721]=>无权限订阅事件 219 | [qq-pd-group][Normal][09/06-13:10:07:626]=>can't load extension(s) [io.github.kloping.little_web.WebExtension, io.github.kloping.spt.SptRedis] 220 | [qq-pd-group][Info] [09/06-13:10:07:723]=>version 0.6.3-L1 sptool start success 221 | [qq-pd-group][Normal][09/06-13:10:07:724]=>autoStand contextManager in Start0 222 | [qq-pd-group][Normal][09/06-13:10:07:724]=>计时任务结束... 223 | [qq-pd-group][Normal][09/06-13:10:07:724]=>autoStand authV2Base in Start0 224 | [qq-pd-group][Normal][09/06-13:10:07:724]=>autoStand contextManager in WssWorker 225 | [qq-pd-group][Normal][09/06-13:10:07:724]=>autoStand botBase in WssWorker 226 | [qq-pd-group][Normal][09/06-13:10:07:724]=>autoStand logger in WssWorker 227 | [qq-pd-group][Normal][09/06-13:10:07:725]=>autoStand config in WssWorker 228 | [qq-pd-group][Normal][09/06-13:10:07:725]=>autoStand bot in GroupRobotEventRegister 229 | [qq-pd-group][Normal][09/06-13:10:07:725]=>autoStand logger in Bot 230 | [qq-pd-group][Normal][09/06-13:10:07:725]=>autoStand interActionBase in Bot 231 | [qq-pd-group][Normal][09/06-13:10:07:725]=>autoStand guildBase in Bot 232 | [qq-pd-group][Normal][09/06-13:10:07:725]=>autoStand userBase in Bot 233 | [qq-pd-group][Normal][09/06-13:10:07:725]=>autoStand channelBase in Bot 234 | [qq-pd-group][Normal][09/06-13:10:07:726]=>autoStand dmsBase in Bot 235 | [qq-pd-group][Normal][09/06-13:10:07:726]=>autoStand messageBase in Bot 236 | [qq-pd-group][Normal][09/06-13:10:07:726]=>autoStand memberBase in Bot 237 | [qq-pd-group][Normal][09/06-13:10:07:726]=>autoStand groupBaseV2 in Bot 238 | [qq-pd-group][Normal][09/06-13:10:07:726]=>autoStand userBaseV2 in Bot 239 | [qq-pd-group][Normal][09/06-13:10:07:726]=>autoStand authV2Base in Bot 240 | [qq-pd-group][Normal][09/06-13:10:07:726]=>autoStand config in Bot 241 | [qq-pd-group][Normal][09/06-13:10:07:727]=>autoStand logger in HttpClientConfig 242 | [qq-pd-group][Normal][09/06-13:10:07:727]=>autoStand bot in HttpClientConfig 243 | [qq-pd-group][Normal][09/06-13:10:07:727]=>autoStand config in Events 244 | [qq-pd-group][Normal][09/06-13:10:07:727]=>autoStand logger in Events 245 | [qq-pd-group][Normal][09/06-13:10:07:727]=>autoStand bot in Events 246 | [qq-pd-group][Normal][09/06-13:10:07:727]=>autoStand bot in ChannelEventsRegister 247 | [qq-pd-group][Normal][09/06-13:10:07:727]=>autoStand bot in InterActionEventRegister 248 | [qq-pd-group][Normal][09/06-13:10:07:727]=>autoStand logger in InterActionEventRegister 249 | [qq-pd-group][Normal][09/06-13:10:07:727]=>autoStand logger in AuthAndHeartbeat 250 | [qq-pd-group][Normal][09/06-13:10:07:728]=>autoStand contextManager in AuthAndHeartbeat 251 | [qq-pd-group][Normal][09/06-13:10:07:728]=>autoStand wssWorker in AuthAndHeartbeat 252 | [qq-pd-group][Normal][09/06-13:10:07:728]=>autoStand config in AuthAndHeartbeat 253 | [qq-pd-group][Normal][09/06-13:10:07:728]=>autoStand bot in AuthAndHeartbeat 254 | [qq-pd-group][Normal][09/06-13:10:07:728]=>autoStand bot in MemberEventRegisters 255 | [qq-pd-group][Normal][09/06-13:10:07:728]=>autoStand bot in FriendEventsRegister 256 | [qq-pd-group][Normal][09/06-13:10:07:728]=>autoStand bot in MessageDeleteEventRegister 257 | [qq-pd-group][Normal][09/06-13:10:07:728]=>autoStand bot in GuildEventsRegister 258 | [qq-pd-group][Normal][09/06-13:10:07:728]=>autoStand logger in GuildEventsRegister 259 | [qq-pd-group][Normal][09/06-13:10:07:729]=>autoStand bot in GroupEventsRegister 260 | [qq-pd-group][Normal][09/06-13:10:07:729]=>autoStand logger in GroupEventsRegister 261 | [qq-pd-group][Normal][09/06-13:10:07:729]=>autoStand bot in MessageReactionEventRegister 262 | [qq-pd-group][Normal][09/06-13:10:07:729]=>autoStand bot in MessageEventsRegister 263 | [qq-pd-group][Normal][09/06-13:10:08:478]=>Use the (GET) method through the (BotBase) interface to request the data obtained by the response code of the (https://api.sgroup.qq.com/gateway) URL is (200), and ({"url":"wss://api.sgroup.qq.com/websocket"}) may be converted to (UrlPack{url='wss://api.sgroup.qq.com/websocket'}) type Will be processed and filtered 264 | [qq-pd-group][Normal][09/06-13:10:08:479]=>ws url:wss://api.sgroup.qq.com/websocket 265 | [qq-pd-group][Info] [09/06-13:10:08:729]=>wss opened 266 | [qq-pd-group][Normal][09/06-13:10:08:735]=>receive {"d":{"heartbeat_interval":41250},"op":10} 267 | [qq-pd-group][Info] [09/06-13:10:08:735]=>Authentication 268 | [qq-pd-group][Normal][09/06-13:10:08:750]=>wss send: {"d":{"intents":1007162883,"shard":[0,1],"properties":{},"token":"Bot 102145937.ndTJajFSnzcUYjTKm7KwrPZd7DiD6EnZ"},"op":2} 269 | [qq-pd-group][Normal][09/06-13:10:08:810]=>receive {"op":9,"d":false} 270 | [qq-pd-group][Debug] [09/06-13:10:08:811]=>wss closed with code 4014 disallowed intents 271 | [qq-pd-group][Error] [09/06-13:10:08:811]=>无权限订阅事件 272 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | groupId 8 | getjuan 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 17 13 | 17 14 | UTF-8 15 | 16 | 17 | 18 | 19 | 20 | org.json 21 | json 22 | 20231013 23 | 24 | 25 | 26 | net.mamoe 27 | mirai-core 28 | 2.16.0 29 | 30 | 31 | 32 | com.fasterxml.jackson.core 33 | jackson-databind 34 | 2.15.0 35 | 36 | 37 | 38 | 39 | 40 | 41 | org.apache.maven.plugins 42 | maven-compiler-plugin 43 | 3.8.1 44 | 45 | 10 46 | 10 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/main/java/Config/ServerConfig.java: -------------------------------------------------------------------------------- 1 | package Config; 2 | 3 | public class ServerConfig { 4 | private final String host; 5 | private final int port; 6 | private final String path; 7 | 8 | public ServerConfig(String host, int port, String path) { 9 | this.host = host; 10 | this.port = port; 11 | this.path = path; 12 | } 13 | 14 | public String getHost() { 15 | return host; 16 | } 17 | 18 | public int getPort() { 19 | return port; 20 | } 21 | 22 | public String getPath() { 23 | return path; 24 | } 25 | 26 | public static ServerConfig getDefaultConfigForLogin(String apiUrl) { 27 | // Ensure you have imported or properly referenced the Config.Setting.Config.ServerConfig class 28 | String host = Setting.ServerConfig.Host(); 29 | int port = Setting.ServerConfig.Port(); 30 | String basePath = Setting.ServerConfig.Path(); 31 | String fullPath = basePath.endsWith("/") ? basePath + apiUrl : basePath + "/" + apiUrl; 32 | return new ServerConfig(host, port, fullPath); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/Config/Setting.java: -------------------------------------------------------------------------------- 1 | package Config; 2 | 3 | public class Setting { 4 | 5 | public static class Api { 6 | // 内部静态类 Login 7 | public static String Login() { return "UserLoginApiMaimaiChn"; } 8 | public static String ratting() { 9 | return "GetUserPreviewApiMaimaiChn"; 10 | } 11 | public static String juan() { 12 | return "UpsertUserChargelogApiMaimaiChn"; 13 | } 14 | public static String logout() { 15 | return "UserLogoutApiMaimaiChn"; 16 | } 17 | public static String userData() { return "GetUserDataApiMaimaiChn"; } 18 | public static String userExtend() { return "GetUserExtendApiMaimaiChn"; } 19 | public static String userOption() { return "GetUserOptionApiMaimaiChn"; } 20 | public static String userCharacterList() { return "16768656af052a9a3cd612e3a612a219"; } //旅行伙伴updata 21 | public static String userItemList() { return "e168a0bcd17a57ce9ce302b4ad9c4713";} //用户物品 22 | public static String userMapList() { return "GetUserMapApiMaimaiChn"; } 23 | } 24 | 25 | public static class Key { 26 | public static String AES(){ 27 | return "n7bx6:@Fg_:2;5E89Phy7AyIcpxEQ:R@"; 28 | } 29 | public static String IV(){ 30 | return ";;KjR1C3hgB1ovXa"; 31 | } 32 | public static String obfuscate(){return "BEs2D5vW";} 33 | } 34 | 35 | public static class ServerConfig { 36 | public static String Host() { 37 | return "maimai-gm.wahlap.com"; 38 | } 39 | 40 | public static int Port() { 41 | return 42081; 42 | } 43 | 44 | public static String Path() { 45 | return "/Maimai2Servlet/"; 46 | } 47 | 48 | public static String Version() {return "1.40"; } 49 | } 50 | public static String clientId() { 51 | return "A63E01E1191"; 52 | } 53 | 54 | public static class Others { 55 | public static int Thread() { return 5; } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/Connect/DecompressionUtils.java: -------------------------------------------------------------------------------- 1 | package Connect; 2 | 3 | import javax.crypto.Cipher; 4 | import javax.crypto.spec.IvParameterSpec; 5 | import javax.crypto.spec.SecretKeySpec; 6 | import java.io.ByteArrayOutputStream; 7 | import java.nio.charset.StandardCharsets; 8 | import java.security.InvalidAlgorithmParameterException; 9 | import java.security.InvalidKeyException; 10 | import java.security.NoSuchAlgorithmException; 11 | import java.util.zip.DataFormatException; 12 | import java.util.zip.Inflater; 13 | import Config.Setting; 14 | 15 | public class DecompressionUtils { 16 | 17 | public static byte[] decompress(byte[] compressedData) { 18 | try { 19 | Inflater inflater = new Inflater(); 20 | inflater.setInput(compressedData); 21 | ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 22 | byte[] buffer = new byte[1024]; 23 | while (!inflater.finished()) { 24 | int count = inflater.inflate(buffer); 25 | outputStream.write(buffer, 0, count); 26 | } 27 | return outputStream.toByteArray(); 28 | } catch (DataFormatException e) { 29 | return compressedData; 30 | } 31 | } 32 | 33 | public static class AESUtils { 34 | private static final byte[] AES_KEY = Setting.Key.AES().getBytes(StandardCharsets.UTF_8); 35 | private static final byte[] AES_IV = Setting.Key.IV().getBytes(StandardCharsets.UTF_8); 36 | 37 | public static byte[] aesEncrypt(byte[] plaintext) { 38 | try { 39 | Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 40 | SecretKeySpec secretKey = new SecretKeySpec(AES_KEY, "AES"); 41 | IvParameterSpec ivSpec = new IvParameterSpec(AES_IV); 42 | cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec); 43 | return cipher.doFinal(plaintext); 44 | } catch (NoSuchAlgorithmException | InvalidKeyException | InvalidAlgorithmParameterException | javax.crypto.NoSuchPaddingException | javax.crypto.IllegalBlockSizeException | javax.crypto.BadPaddingException e) { 45 | throw new RuntimeException("AES 加密失败: " + e.getMessage()); 46 | } 47 | } 48 | 49 | public static byte[] aesDecrypt(byte[] ciphertext) { 50 | try { 51 | Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 52 | SecretKeySpec secretKey = new SecretKeySpec(AES_KEY, "AES"); 53 | IvParameterSpec ivSpec = new IvParameterSpec(AES_IV); 54 | cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec); 55 | return cipher.doFinal(ciphertext); 56 | } catch (NoSuchAlgorithmException | InvalidKeyException | InvalidAlgorithmParameterException | javax.crypto.NoSuchPaddingException | javax.crypto.IllegalBlockSizeException | javax.crypto.BadPaddingException e) { 57 | throw new RuntimeException("AES 解密失败: " + e.getMessage()); 58 | } 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/Connect/Dispose.java: -------------------------------------------------------------------------------- 1 | package Connect; 2 | 3 | import java.nio.charset.StandardCharsets; 4 | import java.security.MessageDigest; 5 | import java.security.NoSuchAlgorithmException; 6 | import java.util.Map; 7 | 8 | import Config.ServerConfig; 9 | import Config.Setting; 10 | 11 | public class Dispose { 12 | public static String build(String userId, String Api_Url, String dataToEncrypt) { 13 | System.out.println(Api_Url+"+"+dataToEncrypt); 14 | byte[] plaintext = dataToEncrypt.getBytes(StandardCharsets.UTF_8); 15 | 16 | byte[] encryptedData = DecompressionUtils.AESUtils.aesEncrypt(plaintext); 17 | 18 | ServerConfig config = ServerConfig.getDefaultConfigForLogin(Api_Url); // 获取默认的服务器配置 19 | 20 | Map headers = RequestHeadersBuilder.buildHeaders(userId, encryptedData.length, config.getHost(), config.getPort(), Api_Url); 21 | try { 22 | byte[] responseData = HttpUtils.sendHttpRequest(config.getHost(), config.getPort(), config.getPath(), encryptedData, headers); 23 | byte[] decompressedData = DecompressionUtils.decompress(responseData); 24 | byte[] decryptedData = DecompressionUtils.AESUtils.aesDecrypt(decompressedData); 25 | 26 | // 转换为字符串并打印解密后的数据 27 | // System.out.println(new String(decryptedData, StandardCharsets.UTF_8)); 28 | return new String(decryptedData, StandardCharsets.UTF_8); 29 | } catch (Exception e) { 30 | System.out.println("加密或解密失败: " + e.getMessage()); 31 | return "Error: " + e.getMessage(); 32 | } 33 | } 34 | 35 | private static String md5(String input) { 36 | try { 37 | MessageDigest md = MessageDigest.getInstance("MD5"); 38 | byte[] hashBytes = md.digest(input.getBytes(StandardCharsets.UTF_8)); 39 | StringBuilder hexString = new StringBuilder(); 40 | for (byte b : hashBytes) { 41 | String hex = Integer.toHexString(0xff & b); 42 | if (hex.length() == 1) hexString.append('0'); 43 | hexString.append(hex); 44 | } 45 | return hexString.toString(); 46 | } catch (NoSuchAlgorithmException e) { 47 | throw new RuntimeException(e); 48 | } 49 | } 50 | 51 | public static String obfuscate(String param) { 52 | return md5(param + Setting.Key.obfuscate()); 53 | } 54 | // public static void main(String[] args) { 55 | // System.out.println(obfuscate("UserLoginApiMaimaiChn")); 56 | // } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/Connect/HttpUtils.java: -------------------------------------------------------------------------------- 1 | package Connect; 2 | 3 | import javax.net.ssl.HttpsURLConnection; 4 | import java.io.ByteArrayOutputStream; 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | import java.io.OutputStream; 8 | import java.net.URL; 9 | import java.nio.charset.StandardCharsets; 10 | import java.util.Map; 11 | 12 | 13 | public class HttpUtils { 14 | 15 | public static byte[] sendHttpRequest(String host, int port, String path, byte[] requestData, Map headers) throws IOException { 16 | URL url = new URL("https", host, port, path); // 使用https协议 17 | HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); // 用HttpsURLConnection代替HttpURLConnection 18 | connection.setRequestMethod("POST"); 19 | connection.setDoOutput(true); 20 | 21 | for (Map.Entry header : headers.entrySet()) { 22 | connection.setRequestProperty(header.getKey(), header.getValue()); 23 | } 24 | 25 | try (OutputStream outputStream = connection.getOutputStream()) { 26 | outputStream.write(requestData); 27 | } 28 | 29 | int responseCode = connection.getResponseCode(); 30 | if (responseCode == HttpsURLConnection.HTTP_OK) { 31 | try (InputStream inputStream = connection.getInputStream()) { 32 | ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 33 | byte[] buffer = new byte[1024]; 34 | int bytesRead; 35 | while ((bytesRead = inputStream.read(buffer)) != -1) { 36 | outputStream.write(buffer, 0, bytesRead); 37 | } 38 | return outputStream.toByteArray(); 39 | } 40 | } else { 41 | try (InputStream errorStream = connection.getErrorStream()) { 42 | ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 43 | byte[] buffer = new byte[1024]; 44 | int bytesRead; 45 | while ((bytesRead = errorStream.read(buffer)) != -1) { 46 | outputStream.write(buffer, 0, bytesRead); 47 | } 48 | throw new IOException("请求失败: " + outputStream.toString(StandardCharsets.UTF_8)); 49 | } 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/Connect/RemoveLogin.java: -------------------------------------------------------------------------------- 1 | package Connect; 2 | 3 | import java.util.concurrent.Callable; 4 | 5 | import logic.Json; 6 | 7 | public class RemoveLogin implements Callable { 8 | 9 | private final String Userid; 10 | private long datetime; 11 | 12 | public RemoveLogin(String Userid, long datetime) { 13 | this.Userid = Userid; 14 | this.datetime = datetime; 15 | } 16 | 17 | @Override 18 | public Long call() { 19 | long res = datetime; 20 | int track = 0, order = 0; 21 | 22 | while (Json.isLogin(SendReq.Ratting(Userid)).equals("1")) { 23 | SendReq.Logout(Userid, datetime); 24 | System.out.println(datetime); 25 | datetime++; 26 | 27 | if (datetime - res == 60) { 28 | res = datetime; 29 | track++; 30 | 31 | if (track == 30) { 32 | datetime -= 3600; 33 | order++; 34 | if (order == 2) { 35 | System.out.println("失败"); 36 | return 0L; 37 | } 38 | System.out.println("正推失败,尝试反推"); 39 | } 40 | } 41 | } 42 | return datetime - 1; 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/Connect/RequestBodyBuilder.java: -------------------------------------------------------------------------------- 1 | package Connect; 2 | 3 | import java.time.LocalDateTime; 4 | import java.time.format.DateTimeFormatter; 5 | import Config.Setting; 6 | import logic.BuildUserAll; 7 | 8 | public class RequestBodyBuilder { 9 | 10 | public static String login(String userId, long currentTimestamp) { 11 | return String.format("{\"userId\":%s,\"accessCode\":\"\",\"regionId\":2,\"placeId\":2067,\"clientId\":\"%s\",\"dateTime\":%d,\"isContinue\":true,\"genericFlag\":0}", userId, Setting.clientId(), currentTimestamp); 12 | } 13 | 14 | public static String ratting(String userId) { 15 | return String.format("{\"userId\":%s,\"segaIdAuthKey\":\"\"}",userId); 16 | } 17 | 18 | public static String juan(String userId, int playerRating) { 19 | LocalDateTime currentTime = LocalDateTime.now(); 20 | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0"); 21 | 22 | String purchaseDate = currentTime.format(formatter); 23 | String validDate = currentTime.plusDays(90).format(formatter); 24 | 25 | return String.format("{\"userId\":%s,\"userChargelog\":{\"chargeId\":6,\"price\":1,\"purchaseDate\":\"%s\",\"playCount\":1,\"playerRating\":%d,\"placeId\":2067,\"regionId\":2,\"clientId\":\"%s\"},\"userCharge\":{\"chargeId\":6,\"stock\":1,\"purchaseDate\":\"%s\",\"validDate\":\"%s\"}}", userId, purchaseDate, playerRating, Setting.clientId(), validDate, validDate); 26 | } 27 | public static String logout(String userId, long currentTimestamp) { 28 | return String.format("{\"userId\":%s,\"accessCode\":\"\",\"regionId\":2,\"placeId\":2067,\"clientId\":\"%s\",\"dateTime\":%d,\"type\":5}", userId, Setting.clientId() ,currentTimestamp); 29 | } 30 | public static String userData(String userId) { 31 | return String.format("{\"userId\":%s}", userId); 32 | } 33 | public static String userExtend(String userId) { return String.format("{\"userId\":%s}", userId); } 34 | public static String userOption(String userId) { return String.format("{\"userId\":%s}", userId); } 35 | public static String userMapList(String userId ,String nextIndex) { return String.format("{\"userId\":"+userId+",\"nextIndex\":"+nextIndex+",\"maxCount\":20}"); } 36 | public static String userCharacterList(String userId) { 37 | return String.format("{\"userId\":%s}", userId); 38 | } 39 | 40 | public static String UserAll(String userId, Long currentTimestamp) { 41 | return String.format("{\"userId\":" + userId + ",\"playlogId\":" + BuildUserAll.Basic(userId, currentTimestamp) + ",\"isEventMode\":false,\"isFreePlay\":false,\"upsertUserAll\":{\"userData\":" + BuildUserAll.userData(userId, currentTimestamp) + ",\"userExtend\":[" + BuildUserAll.userExtend(userId) + "],\"userOption\":[" + BuildUserAll.userOption(userId) + "],\"userCharacterList\":[],\"userGhost\":[],\"userMapList\":[]},\"userLoginBonusList\":[],\"userRatingList\":[]}}"); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/Connect/RequestHeadersBuilder.java: -------------------------------------------------------------------------------- 1 | package Connect; 2 | 3 | import Config.Setting; 4 | 5 | import java.util.LinkedHashMap; 6 | import java.util.Map; 7 | 8 | public class RequestHeadersBuilder { 9 | 10 | public static Map buildHeaders(String userId, int contentLength, String host, int port, String Api_Url) { 11 | Map headers = new LinkedHashMap<>(); 12 | headers.put("number", "0"); 13 | headers.put("Content-Type", "application/json"); 14 | headers.put("User-Agent", String.format("%s#%s", Api_Url, userId)); 15 | headers.put("charset", "UTF-8"); 16 | headers.put("Mai-Encoding", String.format("%s", Setting.ServerConfig.Version())); 17 | headers.put("Content-Length", String.valueOf(contentLength)); 18 | headers.put("Expect", "100-continue"); 19 | headers.put("Host", String.format("%s:%d", host, port)); 20 | return headers; 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/java/Connect/SendReq.java: -------------------------------------------------------------------------------- 1 | package Connect; 2 | 3 | import Config.Setting; 4 | 5 | public class SendReq { 6 | public static String Login(String Userid, Long currentTimestamp){ 7 | return Dispose.build(Userid, Dispose.obfuscate(Setting.Api.Login()), RequestBodyBuilder.login(Userid, currentTimestamp)); 8 | } 9 | public static String Ratting(String Userid){ 10 | return Dispose.build(Userid, Dispose.obfuscate(Setting.Api.ratting()), RequestBodyBuilder.ratting(Userid)); 11 | } 12 | public static String Track(String Userid,int Ratting){ 13 | return Dispose.build(Userid, Dispose.obfuscate(Setting.Api.juan()), RequestBodyBuilder.juan(Userid, Ratting)); 14 | } 15 | public static String Logout(String Userid, Long currentTimestamp){ 16 | return Dispose.build(Userid, Dispose.obfuscate(Setting.Api.logout()), RequestBodyBuilder.logout(Userid, currentTimestamp)); 17 | } 18 | public static String userData(String Userid){ 19 | return Dispose.build(Userid, Dispose.obfuscate(Setting.Api.userData()), RequestBodyBuilder.userData(Userid)); 20 | } 21 | public static String userExtend(String Userid){ 22 | return Dispose.build(Userid, Dispose.obfuscate(Setting.Api.userExtend()), RequestBodyBuilder.userExtend(Userid)); 23 | } 24 | public static String userOption(String Userid){ 25 | return Dispose.build(Userid, Dispose.obfuscate(Setting.Api.userOption()), RequestBodyBuilder.userOption(Userid)); 26 | } 27 | public static String userMapList(String Userid){ 28 | String[] userMapAll = new String[4]; 29 | userMapAll[0] = Dispose.build(Userid, Dispose.obfuscate(Setting.Api.userMapList()), RequestBodyBuilder.userMapList(Userid, "0")); 30 | userMapAll[1] = Dispose.build(Userid, Dispose.obfuscate(Setting.Api.userMapList()), RequestBodyBuilder.userMapList(Userid, "100005")); 31 | userMapAll[2] = Dispose.build(Userid, Dispose.obfuscate(Setting.Api.userMapList()), RequestBodyBuilder.userMapList(Userid, "200054")); 32 | userMapAll[3] = Dispose.build(Userid, Dispose.obfuscate(Setting.Api.userMapList()), RequestBodyBuilder.userMapList(Userid, "300058")); 33 | return userMapAll[0]+","+userMapAll[1]+","+userMapAll[2]+","+userMapAll[3]; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: Main 3 | 4 | -------------------------------------------------------------------------------- /src/main/java/Main.java: -------------------------------------------------------------------------------- 1 | import Config.Setting; 2 | import Connect.RemoveLogin; 3 | import Connect.SendReq; 4 | import logic.Json; 5 | import logic.ModifyData; 6 | import logic.UserInputUtils; 7 | 8 | import java.util.concurrent.*; 9 | 10 | public class Main { 11 | public static void main(String[] args) { 12 | 13 | long currentTimestamp = System.currentTimeMillis() / 1000; 14 | System.out.println("当前时间戳:"+currentTimestamp); 15 | String Userid = UserInputUtils.getUserInput(); // 调用UserInputUtils的getUserInput方法用户输入获取 Userid 16 | String Select = UserInputUtils.Select(); // 从用户输入获取操作选择 17 | 18 | switch (Select) { 19 | case "1": // 如果选择1 20 | String loginResult = Json.tologinIn(SendReq.Login(Userid, currentTimestamp)); 21 | System.out.println(loginResult); 22 | if (loginResult.matches("\\d+") && loginResult.length() > 10) { 23 | System.out.println("登录成功!"); 24 | if (Json.Return(SendReq.Track(Userid, Json.GetRatting(SendReq.Ratting(Userid)))).equals("1")){ 25 | System.out.println("获取成功!"); 26 | } else { 27 | System.out.println("获取失败,或者已有卷"); 28 | } 29 | if (Json.Return(SendReq.Logout(Userid,currentTimestamp)).equals("1")){ 30 | if (Json.isLogin(SendReq.Ratting(Userid)).equals("0")){ //检查是否退出登录 31 | System.out.println("退出登录"); 32 | } else { 33 | System.out.println("未成功退出登录"); 34 | } 35 | } 36 | }else if (loginResult.equals("100")){ 37 | System.out.println("警告,你已经登陆现在尝试直接获取"); 38 | if (Json.Return(SendReq.Track(Userid, Json.GetRatting(SendReq.Ratting(Userid)))).equals("1")){ 39 | System.out.println("获取成功!"); 40 | } else { 41 | System.out.println("获取失败,或者已有卷"); 42 | } 43 | } 44 | break; 45 | case "2": 46 | long datetime = UserInputUtils.TimeToTimestamp(); 47 | ExecutorService executor = Executors.newFixedThreadPool(Setting.Others.Thread()); 48 | RemoveLogin removeLogin = new RemoveLogin(Userid, datetime); 49 | Future future = executor.submit(removeLogin); 50 | try { 51 | // 获取并打印结果 52 | Long result = future.get(); 53 | System.out.println("机台DataTime: " + result); 54 | } catch (InterruptedException | ExecutionException e) { 55 | System.out.println("获取机台DataTime失败QAQ"); 56 | } finally { 57 | // 关闭 ExecutorService 58 | executor.shutdown(); 59 | } 60 | break; 61 | case "3": 62 | try { 63 | System.out.println(ModifyData.menu(Userid,currentTimestamp)); 64 | }catch (Exception e){ 65 | System.out.println("发生错误!"); 66 | SendReq.Logout(Userid, currentTimestamp); 67 | if (Json.Return(SendReq.Logout(Userid,currentTimestamp)).equals("1")){ 68 | if (Json.isLogin(SendReq.Ratting(Userid)).equals("0")){ //检查是否退出登录 69 | System.out.println("退出登录"); 70 | } else { 71 | System.out.println("未成功退出登录"); 72 | } 73 | } 74 | } 75 | break; 76 | default: 77 | System.out.println("乱输是吧?奖励你关一把小黑屋"); 78 | SendReq.Login(Userid, currentTimestamp); 79 | System.out.println(currentTimestamp); 80 | break; 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/main/java/logic/BuildUserAll.java: -------------------------------------------------------------------------------- 1 | package logic; 2 | 3 | import Connect.SendReq; 4 | 5 | public class BuildUserAll { 6 | public static String Basic(String userid, Long currentTimestamp) { 7 | String codeId = Json.tologinIn(SendReq.Login(userid, currentTimestamp)); 8 | 9 | // 检查是否是 loginId 或 returnCode 10 | if (codeId != null && codeId.matches("\\d+") && codeId.length() > 10) { 11 | System.out.println("Login successful, loginId: " + codeId); 12 | } else { 13 | // 处理 returnCode 情况 14 | if (!codeId.equals("1")) { 15 | switch (codeId) { 16 | case "null": 17 | case "100": 18 | case "102": 19 | System.out.println("登陆状态异常!可能是没有刷新二维码或者没有正确退出登录"); 20 | if (Json.Return(SendReq.Logout(userid, currentTimestamp)).equals("1")) { 21 | if (Json.isLogin(SendReq.Ratting(userid)).equals("0")) { 22 | System.out.println("退出登录"); 23 | } else { 24 | System.out.println("未成功退出登录"); 25 | } 26 | } 27 | break; 28 | case "103": 29 | System.out.println("登陆状态异常!可能是错误的 userID"); 30 | break; 31 | default: 32 | System.out.println("未知错误!" + codeId); 33 | } 34 | System.exit(0); 35 | } 36 | } 37 | return codeId; 38 | } 39 | 40 | public static String userData(String Userid,Long dateTime){ 41 | return Json.toUserData(SendReq.userData(Userid),dateTime); 42 | } 43 | 44 | public static String userExtend(String Userid){ 45 | return Json.touserExtend(SendReq.userExtend(Userid)); 46 | } 47 | 48 | public static String userOption(String Userid){ 49 | return Json.touserOption(SendReq.userOption(Userid)); 50 | } 51 | public static String userMapList(String Userid){ 52 | return Json.touserMapList(SendReq.userMapList(Userid)); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/logic/Json.java: -------------------------------------------------------------------------------- 1 | package logic; 2 | 3 | import com.fasterxml.jackson.core.JsonProcessingException; 4 | import com.fasterxml.jackson.databind.JsonNode; 5 | import com.fasterxml.jackson.databind.ObjectMapper; 6 | import com.fasterxml.jackson.databind.node.ArrayNode; 7 | import com.fasterxml.jackson.databind.node.ObjectNode; 8 | import com.fasterxml.jackson.databind.node.TextNode; 9 | import org.json.JSONObject; 10 | 11 | import java.io.IOException; 12 | import java.util.LinkedHashMap; 13 | import java.util.Map; 14 | 15 | public class Json { 16 | 17 | public static String Return(String decryptedString) { 18 | // 解析JSON数据 19 | JSONObject jsonObject = new JSONObject(decryptedString); 20 | return String.valueOf(jsonObject.getInt("returnCode")); 21 | 22 | } 23 | 24 | public static int GetRatting(String decryptedString) { 25 | // 解析JSON数据 26 | JSONObject jsonObject = new JSONObject(decryptedString); 27 | Object ratting = jsonObject.get("playerRating"); 28 | return (int) ratting; 29 | } 30 | 31 | public static String isLogin(String decryptedString) { 32 | JSONObject jsonObject = new JSONObject(decryptedString); 33 | Object isLogin = jsonObject.get("isLogin"); 34 | int returnCode; 35 | if (isLogin instanceof Boolean) { 36 | returnCode = (Boolean) isLogin ? 1 : 0; // 将 true 转换为 1,false 转换为 0 37 | } else { 38 | returnCode = jsonObject.getInt("isLogin"); // 如果不是布尔类型,直接尝试获取整数 39 | } 40 | // System.out.println(returnCode); 41 | return String.valueOf(returnCode); 42 | } 43 | 44 | private static boolean containsOnlyZeros(ArrayNode arrayNode) { 45 | for (JsonNode element : arrayNode) { 46 | if (!element.isInt() || element.intValue() != 0) { 47 | return false; 48 | } 49 | } 50 | return true; 51 | } 52 | 53 | // 辅助方法:将 null 值替换为空字符串,递归处理嵌套的对象或数组 54 | private static JsonNode replaceNullWithEmpty(JsonNode node) { 55 | if (node == null || node.isNull()) { 56 | return TextNode.valueOf(""); // 将 null 替换为 "" 57 | } 58 | if (node.isArray()) { 59 | ArrayNode arrayNode = (ArrayNode) node; 60 | 61 | // 检查是否是 [0, 0, 0, 0, 0],如果是,则替换为 [] 62 | if (arrayNode.size() == 5 && containsOnlyZeros(arrayNode)) { 63 | arrayNode.removeAll(); // 清空数组 64 | } 65 | } 66 | return node; // 如果不是 null,返回原值 67 | } 68 | 69 | public static String toUserData(String jsonString, Long dateTime) { 70 | try { 71 | 72 | ObjectMapper mapper = new ObjectMapper(); 73 | // 将 JSON 字符串转换为 Jackson 的 ObjectNode 74 | ObjectNode jsonObject = (ObjectNode) mapper.readTree(jsonString); 75 | 76 | // 创建一个新的有序 Map 来保存字段的顺序 77 | Map orderedFields = new LinkedHashMap<>(); 78 | 79 | // 按你希望的顺序定义字段 80 | if (jsonObject.has("userData")) { 81 | ObjectNode userData = (ObjectNode) jsonObject.get("userData"); 82 | 83 | // 删除不需要的字段 84 | userData.remove("friendCode"); 85 | userData.remove("nameplateId"); 86 | userData.remove("trophyId"); 87 | userData.remove("cmLastEmoneyCredit"); 88 | userData.remove("cmLastEmoneyBrand"); 89 | 90 | // 例如,先处理某些特定字段,再处理其他字段 91 | orderedFields.put("accessCode", replaceNullWithEmpty(userData.get("accessCode"))); 92 | orderedFields.put("userName", replaceNullWithEmpty(userData.get("userName"))); 93 | orderedFields.put("isNetMember", replaceNullWithEmpty(userData.get("isNetMember"))); 94 | orderedFields.put("iconId", replaceNullWithEmpty(userData.get("iconId"))); 95 | orderedFields.put("plateId", replaceNullWithEmpty(userData.get("plateId"))); 96 | orderedFields.put("titleId", replaceNullWithEmpty(userData.get("titleId"))); 97 | orderedFields.put("partnerId", replaceNullWithEmpty(userData.get("partnerId"))); 98 | orderedFields.put("frameId", replaceNullWithEmpty(userData.get("frameId"))); 99 | orderedFields.put("selectMapId", replaceNullWithEmpty(userData.get("selectMapId"))); 100 | orderedFields.put("totalAwake", replaceNullWithEmpty(userData.get("totalAwake"))); 101 | orderedFields.put("gradeRating", replaceNullWithEmpty(userData.get("gradeRating"))); 102 | orderedFields.put("musicRating", replaceNullWithEmpty(userData.get("musicRating"))); 103 | orderedFields.put("playerRating", replaceNullWithEmpty(userData.get("playerRating"))); 104 | orderedFields.put("highestRating", replaceNullWithEmpty(userData.get("highestRating"))); 105 | orderedFields.put("gradeRank", replaceNullWithEmpty(userData.get("gradeRank"))); 106 | orderedFields.put("classRank", replaceNullWithEmpty(userData.get("classRank"))); 107 | orderedFields.put("courseRank", replaceNullWithEmpty(userData.get("courseRank"))); 108 | orderedFields.put("charaSlot", replaceNullWithEmpty(userData.get("charaSlot"))); 109 | orderedFields.put("charaLockSlot", replaceNullWithEmpty(userData.get("charaLockSlot"))); 110 | orderedFields.put("contentBit", replaceNullWithEmpty(userData.get("contentBit"))); 111 | orderedFields.put("playCount", replaceNullWithEmpty(userData.get("playCount"))); 112 | orderedFields.put("currentPlayCount", replaceNullWithEmpty(userData.get("currentPlayCount"))); 113 | orderedFields.put("renameCredit", replaceNullWithEmpty(userData.get("renameCredit"))); 114 | orderedFields.put("mapStock", replaceNullWithEmpty(userData.get("mapStock"))); 115 | orderedFields.put("eventWatchedDate", replaceNullWithEmpty(userData.get("eventWatchedDate"))); 116 | orderedFields.put("lastGameId", replaceNullWithEmpty(userData.get("lastGameId"))); 117 | orderedFields.put("lastRomVersion", replaceNullWithEmpty(userData.get("lastRomVersion"))); 118 | orderedFields.put("lastDataVersion", replaceNullWithEmpty(userData.get("lastDataVersion"))); 119 | orderedFields.put("lastLoginDate", replaceNullWithEmpty(userData.get("lastLoginDate"))); 120 | orderedFields.put("lastPlayDate", replaceNullWithEmpty(userData.get("lastPlayDate"))); 121 | orderedFields.put("lastPlayCredit", replaceNullWithEmpty(userData.get("lastPlayCredit"))); 122 | orderedFields.put("lastPlayMode", replaceNullWithEmpty(userData.get("lastPlayMode"))); 123 | orderedFields.put("lastPlaceId", replaceNullWithEmpty(userData.get("lastPlaceId"))); 124 | orderedFields.put("lastPlaceName", replaceNullWithEmpty(userData.get("lastPlaceName"))); 125 | orderedFields.put("lastAllNetId", replaceNullWithEmpty(userData.get("lastAllNetId"))); 126 | orderedFields.put("lastRegionId",replaceNullWithEmpty(userData.get("lastRegionId"))); 127 | orderedFields.put("lastRegionName", replaceNullWithEmpty(userData.get("lastRegionName"))); 128 | orderedFields.put("lastClientId", replaceNullWithEmpty(userData.get("lastPlaceName"))); 129 | orderedFields.put("lastCountryCode", replaceNullWithEmpty(userData.get("lastCountryCode"))); 130 | orderedFields.put("lastSelectEMoney", replaceNullWithEmpty(userData.get("lastSelectEMoney"))); 131 | orderedFields.put("lastSelectTicket", replaceNullWithEmpty(userData.get("lastSelectTicket"))); 132 | orderedFields.put("lastSelectCourse", replaceNullWithEmpty(userData.get("lastSelectCourse"))); 133 | orderedFields.put("lastCountCourse", replaceNullWithEmpty(userData.get("lastCountCourse"))); 134 | orderedFields.put("firstGameId", replaceNullWithEmpty(userData.get("firstGameId"))); 135 | orderedFields.put("firstRomVersion", replaceNullWithEmpty(userData.get("firstRomVersion"))); 136 | orderedFields.put("firstDataVersion", replaceNullWithEmpty(userData.get("firstDataVersion"))); 137 | orderedFields.put("firstPlayDate", replaceNullWithEmpty(userData.get("firstPlayDate"))); 138 | orderedFields.put("compatibleCmVersion", replaceNullWithEmpty(userData.get("compatibleCmVersion"))); 139 | orderedFields.put("dailyBonusDate", replaceNullWithEmpty(userData.get("dailyBonusDate"))); 140 | orderedFields.put("dailyCourseBonusDate", replaceNullWithEmpty(userData.get("dailyCourseBonusDate"))); 141 | orderedFields.put("lastPairLoginDate", replaceNullWithEmpty(userData.get("lastPairLoginDate"))); 142 | orderedFields.put("lastTrialPlayDate", replaceNullWithEmpty(userData.get("lastTrialPlayDate"))); 143 | orderedFields.put("playVsCount", replaceNullWithEmpty(userData.get("playVsCount"))); 144 | orderedFields.put("playSyncCount", replaceNullWithEmpty(userData.get("playSyncCount"))); 145 | orderedFields.put("winCount", replaceNullWithEmpty(userData.get("winCount"))); 146 | orderedFields.put("helpCount", replaceNullWithEmpty(userData.get("helpCount"))); 147 | orderedFields.put("comboCount", replaceNullWithEmpty(userData.get("comboCount"))); 148 | orderedFields.put("totalDeluxscore", replaceNullWithEmpty(userData.get("totalDeluxscore"))); 149 | orderedFields.put("totalBasicDeluxscore", replaceNullWithEmpty(userData.get("totalBasicDeluxscore"))); 150 | orderedFields.put("totalAdvancedDeluxscore", replaceNullWithEmpty(userData.get("totalAdvancedDeluxscore"))); 151 | orderedFields.put("totalExpertDeluxscore", replaceNullWithEmpty(userData.get("totalExpertDeluxscore"))); 152 | orderedFields.put("totalMasterDeluxscore", replaceNullWithEmpty(userData.get("totalMasterDeluxscore"))); 153 | orderedFields.put("totalReMasterDeluxscore", replaceNullWithEmpty(userData.get("totalReMasterDeluxscore"))); 154 | orderedFields.put("totalSync", replaceNullWithEmpty(userData.get("totalSync"))); 155 | orderedFields.put("totalBasicSync", replaceNullWithEmpty(userData.get("totalBasicSync"))); 156 | orderedFields.put("totalAdvancedSync", replaceNullWithEmpty(userData.get("totalAdvancedSync"))); 157 | orderedFields.put("totalExpertSync", replaceNullWithEmpty(userData.get("totalExpertSync"))); 158 | orderedFields.put("totalMasterSync", replaceNullWithEmpty(userData.get("totalMasterSync"))); 159 | orderedFields.put("totalReMasterSync", replaceNullWithEmpty(userData.get("totalReMasterSync"))); 160 | orderedFields.put("totalAchievement", replaceNullWithEmpty(userData.get("totalAchievement"))); 161 | orderedFields.put("totalBasicAchievement", replaceNullWithEmpty(userData.get("totalBasicAchievement"))); 162 | orderedFields.put("totalAdvancedAchievement", replaceNullWithEmpty(userData.get("totalAdvancedAchievement"))); 163 | orderedFields.put("totalExpertAchievement", replaceNullWithEmpty(userData.get("totalExpertAchievement"))); 164 | orderedFields.put("totalMasterAchievement", replaceNullWithEmpty(userData.get("totalMasterAchievement"))); 165 | orderedFields.put("totalReMasterAchievement", replaceNullWithEmpty(userData.get("totalReMasterAchievement"))); 166 | orderedFields.put("playerOldRating", replaceNullWithEmpty(userData.get("playerOldRating"))); 167 | orderedFields.put("playerNewRating", replaceNullWithEmpty(userData.get("playerNewRating"))); 168 | 169 | // 处理 datetime 字段 170 | if (userData.has("dateTime")) { 171 | JsonNode dateTimeNode = userData.get("dateTime"); 172 | if (dateTimeNode.isNull() || dateTimeNode.asText().isEmpty()) { 173 | orderedFields.put("dateTime", TextNode.valueOf(String.valueOf(dateTime))); 174 | } else { 175 | orderedFields.put("dateTime", replaceNullWithEmpty(dateTimeNode)); 176 | } 177 | } else { 178 | // 如果没有 datetime 字段,添加时间戳 179 | orderedFields.put("dateTime", TextNode.valueOf(String.valueOf(dateTime))); 180 | } 181 | } 182 | 183 | // 创建一个新的 ObjectNode 按照顺序填充字段 184 | ObjectNode orderedObjectNode = mapper.createObjectNode(); 185 | orderedFields.forEach(orderedObjectNode::set); // 使用 'set' 方法来避免类型冲突 186 | 187 | // 将处理好的对象转换回 JSON 字符串 188 | System.out.println(mapper.writeValueAsString(orderedObjectNode)); 189 | return mapper.writeValueAsString(orderedObjectNode); 190 | } catch (IOException e) { 191 | e.printStackTrace(); 192 | return null; 193 | } 194 | } 195 | 196 | public static String touserExtend(String jsonString) { 197 | try { 198 | ObjectMapper mapper = new ObjectMapper(); 199 | // 将 JSON 字符串转换为 Jackson 的 ObjectNode 200 | ObjectNode jsonObject = (ObjectNode) mapper.readTree(jsonString); 201 | 202 | Map orderedFields = new LinkedHashMap<>(); 203 | 204 | if (jsonObject.has("userExtend")) { 205 | ObjectNode userData = (ObjectNode) jsonObject.get("userExtend"); 206 | orderedFields.put("selectMusicId", replaceNullWithEmpty(userData.get("selectMusicId"))); 207 | orderedFields.put("selectDifficultyId", replaceNullWithEmpty(userData.get("selectDifficultyId"))); 208 | orderedFields.put("categoryIndex", replaceNullWithEmpty(userData.get("categoryIndex"))); 209 | orderedFields.put("musicIndex", replaceNullWithEmpty(userData.get("musicIndex"))); 210 | orderedFields.put("extraFlag", replaceNullWithEmpty(userData.get(""))); 211 | orderedFields.put("selectScoreType", replaceNullWithEmpty(userData.get("selectScoreType"))); 212 | orderedFields.put("extendContentBit", replaceNullWithEmpty(userData.get("extendContentBit"))); 213 | orderedFields.put("isPhotoAgree", replaceNullWithEmpty(userData.get("isPhotoAgree"))); 214 | orderedFields.put("isGotoCodeRead", replaceNullWithEmpty(userData.get("isGotoCodeRead"))); 215 | orderedFields.put("selectResultDetails", replaceNullWithEmpty(userData.get("selectResultDetails"))); 216 | orderedFields.put("selectResultScoreViewType", replaceNullWithEmpty(userData.get("selectResultScoreViewType"))); 217 | orderedFields.put("sortCategorySetting", replaceNullWithEmpty(userData.get("sortCategorySetting"))); 218 | orderedFields.put("sortMusicSetting", replaceNullWithEmpty(userData.get("sortMusicSetting"))); 219 | orderedFields.put("playStatusSetting", replaceNullWithEmpty(userData.get("playStatusSetting"))); 220 | orderedFields.put("selectedCardList", replaceNullWithEmpty(userData.get("selectedCardList"))); 221 | orderedFields.put("encountMapNpcList", replaceNullWithEmpty(userData.get("encountMapNpcList"))); 222 | } 223 | 224 | // 创建一个新的 ObjectNode 按照顺序填充字段 225 | ObjectNode orderedObjectNode = mapper.createObjectNode(); 226 | orderedFields.forEach(orderedObjectNode::set); // 使用 'set' 方法来避免类型冲突 227 | 228 | // 将处理好的对象转换回 JSON 字符串 229 | System.out.println(mapper.writeValueAsString(orderedObjectNode)); 230 | return mapper.writeValueAsString(orderedObjectNode); 231 | 232 | } catch (JsonProcessingException e) { 233 | throw new RuntimeException(e); 234 | } 235 | } 236 | 237 | public static String touserOption(String jsonString) { 238 | try { 239 | ObjectMapper mapper = new ObjectMapper(); 240 | // 将 JSON 字符串转换为 Jackson 的 ObjectNode 241 | ObjectNode jsonObject = (ObjectNode) mapper.readTree(jsonString); 242 | 243 | // 获取 userOption 节点 244 | JsonNode userOptionNode = jsonObject.get("userOption"); 245 | 246 | // 返回 userOption 节点的字符串 247 | return userOptionNode.toString(); 248 | } catch (Exception e) { 249 | throw new RuntimeException(e); 250 | } 251 | } 252 | 253 | public static String touserMapList(String jsonString) { 254 | try { 255 | ObjectMapper mapper = new ObjectMapper(); 256 | // 将 JSON 字符串转换为 Jackson 的 ObjectNode 257 | ObjectNode jsonObject = (ObjectNode) mapper.readTree(jsonString); 258 | 259 | // 获取 userOption 节点 260 | JsonNode userOptionNode = jsonObject.get("userMapList"); 261 | 262 | // 返回 userOption 节点的字符串 263 | return userOptionNode.toString(); 264 | } catch (Exception e) { 265 | throw new RuntimeException(e); 266 | } 267 | } 268 | public static String tologinIn(String jsonString) { 269 | try { 270 | System.out.println(jsonString); 271 | // 创建 Jackson 的 ObjectMapper 实例 272 | ObjectMapper objectMapper = new ObjectMapper(); 273 | 274 | // 解析 JSON 字符串为 JsonNode 275 | JsonNode jsonNode = objectMapper.readTree(jsonString); 276 | 277 | // 检查 returnCode 是否存在 278 | if (jsonNode.has("returnCode")) { 279 | int returnCode = jsonNode.get("returnCode").asInt(); 280 | // 如果 returnCode 为 1 或 100,并且 loginId 存在,则返回 loginId 281 | if ((returnCode == 1) && jsonNode.has("loginId")) { 282 | return jsonNode.get("loginId").asText(); 283 | } else { 284 | // returnCode 不为 1 或 100 时,返回 returnCode 的值 285 | return String.valueOf(returnCode); 286 | } 287 | } 288 | } catch (Exception e) { 289 | e.printStackTrace(); 290 | } 291 | // 如果解析过程中出现异常,返回 null 292 | return null; 293 | } 294 | } 295 | -------------------------------------------------------------------------------- /src/main/java/logic/ModifyData.java: -------------------------------------------------------------------------------- 1 | package logic; 2 | 3 | import Config.Setting; 4 | import Connect.Dispose; 5 | import Connect.RequestBodyBuilder; 6 | import Connect.RequestHeadersBuilder; 7 | 8 | public class ModifyData { 9 | public static String menu(String userId, Long currentTimestamp) { 10 | return RequestBodyBuilder.UserAll(userId, currentTimestamp); 11 | } 12 | // String Select = UserInputUtils.GetUserInputForUserAll(); 13 | // switch (Select) { 14 | // case "1": 15 | // 16 | // break; 17 | // } 18 | // } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/logic/ReturnCode.java: -------------------------------------------------------------------------------- 1 | package logic; 2 | 3 | import org.json.JSONException; 4 | import org.json.JSONObject; 5 | 6 | public class ReturnCode { 7 | public static String Return(String decryptedString) { 8 | // 解析JSON数据 9 | JSONObject jsonObject = new JSONObject(decryptedString); 10 | return String.valueOf(jsonObject.getInt("returnCode")); 11 | 12 | } 13 | 14 | public static String GetRatting(String decryptedString) { 15 | // 解析JSON数据 16 | JSONObject jsonObject = new JSONObject(decryptedString); 17 | Object ratting = jsonObject.get("playerRating"); 18 | 19 | // 检查类型并进行转换 20 | if (ratting instanceof Integer) { 21 | return String.valueOf(ratting); // 如果是整数,将其转换为字符串 22 | } else if (ratting instanceof String) { 23 | return (String) ratting; // 如果已经是字符串,直接返回 24 | } else { 25 | throw new JSONException("playerRating的意外类型"); 26 | } 27 | } 28 | 29 | public static String isLogin(String decryptedString) { 30 | JSONObject jsonObject = new JSONObject(decryptedString); 31 | Object isLogin = jsonObject.get("isLogin"); 32 | int returnCode; 33 | if (isLogin instanceof Boolean) { 34 | returnCode = (Boolean) isLogin ? 1 : 0; // 将 true 转换为 1,false 转换为 0 35 | } else { 36 | returnCode = jsonObject.getInt("isLogin"); // 如果不是布尔类型,直接尝试获取整数 37 | } 38 | // System.out.println(returnCode); 39 | return String.valueOf(returnCode); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/logic/UserInputUtils.java: -------------------------------------------------------------------------------- 1 | package logic; 2 | 3 | import java.util.Scanner; 4 | import java.time.LocalDate; 5 | import java.time.LocalDateTime; 6 | import java.time.ZoneId; 7 | 8 | public class UserInputUtils { 9 | 10 | public static String getUserInput() { 11 | // System.out.println(System.currentTimeMillis()); 12 | System.out.print("请输入 userId:"); 13 | Scanner scanner = new Scanner(System.in); 14 | return scanner.nextLine().trim(); 15 | } 16 | public static String Select() { 17 | System.out.println("扣1发卷扣2解小黑屋扣3修改用户数据"); 18 | Scanner scanner = new Scanner(System.in); 19 | return scanner.nextLine().trim(); 20 | } 21 | public static long TimeToTimestamp(){ 22 | // 获取当前日期 23 | LocalDate currentDate = LocalDate.now(); 24 | Scanner scanner = new Scanner(System.in); 25 | 26 | System.out.print("是否知道机台DataTime?(1/0)"); 27 | int is = scanner.nextInt(); 28 | if(is == 1){ 29 | System.out.println("输入机台DataTime(一次只推±30分钟):"); 30 | return scanner.nextInt(); 31 | } 32 | else{ 33 | // 获取用户输入的时和分 34 | System.out.print("请输入小时(0-23): "); 35 | int hour = scanner.nextInt(); 36 | System.out.print("请输入分钟(0-59): "); 37 | int minute = scanner.nextInt(); 38 | 39 | // 将年月日和用户输入的时分合并成LocalDateTime对象 40 | LocalDateTime dateTime = currentDate.atTime(hour, minute); 41 | 42 | // 将LocalDateTime对象转换为时间戳 43 | return dateTime.atZone(ZoneId.systemDefault()).toEpochSecond(); 44 | } 45 | } 46 | public static String GetUserInputForUserAll(){ 47 | System.out.println("1.修改上次签到时间"); 48 | System.out.println("2.修改玩家Ratting"); 49 | System.out.println("3.修改玩家歌曲数据"); 50 | System.out.println("4.获得歌曲"); 51 | System.out.println("5.快速打段"); 52 | System.out.println("6.修改Best50"); 53 | System.out.print("请输入你的选择:"); 54 | Scanner scanner = new Scanner(System.in); 55 | return scanner.nextLine().trim(); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/resources/META-INF/plugin.yml: -------------------------------------------------------------------------------- 1 | id: Mai.track.Bot 2 | name: MaiBot 3 | version: 1.0 4 | author: natsunokonoha 5 | -------------------------------------------------------------------------------- /userall.txt: -------------------------------------------------------------------------------- 1 | {"userId":11764337,"playlogId":7397094407213678836,"isEventMode":false,"isFreePlay":false,"upsertUserAll":{"userData":[{"accessCode":"","userName":"DDDDDDDD","isNetMember":1,"iconId":201,"plateId":601,"titleId":150006,"partnerId":1,"frameId":1,"selectMapId":350005,"totalAwake":354,"gradeRating":0,"musicRating":13390,"playerRating":13390,"highestRating":99999,"gradeRank":0,"classRank":0,"courseRank":0,"charaSlot":[101,256001,605,604,603],"charaLockSlot":[0,256001,0,0,0],"contentBit":259116768,"playCount":87,"currentPlayCount":3,"renameCredit":0,"mapStock":0,"eventWatchedDate":"2024-07-30 00:24:14.0","lastGameId":"SDGB","lastRomVersion":"1.41.00","lastDataVersion":"1.40.02","lastLoginDate":"2024-07-30 00:24:14.0","lastPlayDate":"2024-07-30 00:27:17.0","lastPlayCredit":1,"lastPlayMode":0,"lastPlaceId":2067,"lastPlaceName":"童年搭档重庆江北店","lastAllNetId":0,"lastRegionId":2,"lastRegionName":"重庆","lastClientId":"A63E01E1216","lastCountryCode":"CHN","lastSelectEMoney":0,"lastSelectTicket":0,"lastSelectCourse":352304,"lastCountCourse":0,"firstGameId":"SDGB","firstRomVersion":"1.31.00","firstDataVersion":"1.30.06","firstPlayDate":"2023-11-03 14:14:48","compatibleCmVersion":"0.00.00","dailyBonusDate":"1970-01-01 08:00:00","dailyCourseBonusDate":"2024-06-20 00:00:00","lastPairLoginDate":"2024-07-25 17:53:02","lastTrialPlayDate":"1970-01-01 08:00:00","playVsCount":0,"playSyncCount":0,"winCount":0,"helpCount":0,"comboCount":0,"totalDeluxscore":397380,"totalBasicDeluxscore":1239,"totalAdvancedDeluxscore":4950,"totalExpertDeluxscore":85760,"totalMasterDeluxscore":260014,"totalReMasterDeluxscore":45417,"totalSync":21,"totalBasicSync":4,"totalAdvancedSync":0,"totalExpertSync":8,"totalMasterSync":8,"totalReMasterSync":1,"totalAchievement":197523026,"totalBasicAchievement":4040000,"totalAdvancedAchievement":5016337,"totalExpertAchievement":51408981,"totalMasterAchievement":118933829,"totalReMasterAchievement":18123879,"playerOldRating":11333,"playerNewRating":2057,"banState":0,"dateTime":1722273805}],"userExtend":[{"selectMusicId":803,"selectDifficultyId":4,"categoryIndex":3022,"musicIndex":31,"extraFlag":929,"selectScoreType":1,"extendContentBit":4,"isPhotoAgree":false,"isGotoCodeRead":false,"selectResultDetails":false,"selectResultScoreViewType":0,"sortCategorySetting":3,"sortMusicSetting":2,"playStatusSetting":0,"selectedCardList":[],"encountMapNpcList":[]}],"userOption":[{"optionKind":3,"noteSpeed":26,"slideSpeed":14,"touchSpeed":26,"tapDesign":1,"holdDesign":1,"slideDesign":1,"starType":1,"outlineDesign":2,"noteSize":1,"slideSize":1,"touchSize":1,"starRotate":0,"dispCenter":4,"outFrameType":1,"dispChain":2,"dispRate":0,"dispBar":0,"touchEffect":0,"submonitorAnimation":2,"submonitorAchive":0,"submonitorAppeal":1,"matching":1,"trackSkip":0,"brightness":0,"mirrorMode":0,"dispJudge":11,"dispJudgePos":5,"dispJudgeTouchPos":1,"adjustTiming":20,"judgeTiming":20,"ansVolume":6,"tapHoldVolume":5,"criticalSe":0,"tapSe":0,"breakSe":0,"breakVolume":5,"exSe":0,"exVolume":5,"slideSe":0,"slideVolume":5,"breakSlideVolume":5,"touchVolume":5,"touchHoldVolume":5,"damageSeVolume":5,"headPhoneVolume":2,"sortTab":0,"sortMusic":0}],"userCharacterList":[],"userGhost":[],"userMapList":[{"mapId":33,"distance":8610,"isLock":false,"isClear":false,"isComplete":true,"unlockFlag":1},{"mapId":34,"distance":17000,"isLock":false,"isClear":false,"isComplete":true,"unlockFlag":1},{"mapId":35,"distance":35000,"isLock":false,"isClear":false,"isComplete":true,"unlockFlag":1},{"mapId":40,"distance":14000,"isLock":false,"isClear":false,"isComplete":true,"unlockFlag":1},{"mapId":42,"distance":7800,"isLock":false,"isClear":false,"isComplete":true,"unlockFlag":1},{"mapId":100053,"distance":364000,"isLock":false,"isClear":false,"isComplete":true,"unlockFlag":1},{"mapId":100054,"distance":420000,"isLock":false,"isClear":false,"isComplete":true,"unlockFlag":1},{"mapId":100057,"distance":364000,"isLock":false,"isClear":false,"isComplete":true,"unlockFlag":1},{"mapId":100060,"distance":797000,"isLock":false,"isClear":false,"isComplete":true,"unlockFlag":1},{"mapId":350004,"distance":0,"isLock":false,"isClear":false,"isComplete":false,"unlockFlag":0},{"mapId":350005,"distance":125000,"isLock":false,"isClear":false,"isComplete":false,"unlockFlag":0},{"mapId":350006,"distance":0,"isLock":false,"isClear":false,"isComplete":false,"unlockFlag":0},{"mapId":350007,"distance":0,"isLock":false,"isClear":false,"isComplete":false,"unlockFlag":0},{"mapId":400001,"distance":0,"isLock":false,"isClear":false,"isComplete":false,"unlockFlag":0},{"mapId":400005,"distance":0,"isLock":false,"isClear":false,"isComplete":false,"unlockFlag":0}],"userLoginBonusList":[{"bonusId":601,"point":5,"isCurrent":true,"isComplete":false}],"userRatingList":[{"rating":0,"ratingList":[{"musicId":834,"level":4,"romVersion":19998,"achievement":1010000},{"musicId":834,"level":3,"romVersion":19998,"achievement":1010000},{"musicId":799,"level":4,"romVersion":19992,"achievement":1010000},{"musicId":833,"level":4,"romVersion":19997,"achievement":1010000},{"musicId":227,"level":4,"romVersion":12005,"achievement":1010000},{"musicId":812,"level":4,"romVersion":19994,"achievement":1010000},{"musicId":799,"level":3,"romVersion":19992,"achievement":1010000},{"musicId":833,"level":3,"romVersion":19997,"achievement":1010000},{"musicId":11235,"level":3,"romVersion":22002,"achievement":1010000},{"musicId":844,"level":3,"romVersion":19912,"achievement":1010000},{"musicId":11222,"level":3,"romVersion":21007,"achievement":1010000},{"musicId":11307,"level":3,"romVersion":22006,"achievement":1009500},{"musicId":11374,"level":3,"romVersion":22005,"achievement":1008925},{"musicId":531,"level":3,"romVersion":17018,"achievement":1010000},{"musicId":852,"level":3,"romVersion":19900,"achievement":1010000},{"musicId":581,"level":3,"romVersion":18018,"achievement":1010000},{"musicId":494,"level":3,"romVersion":17015,"achievement":1010000},{"musicId":11426,"level":3,"romVersion":23001,"achievement":1010000},{"musicId":239,"level":3,"romVersion":12005,"achievement":1010000},{"musicId":796,"level":3,"romVersion":19900,"achievement":1010000},{"musicId":379,"level":3,"romVersion":14010,"achievement":1010000},{"musicId":389,"level":4,"romVersion":14002,"achievement":1010000},{"musicId":261,"level":4,"romVersion":12003,"achievement":1010000},{"musicId":227,"level":3,"romVersion":12005,"achievement":1010000},{"musicId":688,"level":3,"romVersion":19006,"achievement":1010000},{"musicId":11209,"level":3,"romVersion":21007,"achievement":1010000},{"musicId":556,"level":3,"romVersion":18001,"achievement":1010000},{"musicId":191,"level":3,"romVersion":12000,"achievement":1010000},{"musicId":381,"level":3,"romVersion":14000,"achievement":1010000},{"musicId":11575,"level":3,"romVersion":23001,"achievement":1009322},{"musicId":387,"level":3,"romVersion":14004,"achievement":1000123},{"musicId":495,"level":3,"romVersion":17011,"achievement":1010000},{"musicId":11283,"level":3,"romVersion":22000,"achievement":1010000},{"musicId":682,"level":3,"romVersion":19004,"achievement":1010000},{"musicId":238,"level":3,"romVersion":12000,"achievement":1010000}],"newRatingList":[{"musicId":11560,"level":3,"romVersion":24000,"achievement":1008840},{"musicId":11555,"level":3,"romVersion":24000,"achievement":1003126},{"musicId":11558,"level":4,"romVersion":24000,"achievement":990478},{"musicId":11528,"level":2,"romVersion":24000,"achievement":1004679},{"musicId":11561,"level":3,"romVersion":24000,"achievement":1010000},{"musicId":11556,"level":2,"romVersion":24000,"achievement":1010000},{"musicId":11529,"level":3,"romVersion":24000,"achievement":968838},{"musicId":10315,"level":2,"romVersion":24000,"achievement":1010000}],"nextRatingList":[{"musicId":736,"level":3,"romVersion":19500,"achievement":1000123},{"musicId":101,"level":3,"romVersion":11000,"achievement":1000123},{"musicId":558,"level":3,"romVersion":18000,"achievement":1000031},{"musicId":548,"level":3,"romVersion":18008,"achievement":994247},{"musicId":227,"level":2,"romVersion":12005,"achievement":1002325},{"musicId":11311,"level":2,"romVersion":22007,"achievement":1004436},{"musicId":812,"level":2,"romVersion":19994,"achievement":1002251},{"musicId":11568,"level":3,"romVersion":23000,"achievement":992767},{"musicId":11433,"level":3,"romVersion":23002,"achievement":994667},{"musicId":833,"level":2,"romVersion":19997,"achievement":992323}],"nextNewRatingList":[],"udemae":{"rate":0,"maxRate":0,"classValue":0,"maxClassValue":0,"totalWinNum":107,"totalLoseNum":1,"maxWinNum":102,"maxLoseNum":1,"winNum":102,"loseNum":0,"npcTotalWinNum":0,"npcTotalLoseNum":0,"npcMaxWinNum":0,"npcMaxLoseNum":0,"npcWinNum":0,"npcLoseNum":0}}],"userItemList":[],"userMusicDetailList":[{"musicId":803,"level":4,"playCount":1,"achievement":0,"comboStatus":0,"syncStatus":0,"deluxscoreMax":0,"scoreRank":0,"extNum1":0}],"userCourseList":[],"userFriendSeasonRankingList":[{"seasonId":2015,"point":10,"rank":0,"rewardGet":false,"userName":"DDDDDDDD","recordDate":"2024-07-30 00:27:02.0"}],"userChargeList":[{"chargeId":2,"stock":0,"purchaseDate":"2024-06-29 22:28:25","validDate":"2024-09-27 04:00:00"},{"chargeId":3,"stock":0,"purchaseDate":"2024-07-03 01:30:55","validDate":"2024-10-01 01:30:55"},{"chargeId":6,"stock":0,"purchaseDate":"2024-06-24 22:44:31","validDate":"2024-09-22 04:00:00"}],"userFavoriteList":[],"userActivityList":[{"playList":[{"kind":1,"id":25,"sortNumber":1720600218,"param1":833,"param2":3,"param3":148,"param4":0},{"kind":1,"id":10,"sortNumber":1720684100,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":1,"id":33,"sortNumber":1720684177,"param1":833,"param2":3,"param3":148,"param4":0},{"kind":1,"id":25,"sortNumber":1720684177,"param1":833,"param2":3,"param3":148,"param4":0},{"kind":1,"id":10,"sortNumber":1721549515,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":1,"id":33,"sortNumber":1721029246,"param1":834,"param2":3,"param3":149,"param4":0},{"kind":1,"id":25,"sortNumber":1721029246,"param1":834,"param2":3,"param3":149,"param4":0},{"kind":1,"id":10,"sortNumber":1721727848,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":1,"id":90,"sortNumber":1721802225,"param1":350003,"param2":0,"param3":0,"param4":0},{"kind":1,"id":44,"sortNumber":1721802455,"param1":11404,"param2":3,"param3":138,"param4":0},{"kind":1,"id":24,"sortNumber":1721802881,"param1":11311,"param2":2,"param3":130,"param4":0},{"kind":1,"id":20,"sortNumber":1721901889,"param1":11207,"param2":3,"param3":139,"param4":0},{"kind":1,"id":44,"sortNumber":1721902107,"param1":11529,"param2":3,"param3":141,"param4":0},{"kind":1,"id":10,"sortNumber":1722270262,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":1,"id":90,"sortNumber":1722270276,"param1":400005,"param2":0,"param3":0,"param4":0}],"musicList":[{"kind":2,"id":562,"sortNumber":1721737582,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":2,"id":11404,"sortNumber":1721802455,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":2,"id":548,"sortNumber":1721802684,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":2,"id":11311,"sortNumber":1721802881,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":2,"id":833,"sortNumber":1721803091,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":2,"id":11025,"sortNumber":1721901468,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":2,"id":496,"sortNumber":1721901669,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":2,"id":11207,"sortNumber":1721901889,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":2,"id":11529,"sortNumber":1721902107,"param1":0,"param2":0,"param3":0,"param4":0},{"kind":2,"id":803,"sortNumber":1722270407,"param1":0,"param2":0,"param3":0,"param4":0}]}],"userGamePlaylogList":[{"playlogId":7397094407213678836,"version":"1.41.00","playDate":"2024-07-30 00:27:17.0","playMode":0,"useTicketId":-1,"playCredit":1,"playTrack":1,"clientId":"A63E01E1216","isPlayTutorial":false,"isEventMode":false,"isNewFree":false,"playCount":90,"playSpecial":1334722030,"playOtherUserId":0}],"user2pPlaylog":{"userId1":0,"userId2":0,"userName1":"","userName2":"","regionId":0,"placeId":0,"user2pPlaylogDetailList":[]},"isNewCharacterList":"","isNewMapList":"000000000101111","isNewLoginBonusList":"0","isNewItemList":"","isNewMusicDetailList":"1","isNewCourseList":"","isNewFavoriteList":"","isNewFriendSeasonRankingList":"1"}} 2 | --------------------------------------------------------------------------------