gitextract_8c_sgdaa/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug.yml │ │ ├── config.yml │ │ └── feature.md │ └── workflows/ │ ├── build.yml │ ├── check-publishing.yml │ ├── doc.yml │ └── release.yml ├── .gitignore ├── .run/ │ ├── Check Binary Compatibility.run.xml │ ├── Compile everything.run.xml │ ├── Compile mirai-console.run.xml │ ├── Compile mirai-core for JVM.run.xml │ ├── Dump API Changes for mirai-console-frontend-base.run.xml │ ├── Dump API Changes for mirai-console.run.xml │ ├── Dump API Changes for mirai-core-api.run.xml │ ├── Publish deps test artifacts.run.xml │ ├── Publish local artifacts.run.xml │ ├── Run IDE.run.xml │ ├── Run core tests.run.xml │ ├── RunMessageDecodingRecorderKt.run.xml │ ├── RunRecorderKt.run.xml │ ├── Test everything.run.xml │ ├── Test mirai-console.run.xml │ └── Test mirai-core for JVM.run.xml ├── CONTRIBUTING.md ├── LICENSE ├── README-eng.md ├── README.md ├── build.gradle.kts ├── buildSrc/ │ ├── build.gradle.kts │ ├── settings.gradle.kts │ └── src/ │ └── main/ │ ├── kotlin/ │ │ ├── Android.kt │ │ ├── BinaryCompatibilityConfigurator.kt │ │ ├── DependencyDumper.kt │ │ ├── HmppConfigure.kt │ │ ├── JvmDependencies.kt │ │ ├── JvmPublishing.kt │ │ ├── KotlinMetadataPatcher.kt │ │ ├── LocalProperties.kt │ │ ├── Mpp.kt │ │ ├── MppPublishing.kt │ │ ├── ProjectConfigure.kt │ │ ├── PublishingHelpers.kt │ │ ├── Stdlib.kt │ │ ├── TestDependencies.kt │ │ ├── UpdateSnapshotPage.kt │ │ ├── Versions.kt │ │ ├── analyzes/ │ │ │ ├── AndroidApiLevelCheck.kt │ │ │ ├── AsmUtil.kt │ │ │ ├── CompiledCodeVerify.kt │ │ │ └── NoSuchMethodAnalyzer.kt │ │ ├── explicit-api.gradle.kts │ │ ├── keys/ │ │ │ └── SecretKeys.kt │ │ ├── shadow/ │ │ │ ├── Relocation.kt │ │ │ ├── RelocationConfig.kt │ │ │ └── Shadow.kt │ │ └── utils.kt │ └── resources/ │ ├── androidutil/ │ │ └── api-versions.xml │ ├── binary-compatibility-validator-build.txt │ └── binary-compatibility-validator-ignore.txt ├── ci-release-helper/ │ ├── .gitignore │ ├── build.gradle.kts │ ├── changelogs/ │ │ ├── 2.10.1.md │ │ ├── 2.10.2.md │ │ ├── 2.11.0-M1.md │ │ ├── 2.11.0-RC.md │ │ ├── 2.11.0.md │ │ ├── 2.12.0-RC.md │ │ ├── 2.12.0.md │ │ ├── 2.12.1.md │ │ ├── 2.12.2.md │ │ ├── 2.12.3.md │ │ ├── 2.13.0-M1.md │ │ ├── 2.13.0-RC.md │ │ ├── 2.13.0-RC2.md │ │ ├── 2.13.0.md │ │ ├── 2.13.1.md │ │ ├── 2.13.2.md │ │ ├── 2.13.3.md │ │ ├── 2.13.4.md │ │ ├── 2.14.0-RC.md │ │ ├── 2.14.0.md │ │ ├── 2.15.0-M1.md │ │ └── README.md │ ├── scripts/ │ │ └── kill-java.js │ └── src/ │ ├── CiHelper.kt │ ├── buildIndex/ │ │ ├── Index.kt │ │ └── SnapshotVersions.kt │ └── package.kt ├── docs/ │ ├── .conf/ │ │ └── nav.js │ ├── Bots.md │ ├── ConciseAPI.md │ ├── ConfiguringMultiplatformProjects.md │ ├── ConfiguringProjects.md │ ├── ConsoleTerminal.md │ ├── Contacts.md │ ├── CoreAPI.md │ ├── DebuggingNetwork.md │ ├── EventList.md │ ├── Events.md │ ├── Evolution.md │ ├── KotlinAndJava.md │ ├── Messages.md │ ├── MigrationFrom1x.md │ ├── Preparations.md │ ├── Questions.md │ ├── README.md │ ├── UserManual.md │ ├── UsingSnapshots.md │ ├── contributing/ │ │ ├── ImplementingProtocol.md │ │ ├── README.md │ │ ├── SimpleInstructions.md │ │ ├── VerifyingABI.md │ │ ├── building/ │ │ │ ├── BuildingCoreAndroid.md │ │ │ └── README.md │ │ └── mock/ │ │ └── SpaceAllocation.md │ ├── files/ │ │ └── install-20210412.cmd │ ├── mirai-ecology.md │ ├── mocking/ │ │ └── Mocking.md │ └── src/ │ ├── Contacts.mermaid.md │ └── Messages.mermaid.md ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── install.sh ├── logging/ │ ├── README.md │ ├── mirai-logging-log4j2/ │ │ ├── build.gradle.kts │ │ ├── resources/ │ │ │ └── META-INF/ │ │ │ └── services/ │ │ │ └── net.mamoe.mirai.utils.MiraiLogger$Factory │ │ ├── src/ │ │ │ └── MiraiLog4JFactory.kt │ │ └── test/ │ │ └── MiraiLog4JAdapterTest.kt │ ├── mirai-logging-slf4j/ │ │ ├── build.gradle.kts │ │ └── test/ │ │ └── MiraiSlf4JAdapterTest.kt │ ├── mirai-logging-slf4j-logback/ │ │ ├── build.gradle.kts │ │ └── test/ │ │ └── MiraiSlf4JLogbackAdapterTest.kt │ └── mirai-logging-slf4j-simple/ │ ├── build.gradle.kts │ └── test/ │ └── MiraiSlf4JSimpleAdapterTest.kt ├── mirai-bom/ │ └── build.gradle.kts ├── mirai-console/ │ ├── .gitignore │ ├── .gitmodules │ ├── README.md │ ├── backend/ │ │ ├── codegen/ │ │ │ ├── README.md │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ ├── Codegen.kt │ │ │ ├── MessageScopeCodegen.kt │ │ │ ├── ValuePluginDataCodegen.kt │ │ │ ├── old/ │ │ │ │ ├── JSettingCodegen.kt │ │ │ │ ├── SettingValueUseSiteCodegen.kt │ │ │ │ ├── ValueImplCodegen.kt │ │ │ │ └── ValuesCodegen.kt │ │ │ └── util.kt │ │ ├── integration-test/ │ │ │ ├── README.md │ │ │ ├── build.gradle.kts │ │ │ ├── src/ │ │ │ │ ├── AbstractTestPoint.kt │ │ │ │ ├── AbstractTestPointAsPlugin.kt │ │ │ │ ├── IntegrationTestBootstrap.kt │ │ │ │ ├── MiraiConsoleIntegrationTestLauncher.kt │ │ │ │ └── utils.kt │ │ │ ├── test/ │ │ │ │ ├── MiraiConsoleIntegrationTestBootstrap.kt │ │ │ │ └── testpoints/ │ │ │ │ ├── DoNothingPoint.kt │ │ │ │ ├── MCITBSelfAssertions.kt │ │ │ │ ├── PluginSharedLibraries.kt │ │ │ │ └── plugin/ │ │ │ │ ├── PluginDataRenameToIdTest.kt │ │ │ │ ├── PluginDependOnErrorPlugin.kt │ │ │ │ ├── PluginOnDisableCalledOnlyOnceTest.kt │ │ │ │ └── PluginWithExceptionTest.kt │ │ │ └── testers/ │ │ │ ├── .gitignore │ │ │ ├── MCITSelfTestPlugin/ │ │ │ │ ├── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ └── services/ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ └── src/ │ │ │ │ └── MCITSelfTestPlugin.kt │ │ │ ├── README.md │ │ │ ├── mirai-plugin-compatibility/ │ │ │ │ ├── .module-group.txt │ │ │ │ ├── mirai-jar-after-2_11/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ │ └── src/ │ │ │ │ │ └── After211.kt │ │ │ │ ├── mirai-jar-after-2_11-without-new/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ │ └── src/ │ │ │ │ │ └── After211NoNew.kt │ │ │ │ ├── mirai-jar-before-2_11/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ │ └── src/ │ │ │ │ │ └── Before211.kt │ │ │ │ ├── same-pkg-1/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ │ └── src/ │ │ │ │ │ └── P.kt │ │ │ │ └── same-pkg-2/ │ │ │ │ ├── .nested-module.txt │ │ │ │ ├── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ └── services/ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ └── src/ │ │ │ │ └── P.kt │ │ │ ├── never-override-jdk-modules/ │ │ │ │ ├── module-jdk-module/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── mvn.txt │ │ │ │ │ └── src/ │ │ │ │ │ └── javax/ │ │ │ │ │ └── xml/ │ │ │ │ │ └── parsers/ │ │ │ │ │ └── SAXParser.kt │ │ │ │ ├── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ └── services/ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ └── src/ │ │ │ │ └── NeverOverrideJdkModules.kt │ │ │ ├── options-properties/ │ │ │ │ ├── independent-plugin/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ │ └── src/ │ │ │ │ │ └── Independent.kt │ │ │ │ ├── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ ├── mirai-console-plugin/ │ │ │ │ │ │ └── options.properties │ │ │ │ │ └── services/ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ └── src/ │ │ │ │ └── OptionsProperties.kt │ │ │ ├── plugin-can-depends-on-mirai-console/ │ │ │ │ ├── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ └── services/ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ └── src/ │ │ │ │ └── PluginCanDependsOnMiraiConsole.kt │ │ │ ├── plugin-dep-dependon-dep-issue-2054/ │ │ │ │ ├── module-moda/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── mvn.txt │ │ │ │ │ └── src/ │ │ │ │ │ └── ModuleA.kt │ │ │ │ ├── module-modb/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── mvn.txt │ │ │ │ │ └── src/ │ │ │ │ │ └── ModuleB.kt │ │ │ │ ├── module-private-issue2108/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── mvn.txt │ │ │ │ │ └── src/ │ │ │ │ │ └── PrivateModule.kt │ │ │ │ ├── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ └── services/ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ ├── second-plugin/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ │ └── src/ │ │ │ │ │ └── PDepDependOnDepSec.kt │ │ │ │ └── src/ │ │ │ │ └── PDepDependOnDep.kt │ │ │ ├── plugin-depend-on-other/ │ │ │ │ ├── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ └── services/ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ └── src/ │ │ │ │ ├── PluginDependOnOther.kt │ │ │ │ └── issue1920/ │ │ │ │ ├── OtherClass1.kt │ │ │ │ └── OtherClass2.kt │ │ │ ├── plugin-dynamic-dependencies-download/ │ │ │ │ ├── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ ├── mirai-console-plugin/ │ │ │ │ │ │ ├── dependencies-private.txt │ │ │ │ │ │ └── dependencies-shared.txt │ │ │ │ │ └── services/ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ └── src/ │ │ │ │ └── P.kt │ │ │ ├── plugin-resolve-self-dependencies-over-console-ones/ │ │ │ │ ├── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ ├── mirai-console-plugin/ │ │ │ │ │ │ └── dependencies-private.txt │ │ │ │ │ └── services/ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ └── src/ │ │ │ │ └── PluginResolveSelfDependenciesOverConsoleOnes.kt │ │ │ ├── plugin-use-console-deps-fallback/ │ │ │ │ ├── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ └── services/ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ └── src/ │ │ │ │ └── PluginUseConsoleDepsFallback.kt │ │ │ ├── plugin-with-pluginyml/ │ │ │ │ ├── resources/ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ │ └── plugin.yml │ │ │ │ └── src/ │ │ │ │ └── PluginWithPluginYml.kt │ │ │ ├── plugin-with-pluginyml-can-use-libraries-while-clinit/ │ │ │ │ ├── clinit-library/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── mvn.txt │ │ │ │ │ └── src/ │ │ │ │ │ └── PluginLibrary.kt │ │ │ │ ├── resources/ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ ├── mirai-console-plugin/ │ │ │ │ │ │ │ └── dependencies-private.txt │ │ │ │ │ │ └── services/ │ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ │ └── plugin.yml │ │ │ │ └── src/ │ │ │ │ └── PluginWithPluginYmlClinitTest.kt │ │ │ ├── service-loader/ │ │ │ │ ├── module-service-loader-impl/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ │ └── net.mamoe.console.integrationtest.mod.servicetypedef.ServiceTypedef │ │ │ │ │ │ └── test-res.txt │ │ │ │ │ └── src/ │ │ │ │ │ └── ServiceImpl.kt │ │ │ │ ├── module-service-loader-typedef/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ └── test-res.txt │ │ │ │ │ └── src/ │ │ │ │ │ └── ServiceTypedef.kt │ │ │ │ ├── resources/ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ │ └── test-res.txt │ │ │ │ ├── service-loader-2dep-plugin/ │ │ │ │ │ ├── .nested-module.txt │ │ │ │ │ ├── resources/ │ │ │ │ │ │ ├── META-INF/ │ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ │ ├── net.mamoe.console.integrationtest.mod.servicetypedef.ServiceTypedef │ │ │ │ │ │ │ └── net.mamoe.mirai.console.plugin.jvm.JvmPlugin │ │ │ │ │ │ └── test-res.txt │ │ │ │ │ └── src/ │ │ │ │ │ └── PMain.kt │ │ │ │ └── src/ │ │ │ │ └── PMain.kt │ │ │ └── tester.template.gradle.kts │ │ └── mirai-console/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── compatibility-validation/ │ │ │ └── jvm/ │ │ │ └── api/ │ │ │ └── jvm.api │ │ ├── resources/ │ │ │ └── net/ │ │ │ └── mamoe/ │ │ │ └── mirai/ │ │ │ └── console/ │ │ │ └── internal/ │ │ │ └── enduserreadme/ │ │ │ └── readme.txt │ │ ├── src/ │ │ │ ├── MiraiConsole.kt │ │ │ ├── MiraiConsoleFrontEndDescription.kt │ │ │ ├── MiraiConsoleImplementation.kt │ │ │ ├── command/ │ │ │ │ ├── AbstractCommand.kt │ │ │ │ ├── BuiltInCommands.kt │ │ │ │ ├── Command.kt │ │ │ │ ├── CommandContext.kt │ │ │ │ ├── CommandExecuteResult.kt │ │ │ │ ├── CommandExecutionException.kt │ │ │ │ ├── CommandManager.kt │ │ │ │ ├── CommandOwner.kt │ │ │ │ ├── CommandPermissionDeniedException.kt │ │ │ │ ├── CommandSender.kt │ │ │ │ ├── CompositeCommand.kt │ │ │ │ ├── IllegalCommandArgumentException.kt │ │ │ │ ├── RawCommand.kt │ │ │ │ ├── SimpleCommand.kt │ │ │ │ ├── descriptor/ │ │ │ │ │ ├── CommandArgumentContext.kt │ │ │ │ │ ├── CommandArgumentParserBuiltins.kt │ │ │ │ │ ├── CommandParameter.kt │ │ │ │ │ ├── CommandSignature.kt │ │ │ │ │ ├── CommandValueArgumentParser.kt │ │ │ │ │ ├── Exceptions.kt │ │ │ │ │ ├── ExperimentalCommandDescriptors.kt │ │ │ │ │ └── TypeVariant.kt │ │ │ │ ├── java/ │ │ │ │ │ ├── JCompositeCommand.kt │ │ │ │ │ ├── JRawCommand.kt │ │ │ │ │ └── JSimpleCommand.kt │ │ │ │ ├── parse/ │ │ │ │ │ ├── CommandCall.kt │ │ │ │ │ ├── CommandCallParser.kt │ │ │ │ │ ├── CommandValueArgument.kt │ │ │ │ │ └── SpaceSeparatedCommandCallParser.kt │ │ │ │ └── resolve/ │ │ │ │ ├── BuiltInCommandCallResolver.kt │ │ │ │ ├── CommandCallInterceptor.kt │ │ │ │ ├── CommandCallResolver.kt │ │ │ │ └── ResolvedCommandCall.kt │ │ │ ├── data/ │ │ │ │ ├── AbstractPluginData.kt │ │ │ │ ├── AutoSavePluginConfig.kt │ │ │ │ ├── AutoSavePluginData.kt │ │ │ │ ├── AutoSavePluginDataHolder.kt │ │ │ │ ├── PluginConfig.kt │ │ │ │ ├── PluginData.kt │ │ │ │ ├── PluginDataExtensions.kt │ │ │ │ ├── PluginDataHolder.kt │ │ │ │ ├── PluginDataStorage.kt │ │ │ │ ├── ReadOnlyPluginConfig.kt │ │ │ │ ├── ReadOnlyPluginData.kt │ │ │ │ ├── Value.kt │ │ │ │ ├── ValueDescription.kt │ │ │ │ ├── ValueName.kt │ │ │ │ └── java/ │ │ │ │ ├── JAutoSavePluginConfig.kt │ │ │ │ ├── JAutoSavePluginData.kt │ │ │ │ ├── JavaAutoSavePluginConfig.kt │ │ │ │ └── JavaAutoSavePluginData.kt │ │ │ ├── enduserreadme/ │ │ │ │ └── EndUserReadme.kt │ │ │ ├── events/ │ │ │ │ ├── AutoLoginEvent.kt │ │ │ │ ├── CommandExecutionEvent.kt │ │ │ │ ├── ConsoleEvent.kt │ │ │ │ ├── EndUserReadmeInitializeEvent.kt │ │ │ │ └── StartupEvent.kt │ │ │ ├── extension/ │ │ │ │ ├── ComponentStorage.kt │ │ │ │ ├── Extension.kt │ │ │ │ ├── ExtensionException.kt │ │ │ │ ├── ExtensionPoint.kt │ │ │ │ ├── ExtensionRegistry.kt │ │ │ │ └── PluginComponentStorage.kt │ │ │ ├── extensions/ │ │ │ │ ├── BotConfigurationAlterer.kt │ │ │ │ ├── CommandCallInterceptorProvider.kt │ │ │ │ ├── CommandCallParserProvider.kt │ │ │ │ ├── CommandCallResolverProvider.kt │ │ │ │ ├── PermissionServiceProvider.kt │ │ │ │ ├── PluginLoaderProvider.kt │ │ │ │ ├── PostStartupExtension.kt │ │ │ │ └── SingletonExtensionSelector.kt │ │ │ ├── fontend/ │ │ │ │ ├── DefaultLoggingProcessProgress.kt │ │ │ │ └── ProcessProgress.kt │ │ │ ├── internal/ │ │ │ │ ├── MiraiConsoleBuildConstants.kt.template │ │ │ │ ├── MiraiConsoleImplementationBridge.kt │ │ │ │ ├── auth/ │ │ │ │ │ ├── ConsoleBotAuthorization.kt │ │ │ │ │ └── ConsoleSecretsCalculator.kt │ │ │ │ ├── command/ │ │ │ │ │ ├── CommandManagerImpl.kt │ │ │ │ │ ├── CommandReflector.kt │ │ │ │ │ ├── CommnadConfig.kt │ │ │ │ │ ├── builtin/ │ │ │ │ │ │ └── LoginCommandImpl.kt │ │ │ │ │ └── internal.kt │ │ │ │ ├── data/ │ │ │ │ │ ├── CompositeValueImpl.kt │ │ │ │ │ ├── MemoryPluginDataStorageImpl.kt │ │ │ │ │ ├── MultiFilePluginDataStorageImpl.kt │ │ │ │ │ ├── PluginDataImpl.kt │ │ │ │ │ ├── _PluginData.value.kt │ │ │ │ │ ├── _PrimitiveValueDeclarations.kt │ │ │ │ │ ├── builtins/ │ │ │ │ │ │ ├── AutoLoginConfig.kt │ │ │ │ │ │ ├── ConsoleDataScopeImpl.kt │ │ │ │ │ │ ├── EndUserReadmeData.kt │ │ │ │ │ │ ├── LoggerConfig.kt │ │ │ │ │ │ └── PluginDependenciesConfig.kt │ │ │ │ │ ├── collectionUtil.kt │ │ │ │ │ ├── reflectionUtils.kt │ │ │ │ │ ├── serializerHelper.kt │ │ │ │ │ └── valueFromKTypeImpl.kt │ │ │ │ ├── enduserreadme/ │ │ │ │ │ └── EndUserReadmeProcessor.kt │ │ │ │ ├── extension/ │ │ │ │ │ ├── ComponentStorageInternal.kt │ │ │ │ │ └── SingletonExtensionSelectorImpl.kt │ │ │ │ ├── logging/ │ │ │ │ │ ├── LazyInitMiraiLogger.kt │ │ │ │ │ ├── LoggerControllerImpl.kt │ │ │ │ │ ├── MiraiConsoleLogger.kt │ │ │ │ │ └── externalbind/ │ │ │ │ │ └── slf4j/ │ │ │ │ │ ├── MiraiConsoleSLF4JService.kt │ │ │ │ │ └── SLF4JAdapterLogger.kt │ │ │ │ ├── permission/ │ │ │ │ │ ├── AbstractConcurrentPermissionService.kt │ │ │ │ │ ├── BuiltInPermissionServices.kt │ │ │ │ │ └── parseFromStringImpl.kt │ │ │ │ ├── plugin/ │ │ │ │ │ ├── AllDependenciesClassesHolder.kt │ │ │ │ │ ├── BuiltInJvmPluginLoaderImpl.kt │ │ │ │ │ ├── Exceptions.kt │ │ │ │ │ ├── ExportManagerImpl.kt │ │ │ │ │ ├── JvmPluginClassLoader.kt │ │ │ │ │ ├── JvmPluginDependencyDownload.kt │ │ │ │ │ ├── JvmPluginInternal.kt │ │ │ │ │ ├── JvmPluginTesting.kt │ │ │ │ │ ├── MiraiConsoleAsPlugin.kt │ │ │ │ │ ├── NotYetLoadedJvmPlugin.kt │ │ │ │ │ ├── PluginDescriptionUtil.kt │ │ │ │ │ └── PluginManagerImpl.kt │ │ │ │ ├── shutdown/ │ │ │ │ │ └── ShutdownDaemon.kt │ │ │ │ └── util/ │ │ │ │ ├── CommonUtils.kt │ │ │ │ ├── ConsoleInputImpl.kt │ │ │ │ ├── JavaPluginSchedulerImpl.kt │ │ │ │ ├── PluginServiceHelper.kt │ │ │ │ └── semver/ │ │ │ │ ├── RequirementInternal.kt │ │ │ │ ├── RequirementParser.kt │ │ │ │ └── SemVersionInternal.kt │ │ │ ├── logging/ │ │ │ │ ├── AbstractLoggerController.kt │ │ │ │ └── LoggerController.kt │ │ │ ├── permission/ │ │ │ │ ├── Permission.kt │ │ │ │ ├── PermissionId.kt │ │ │ │ ├── PermissionIdNamespace.kt │ │ │ │ ├── PermissionImplementation.kt │ │ │ │ ├── PermissionRegistryConflictException.kt │ │ │ │ ├── PermissionService.kt │ │ │ │ ├── Permittee.kt │ │ │ │ └── PermitteeId.kt │ │ │ ├── plugin/ │ │ │ │ ├── NotYetLoadedPlugin.kt │ │ │ │ ├── Plugin.kt │ │ │ │ ├── PluginFileExtensions.kt │ │ │ │ ├── PluginManager.kt │ │ │ │ ├── ResourceContainer.kt │ │ │ │ ├── center/ │ │ │ │ │ └── PluginCenter.kt │ │ │ │ ├── description/ │ │ │ │ │ ├── IllegalPluginDescriptionException.kt │ │ │ │ │ ├── PluginDependency.kt │ │ │ │ │ └── PluginDescription.kt │ │ │ │ ├── jvm/ │ │ │ │ │ ├── AbstractJvmPlugin.kt │ │ │ │ │ ├── ExportManager.kt │ │ │ │ │ ├── JavaPlugin.kt │ │ │ │ │ ├── JavaPluginScheduler.kt │ │ │ │ │ ├── JvmPlugin.kt │ │ │ │ │ ├── JvmPluginClasspath.kt │ │ │ │ │ ├── JvmPluginDescription.kt │ │ │ │ │ ├── JvmPluginLoader.kt │ │ │ │ │ └── KotlinPlugin.kt │ │ │ │ └── loader/ │ │ │ │ ├── FilePluginLoader.kt │ │ │ │ ├── PluginLoadException.kt │ │ │ │ └── PluginLoader.kt │ │ │ └── util/ │ │ │ ├── Annotations.kt │ │ │ ├── AnsiMessageBuilder.kt │ │ │ ├── ConsoleInput.kt │ │ │ ├── ContactUtils.kt │ │ │ ├── CoroutineScopeUtils.kt │ │ │ ├── MemoryFormat.kt │ │ │ ├── MessageScope.kt │ │ │ ├── MessageUtils.kt │ │ │ ├── SemVersion.kt │ │ │ ├── StandardUtils.kt │ │ │ └── retryCatching.kt │ │ ├── test/ │ │ │ ├── TestMiraiConosle.kt │ │ │ ├── command/ │ │ │ │ ├── AbstractCommandTest.kt │ │ │ │ ├── CommandContextTest.kt │ │ │ │ ├── CommandValueArgumentContextTest.kt │ │ │ │ ├── InstanceTestCommand.kt │ │ │ │ ├── JSimpleTest.java │ │ │ │ └── commanTestingUtil.kt │ │ │ ├── configuration/ │ │ │ │ └── AutoLoginTest.kt │ │ │ ├── data/ │ │ │ │ ├── JAutoSavePluginDataTest.kt │ │ │ │ ├── JavaPluginDescriptionTests.kt │ │ │ │ ├── MultiFilePluginDataStorageImplTests.kt │ │ │ │ ├── PluginDataTest.kt │ │ │ │ └── PluginMovingTests.kt │ │ │ ├── extension/ │ │ │ │ └── GlobalComponentStorageTest.kt │ │ │ ├── logging/ │ │ │ │ ├── TestAbstractLoggerController.kt │ │ │ │ └── TestAbstractLoggerController_PathBased.kt │ │ │ ├── permission/ │ │ │ │ ├── PermissionServiceTest.kt │ │ │ │ └── PermissionsBasicsTest.kt │ │ │ ├── plugin/ │ │ │ │ ├── BuiltInJvmPluginLoaderImplTest.kt │ │ │ │ └── PluginLoadingOrderTest.kt │ │ │ ├── testFramework/ │ │ │ │ ├── AbstractConsoleInstanceTest.kt │ │ │ │ ├── MockConsoleImplementation.kt │ │ │ │ └── test/ │ │ │ │ └── FrameworkInstanceTest.kt │ │ │ └── util/ │ │ │ ├── TestCoroutineUtils.kt │ │ │ └── TestSemVersion.kt │ │ └── testResources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── org.slf4j.spi.SLF4JServiceProvider │ ├── docs/ │ │ ├── .conf/ │ │ │ └── nav.js │ │ ├── Appendix.md │ │ ├── BuiltInCommands.md │ │ ├── Commands.md │ │ ├── ConfiguringProjects.md │ │ ├── Contributing.md │ │ ├── Extensions.md │ │ ├── FrontEnd.md │ │ ├── Logging.md │ │ ├── Permissions.md │ │ ├── PluginData.md │ │ ├── QA.md │ │ ├── README.md │ │ ├── Run.md │ │ └── plugin/ │ │ ├── JVMPlugin-Appendix.md │ │ ├── JVMPlugin-DataExchange.md │ │ ├── JVMPlugin-Debug.md │ │ ├── JVMPlugin.md │ │ └── Plugins.md │ ├── frontend/ │ │ ├── mirai-android/ │ │ │ ├── .github/ │ │ │ │ ├── ISSUE_TEMPLATE/ │ │ │ │ │ └── bug_report.md │ │ │ │ └── workflows/ │ │ │ │ └── android.yml │ │ │ ├── .gitignore │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── app/ │ │ │ │ ├── .gitignore │ │ │ │ ├── build.gradle │ │ │ │ ├── libs/ │ │ │ │ │ ├── d8.jar │ │ │ │ │ ├── giteeman-0.2.3.jar │ │ │ │ │ ├── mirai-console-0.5.2.jar │ │ │ │ │ └── mirai-js-1.0.0.jar │ │ │ │ ├── proguard-rules.pro │ │ │ │ └── src/ │ │ │ │ ├── androidTest/ │ │ │ │ │ └── java/ │ │ │ │ │ └── io/ │ │ │ │ │ └── github/ │ │ │ │ │ └── mzdluo123/ │ │ │ │ │ └── mirai/ │ │ │ │ │ └── android/ │ │ │ │ │ ├── TestWithIdleResources.kt │ │ │ │ │ ├── activity/ │ │ │ │ │ │ └── NavTest.kt │ │ │ │ │ ├── console/ │ │ │ │ │ │ ├── ConsoleIntentTest.kt │ │ │ │ │ │ └── ConsoleTest.kt │ │ │ │ │ ├── script/ │ │ │ │ │ │ └── ScriptManageTest.kt │ │ │ │ │ └── utils.kt │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── aidl/ │ │ │ │ │ └── io/ │ │ │ │ │ └── github/ │ │ │ │ │ └── mzdluo123/ │ │ │ │ │ └── mirai/ │ │ │ │ │ └── android/ │ │ │ │ │ └── IbotAidlInterface.aidl │ │ │ │ ├── java/ │ │ │ │ │ ├── io/ │ │ │ │ │ │ └── github/ │ │ │ │ │ │ └── mzdluo123/ │ │ │ │ │ │ └── mirai/ │ │ │ │ │ │ └── android/ │ │ │ │ │ │ ├── AppSettings.kt │ │ │ │ │ │ ├── BotApplication.kt │ │ │ │ │ │ ├── IdleResources.kt │ │ │ │ │ │ ├── NotificationFactory.kt │ │ │ │ │ │ ├── activity/ │ │ │ │ │ │ │ ├── CaptchaActivity.kt │ │ │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ │ │ ├── PluginImportActivity.kt │ │ │ │ │ │ │ └── UnsafeLoginActivity.kt │ │ │ │ │ │ ├── crash/ │ │ │ │ │ │ │ ├── MiraiAndroidReportSender.kt │ │ │ │ │ │ │ └── MiraiAndroidReportSenderFactory.kt │ │ │ │ │ │ ├── miraiconsole/ │ │ │ │ │ │ │ ├── AndroidLoginSolver.kt │ │ │ │ │ │ │ └── AndroidMiraiConsole.kt │ │ │ │ │ │ ├── receiver/ │ │ │ │ │ │ │ ├── BootReceiver.kt │ │ │ │ │ │ │ └── PushMsgReceiver.kt │ │ │ │ │ │ ├── script/ │ │ │ │ │ │ │ ├── JavaScriptHost.kt │ │ │ │ │ │ │ ├── LuaScriptHost.kt │ │ │ │ │ │ │ ├── ScriptHost.kt │ │ │ │ │ │ │ ├── ScriptHostFactory.kt │ │ │ │ │ │ │ └── ScriptManager.kt │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ ├── BotService.kt │ │ │ │ │ │ │ └── ServiceConnector.kt │ │ │ │ │ │ ├── ui/ │ │ │ │ │ │ │ ├── about/ │ │ │ │ │ │ │ │ └── AboutFragment.kt │ │ │ │ │ │ │ ├── console/ │ │ │ │ │ │ │ │ └── ConsoleFragment.kt │ │ │ │ │ │ │ ├── plugin/ │ │ │ │ │ │ │ │ ├── PluginFragment.kt │ │ │ │ │ │ │ │ └── PluginViewModel.kt │ │ │ │ │ │ │ ├── script/ │ │ │ │ │ │ │ │ ├── ScriptCenterFragment.kt │ │ │ │ │ │ │ │ ├── ScriptCenterListAdapter.kt │ │ │ │ │ │ │ │ ├── ScriptCenterViewModel.kt │ │ │ │ │ │ │ │ ├── ScriptFragment.kt │ │ │ │ │ │ │ │ ├── ScriptInfoDialogFragment.kt │ │ │ │ │ │ │ │ ├── ScriptListAdapter.kt │ │ │ │ │ │ │ │ └── ScriptViewModel.kt │ │ │ │ │ │ │ └── setting/ │ │ │ │ │ │ │ └── SettingFragment.kt │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ ├── CommandFastRegister.kt │ │ │ │ │ │ ├── DeviceStatus.java │ │ │ │ │ │ ├── DexCompiler.java │ │ │ │ │ │ ├── LoopQueue.java │ │ │ │ │ │ ├── MiraiAndroidStatus.kt │ │ │ │ │ │ ├── TextSharer.kt │ │ │ │ │ │ ├── dnsQuery.kt │ │ │ │ │ │ ├── fileUtils.kt │ │ │ │ │ │ └── pasteBin.kt │ │ │ │ │ └── java/ │ │ │ │ │ └── awt/ │ │ │ │ │ └── image/ │ │ │ │ │ └── BufferedImage.java │ │ │ │ └── res/ │ │ │ │ ├── color/ │ │ │ │ │ └── color_drawer_item.xml │ │ │ │ ├── drawable/ │ │ │ │ │ ├── ic_add_white_24dp.xml │ │ │ │ │ ├── ic_android_24.xml │ │ │ │ │ ├── ic_baseline_folder_24.xml │ │ │ │ │ ├── ic_baseline_insert_drive_file_24.xml │ │ │ │ │ ├── ic_baseline_keyboard_arrow_up_24.xml │ │ │ │ │ ├── ic_baseline_publish_24.xml │ │ │ │ │ ├── ic_battery_alert_24.xml │ │ │ │ │ ├── ic_chat_bubble_black_24dp.xml │ │ │ │ │ ├── ic_check_white_24dp.xml │ │ │ │ │ ├── ic_delete_black_24dp.xml │ │ │ │ │ ├── ic_desktop_windows_black_24dp.xml │ │ │ │ │ ├── ic_edit_black_24dp.xml │ │ │ │ │ ├── ic_exit_to_app_24dp.xml │ │ │ │ │ ├── ic_extension_black_24dp.xml │ │ │ │ │ ├── ic_info_black_24dp.xml │ │ │ │ │ ├── ic_insert_drive_file_black_24dp.xml │ │ │ │ │ ├── ic_keyboard_arrow_down_black_24dp.xml │ │ │ │ │ ├── ic_keyboard_return_black_24dp.xml │ │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ │ ├── ic_local_printshop_24.xml │ │ │ │ │ ├── ic_new_launcher_foreground.xml │ │ │ │ │ ├── ic_refresh_black_24dp.xml │ │ │ │ │ ├── ic_restore_24.xml │ │ │ │ │ ├── ic_save_black_24dp.xml │ │ │ │ │ ├── ic_settings_black_24dp.xml │ │ │ │ │ ├── ic_share_24.xml │ │ │ │ │ ├── ic_store_white_24.xml │ │ │ │ │ ├── icon.xml │ │ │ │ │ ├── loading_background.xml │ │ │ │ │ └── side_nav_bar.xml │ │ │ │ ├── drawable-v24/ │ │ │ │ │ └── ic_launcher_foreground.xml │ │ │ │ ├── layout/ │ │ │ │ │ ├── activity_captcha.xml │ │ │ │ │ ├── activity_main.xml │ │ │ │ │ ├── activity_plugin_import.xml │ │ │ │ │ ├── activity_unsafe_login.xml │ │ │ │ │ ├── app_bar_main.xml │ │ │ │ │ ├── content_main.xml │ │ │ │ │ ├── dialog_ask_filename.xml │ │ │ │ │ ├── dialog_autologin.xml │ │ │ │ │ ├── dialog_script_info.xml │ │ │ │ │ ├── fragment_about.xml │ │ │ │ │ ├── fragment_home.xml │ │ │ │ │ ├── fragment_plugin.xml │ │ │ │ │ ├── fragment_script.xml │ │ │ │ │ ├── fragment_script_center.xml │ │ │ │ │ ├── fragment_script_center_empty.xml │ │ │ │ │ ├── fragment_script_empty.xml │ │ │ │ │ ├── item_plugin.xml │ │ │ │ │ ├── item_script.xml │ │ │ │ │ ├── item_script_center_list.xml │ │ │ │ │ └── nav_header_main.xml │ │ │ │ ├── menu/ │ │ │ │ │ ├── menu_activity_main_drawer.xml │ │ │ │ │ ├── menu_console.xml │ │ │ │ │ ├── menu_script.xml │ │ │ │ │ ├── menu_script_center.xml │ │ │ │ │ ├── plugin_add.xml │ │ │ │ │ ├── plugin_manage.xml │ │ │ │ │ └── unsafe_menu.xml │ │ │ │ ├── mipmap-anydpi-v26/ │ │ │ │ │ ├── ic_launcher.xml │ │ │ │ │ ├── ic_launcher_round.xml │ │ │ │ │ ├── ic_new_launcher.xml │ │ │ │ │ └── ic_new_launcher_round.xml │ │ │ │ ├── navigation/ │ │ │ │ │ └── mobile_navigation.xml │ │ │ │ ├── values/ │ │ │ │ │ ├── colors.xml │ │ │ │ │ ├── dimens.xml │ │ │ │ │ ├── ic_new_launcher_background.xml │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── styles.xml │ │ │ │ ├── values-night/ │ │ │ │ │ └── colors-night.xml │ │ │ │ ├── values-v21/ │ │ │ │ │ └── styles.xml │ │ │ │ ├── values-v29/ │ │ │ │ │ └── styles.xml │ │ │ │ └── xml/ │ │ │ │ ├── path_script.xml │ │ │ │ └── setting_screen.xml │ │ │ ├── build.gradle │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradle.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ └── settings.gradle │ │ ├── mirai-console-frontend-base/ │ │ │ ├── build.gradle.kts │ │ │ ├── compatibility-validation/ │ │ │ │ └── jvm/ │ │ │ │ └── api/ │ │ │ │ └── jvm.api │ │ │ ├── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── services/ │ │ │ │ └── org.slf4j.spi.SLF4JServiceProvider │ │ │ ├── src/ │ │ │ │ ├── AbstractMiraiConsoleFrontendImplementation.kt │ │ │ │ ├── FrontendBase.kt │ │ │ │ ├── RepipedMessageForward.kt │ │ │ │ ├── logging/ │ │ │ │ │ └── LogRecorder.kt │ │ │ │ └── package.kt │ │ │ └── test/ │ │ │ ├── RepipedMessageForwardTest.kt │ │ │ └── package.kt │ │ └── mirai-console-terminal/ │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── src/ │ │ │ ├── BufferedOutputStream.kt │ │ │ ├── ConsoleInputImpl.kt │ │ │ ├── ConsoleTerminalSettings.kt │ │ │ ├── ConsoleThread.kt │ │ │ ├── JLineInputDaemon.kt │ │ │ ├── LoggingService.kt │ │ │ ├── MiraiConsoleImplementationTerminal.kt │ │ │ ├── MiraiConsoleTerminalLoader.kt │ │ │ ├── TerminalProcessProgress.kt │ │ │ ├── net/ │ │ │ │ └── mamoe/ │ │ │ │ └── mirai/ │ │ │ │ └── console/ │ │ │ │ └── pure/ │ │ │ │ └── MiraiConsolePureLoader.kt │ │ │ └── noconsole/ │ │ │ └── NoConsole.kt │ │ └── test/ │ │ └── RunTerminal.kt │ └── tools/ │ ├── compiler-annotations/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── androidMain/ │ │ │ └── AndroidManifest.xml │ │ └── commonMain/ │ │ └── kotlin/ │ │ ├── CheckerConstants.kt │ │ ├── ResolveContext.kt │ │ └── RestrictedScope.kt │ ├── compiler-common/ │ │ ├── README.md │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── diagnostics/ │ │ │ ├── MiraiConsoleErrors.kt │ │ │ └── MiraiConsoleErrorsRendering.kt │ │ ├── resolve/ │ │ │ ├── resolveCommon.kt │ │ │ └── resolveTypes.kt │ │ └── utilCommon.kt │ ├── gradle-plugin/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ ├── src/ │ │ │ ├── integTest/ │ │ │ │ └── kotlin/ │ │ │ │ ├── AbstractTest.kt │ │ │ │ ├── KotlinTransitiveDependenciesIntegrationTest.kt │ │ │ │ ├── TestBuildPlugin.kt │ │ │ │ └── TestPluginApply.kt │ │ │ └── main/ │ │ │ └── kotlin/ │ │ │ ├── BuildMiraiPluginTask.kt │ │ │ ├── BuildMiraiPluginV2.kt │ │ │ ├── IGNORED_DEPENDENCIES_IN_SHADOW.kt │ │ │ ├── MiraiConsoleExtension.kt │ │ │ ├── MiraiConsoleGradlePlugin.kt │ │ │ ├── VersionConstants.kt.template │ │ │ ├── dsl.kt │ │ │ └── publishing.kt │ │ └── test/ │ │ └── net/ │ │ └── mamoe/ │ │ └── mirai/ │ │ └── console/ │ │ └── gradle/ │ │ ├── AbstractTest.groovy │ │ └── TestPluginApply.groovy │ └── intellij-plugin/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ ├── libs/ │ │ └── ide-common.jar │ ├── resources/ │ │ ├── META-INF/ │ │ │ └── plugin.xml │ │ ├── fileTemplates/ │ │ │ └── code/ │ │ │ ├── .gitignore.ft │ │ │ ├── .gitignore.html │ │ │ ├── Gradle gradle-wrapper.properties.ft │ │ │ ├── Gradle gradle-wrapper.properties.html │ │ │ ├── Gradle gradle.properties.ft │ │ │ ├── Gradle gradle.properties.html │ │ │ ├── Plugin build.gradle.ft │ │ │ ├── Plugin build.gradle.html │ │ │ ├── Plugin build.gradle.kts.ft │ │ │ ├── Plugin build.gradle.kts.html │ │ │ ├── Plugin main class Java.java.ft │ │ │ ├── Plugin main class Java.java.ft.back │ │ │ ├── Plugin main class Java.java.html │ │ │ ├── Plugin main class Kotlin.kt.ft │ │ │ ├── Plugin main class Kotlin.kt.html │ │ │ ├── Plugin main service.txt.ft │ │ │ ├── Plugin main service.txt.html │ │ │ ├── Plugin settings.gradle.ft │ │ │ ├── Plugin settings.gradle.html │ │ │ ├── Plugin settings.gradle.kts.ft │ │ │ ├── Plugin settings.gradle.kts.html │ │ │ ├── RunTerminal.run.xml.ft │ │ │ ├── RunTerminal.run.xml.html │ │ │ ├── account.properties.ft │ │ │ └── account.properties.html │ │ ├── inspectionDescriptions/ │ │ │ ├── PluginMainServiceNotConfigured.html │ │ │ ├── ResourceNotClosed.html │ │ │ └── UsingStringPlusMessage.html │ │ ├── intentionDescriptions/ │ │ │ ├── WrapWithResourceUseCallIntention/ │ │ │ │ ├── after.receiver.template │ │ │ │ ├── before.receiver.template │ │ │ │ └── description.html │ │ │ └── WrapWithResourceUseCallJavaIntention/ │ │ │ ├── after.action.template │ │ │ ├── before.action.template │ │ │ └── description.html │ │ └── messages/ │ │ ├── InspectionGadgetsBundle.properties │ │ ├── InspectionsBundle.properties │ │ ├── MiraiProjectWizardBundle.properties │ │ └── MiraiProjectWizardBundle_zh.properties │ ├── run/ │ │ └── projects/ │ │ ├── .gitignore │ │ └── test-project/ │ │ ├── build.gradle.kts │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── settings.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── test/ │ │ │ │ ├── ResourceNotClosedInspectionTestJava.java │ │ │ │ └── TestJavaPlugin.java │ │ │ └── kotlin/ │ │ │ └── org/ │ │ │ └── example/ │ │ │ └── myplugin/ │ │ │ ├── AbstractMessageKeysUsages.kt │ │ │ ├── ConsoleCommandOwnerCheck.kt │ │ │ ├── MyPluginMain.kt │ │ │ ├── MySimpleCommand.kt │ │ │ ├── ReadOnlyPluginDataVar.kt │ │ │ ├── ResourceNotClosedInspectionTest.kt │ │ │ ├── StringPlusMessageInspectionTest.kt │ │ │ ├── UsingDerivedMap.kt │ │ │ └── WrapWithResourceUseCallIntentionTest.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── RunConsole.kt │ ├── src/ │ │ ├── IDEContainerContributor.kt │ │ ├── QuickFixRegistrar.kt │ │ ├── assets/ │ │ │ ├── Assets.kt │ │ │ └── FileTemplateRegistrar.kt │ │ ├── diagnostics/ │ │ │ ├── CommandDeclarationChecker.kt │ │ │ ├── ContextualParametersChecker.kt │ │ │ ├── MessageChainGetCallChecker.kt │ │ │ ├── PluginDataValuesChecker.kt │ │ │ ├── PluginMainServiceNotConfiguredInspection.kt │ │ │ ├── QuickFixUtils.kt │ │ │ ├── ResourceNotClosedInspection.kt │ │ │ ├── TaskUtils.kt │ │ │ ├── UsingStringPlusMessageInspection.kt │ │ │ ├── diagnosticsUtil.kt │ │ │ └── fix/ │ │ │ ├── AbuseYellowIntention.kt │ │ │ ├── AddSerializerFix.kt │ │ │ ├── ConfigurePluginMainServiceFix.kt │ │ │ ├── ConvertToValFix.kt │ │ │ ├── ProvideDefaultValueFix.kt │ │ │ ├── TypeProjectionFix.kt │ │ │ └── WrapWithResourceUseCallIntention.kt │ │ ├── line/ │ │ │ └── marker/ │ │ │ ├── CommandDeclarationLineMarkerProvider.kt │ │ │ └── PluginMainLineMarkerProvider.kt │ │ ├── resolve/ │ │ │ ├── FunctionSignature.kt │ │ │ ├── ReceiverExpression.kt │ │ │ └── resolveIdea.kt │ │ ├── util/ │ │ │ ├── RequirementHelper.kt │ │ │ ├── RequirementParser.kt │ │ │ └── RunIgnoringErrors.kt │ │ └── wizard/ │ │ ├── BuildSystemType.kt │ │ ├── KotlinStdlibVersion.kt │ │ ├── LanguageType.kt │ │ ├── MiraiModuleBuilder.kt │ │ ├── MiraiModuleType.kt │ │ ├── MiraiProjectModel.kt │ │ ├── MiraiProjectWizardInitialStep.kt │ │ ├── MiraiValidations.kt │ │ ├── MiraiVersion.kt │ │ ├── MiraiWizardBundle.kt │ │ └── ProjectAssetsProvider.kt │ └── test/ │ ├── creator/ │ │ ├── MiraiVersionKindTest.kt │ │ └── tasks/ │ │ └── TaskUtilsKtTest.kt │ └── package.kt ├── mirai-core/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle.kts │ ├── compatibility-validation/ │ │ ├── android/ │ │ │ └── api/ │ │ │ └── android.api │ │ └── jvm/ │ │ └── api/ │ │ └── jvm.api │ └── src/ │ ├── androidInstrumentedTest/ │ │ └── kotlin/ │ │ ├── package.kt │ │ ├── test/ │ │ │ └── initializeTestJvm.kt │ │ └── testFramework/ │ │ └── currentPlatform.kt │ ├── androidMain/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ ├── package.kt │ │ └── utils/ │ │ └── crypto/ │ │ └── EcdhAndroid.kt │ ├── androidUnitTest/ │ │ └── kotlin/ │ │ ├── package.kt │ │ ├── test/ │ │ │ ├── Logger.kt │ │ │ └── initializeTestJvm.kt │ │ └── testFramework/ │ │ └── currentPlatform.kt │ ├── commonMain/ │ │ ├── kotlin/ │ │ │ ├── AbstractBot.kt │ │ │ ├── BotAccount.kt │ │ │ ├── BotFactory.kt │ │ │ ├── MiraiImpl.kt │ │ │ ├── QQAndroidBot.kt │ │ │ ├── contact/ │ │ │ │ ├── AbstractContact.kt │ │ │ │ ├── AbstractMember.kt │ │ │ │ ├── AbstractUser.kt │ │ │ │ ├── AnonymousMemberImpl.kt │ │ │ │ ├── ContactAware.kt │ │ │ │ ├── FriendImpl.kt │ │ │ │ ├── GroupImpl.kt │ │ │ │ ├── GroupSendMessageImpl.kt │ │ │ │ ├── GroupSettingsImpl.kt │ │ │ │ ├── MemberActiveImpl.kt │ │ │ │ ├── NormalMemberImpl.kt │ │ │ │ ├── OnlineAnnouncementImpl.kt │ │ │ │ ├── OtherClientImpl.kt │ │ │ │ ├── SendMessageHandler.kt │ │ │ │ ├── StrangerImpl.kt │ │ │ │ ├── active/ │ │ │ │ │ ├── GroupActiveImpl.kt │ │ │ │ │ └── GroupActiveProtocol.kt │ │ │ │ ├── announcement/ │ │ │ │ │ ├── AnnouncementsImpl.kt │ │ │ │ │ └── GroupAnnouncement.kt │ │ │ │ ├── essence/ │ │ │ │ │ ├── EssencesImpl.kt │ │ │ │ │ └── GroupDigestProtocol.kt │ │ │ │ ├── file/ │ │ │ │ │ ├── AbsoluteFileImpl.kt │ │ │ │ │ ├── AbsoluteFolderImpl.kt │ │ │ │ │ ├── AbstractAbsoluteFileFolder.kt │ │ │ │ │ ├── FileProtocol.kt │ │ │ │ │ └── RemoteFilesImpl.kt │ │ │ │ ├── friendgroup/ │ │ │ │ │ ├── FriendGroupImpl.kt │ │ │ │ │ └── FriendGroupsImpl.kt │ │ │ │ ├── info/ │ │ │ │ │ ├── FriendGroupInfo.kt │ │ │ │ │ ├── FriendInfoImpl.kt │ │ │ │ │ ├── GroupInfoImpl.kt │ │ │ │ │ ├── MemberInfoImpl.kt │ │ │ │ │ └── StrangerInfoImpl.kt │ │ │ │ ├── roaming/ │ │ │ │ │ ├── AbstractRoamingMessages.kt │ │ │ │ │ ├── RoamingMessagesImplFriend.kt │ │ │ │ │ ├── RoamingMessagesImplGroup.kt │ │ │ │ │ └── TimeBasedRoamingMessagesImpl.kt │ │ │ │ └── util.kt │ │ │ ├── event/ │ │ │ │ ├── EventChannelImpl.kt │ │ │ │ ├── EventChannelToEventDispatcherAdapter.kt │ │ │ │ ├── EventListeners.kt │ │ │ │ ├── GlobalEventChannelProviderImpl.kt │ │ │ │ ├── SafeListener.kt │ │ │ │ └── package.kt │ │ │ ├── message/ │ │ │ │ ├── ReceiveMessageHandler.kt │ │ │ │ ├── RefinableMessage.kt │ │ │ │ ├── atImpl.kt │ │ │ │ ├── contextualBugReportException.kt │ │ │ │ ├── data/ │ │ │ │ │ ├── FileMessageImpl.kt │ │ │ │ │ ├── LongMessageInternal.kt │ │ │ │ │ ├── MarketFaceImpl.kt │ │ │ │ │ ├── MessageChainBuilderExt.kt │ │ │ │ │ ├── MessageSourceExt.kt │ │ │ │ │ ├── MultiMsgUploader.kt │ │ │ │ │ ├── UnsupportedMessageImpl.kt │ │ │ │ │ ├── audio.kt │ │ │ │ │ ├── lightApp.kt │ │ │ │ │ └── shortVideo.kt │ │ │ │ ├── faceImpl.kt │ │ │ │ ├── flags/ │ │ │ │ │ └── InternalFlagOnlyMessage.kt │ │ │ │ ├── image/ │ │ │ │ │ ├── AbstractImage.kt │ │ │ │ │ ├── ImageDecoder.kt │ │ │ │ │ ├── ImageInfo.kt │ │ │ │ │ ├── ImageUrlAware.kt │ │ │ │ │ ├── InternalImageProtocolImpl.kt │ │ │ │ │ ├── InternalShortVideoProtocolImpl.kt │ │ │ │ │ ├── OfflineImage.kt │ │ │ │ │ ├── OnlineImage.kt │ │ │ │ │ └── jceData.kt │ │ │ │ ├── imagesImpl.kt │ │ │ │ ├── messageToElems.kt │ │ │ │ ├── protocol/ │ │ │ │ │ ├── MessageProtocol.kt │ │ │ │ │ ├── MessageProtocolFacade.kt │ │ │ │ │ ├── decode/ │ │ │ │ │ │ ├── MessageDecoder.kt │ │ │ │ │ │ └── MessageDecoderPipeline.kt │ │ │ │ │ ├── encode/ │ │ │ │ │ │ ├── MessageEncoder.kt │ │ │ │ │ │ └── MessageEncoderPipeline.kt │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── AudioProtocol.kt │ │ │ │ │ │ ├── CustomMessageProtocol.kt │ │ │ │ │ │ ├── FaceProtocol.kt │ │ │ │ │ │ ├── FileMessageProtocol.kt │ │ │ │ │ │ ├── FlashImageProtocol.kt │ │ │ │ │ │ ├── ForwardMessageProtocol.kt │ │ │ │ │ │ ├── GeneralMessageSenderProtocol.kt │ │ │ │ │ │ ├── IgnoredMessagesProtocol.kt │ │ │ │ │ │ ├── ImageProtocol.kt │ │ │ │ │ │ ├── LongMessageProtocol.kt │ │ │ │ │ │ ├── MarketFaceProtocol.kt │ │ │ │ │ │ ├── MusicShareProtocol.kt │ │ │ │ │ │ ├── PokeMessageProtocol.kt │ │ │ │ │ │ ├── PttMessageProtocol.kt │ │ │ │ │ │ ├── QuoteReplyProtocol.kt │ │ │ │ │ │ ├── RichMessageProtocol.kt │ │ │ │ │ │ ├── ShortVideoProtocol.kt │ │ │ │ │ │ ├── SuperFaceProtocol.kt │ │ │ │ │ │ ├── TextProtocol.kt │ │ │ │ │ │ ├── UnsupportedMessageProtocol.kt │ │ │ │ │ │ └── VipFaceProtocol.kt │ │ │ │ │ ├── outgoing/ │ │ │ │ │ │ ├── HighwayUploader.kt │ │ │ │ │ │ ├── MessageProtocolStrategy.kt │ │ │ │ │ │ ├── OutgoingMessagePipeline.kt │ │ │ │ │ │ ├── OutgoingMessagePipelineProcessor.kt │ │ │ │ │ │ └── OutgoingMessageProcessor.kt │ │ │ │ │ └── serialization/ │ │ │ │ │ └── MessageSerializer.kt │ │ │ │ ├── rich/ │ │ │ │ │ └── package.kt │ │ │ │ ├── source/ │ │ │ │ │ ├── MessageSourceInternal.kt │ │ │ │ │ ├── incomingSourceImpl.kt │ │ │ │ │ ├── offlineSourceImpl.kt │ │ │ │ │ └── outgoingSourceImpl.kt │ │ │ │ └── visitor/ │ │ │ │ └── MessageVisitorEx.kt │ │ │ ├── network/ │ │ │ │ ├── ContactListCache.kt │ │ │ │ ├── DebuggingProperties.kt │ │ │ │ ├── Packet.kt │ │ │ │ ├── QQAndroidClient.kt │ │ │ │ ├── Ticket.kt │ │ │ │ ├── auth/ │ │ │ │ │ ├── AuthControl.kt │ │ │ │ │ ├── BotAuthSessionInternal.kt │ │ │ │ │ ├── DefaultBotAuthorizationFactoryImpl.kt │ │ │ │ │ └── SafeBotAuthSession.kt │ │ │ │ ├── component/ │ │ │ │ │ ├── ComponentKey.kt │ │ │ │ │ ├── ComponentStorage.kt │ │ │ │ │ ├── ComponentStorageDelegate.kt │ │ │ │ │ ├── ConcurrentComponentStorage.kt │ │ │ │ │ ├── MutableComponentStorage.kt │ │ │ │ │ └── NoSuchComponentException.kt │ │ │ │ ├── components/ │ │ │ │ │ ├── AccountSecretsManager.kt │ │ │ │ │ ├── BdhSessionSyncer.kt │ │ │ │ │ ├── BotClientHolder.kt │ │ │ │ │ ├── BotInitProcessor.kt │ │ │ │ │ ├── BotOfflineEventMonitor.kt │ │ │ │ │ ├── CacheValidator.kt │ │ │ │ │ ├── ClockComponent.kt │ │ │ │ │ ├── ConfigPushProcessor.kt │ │ │ │ │ ├── ConfigPushSyncer.kt │ │ │ │ │ ├── ContactCacheService.kt │ │ │ │ │ ├── ContactUpdater.kt │ │ │ │ │ ├── EcdhInitialPublicKeyUpdater.kt │ │ │ │ │ ├── EncryptServiceHolder.kt │ │ │ │ │ ├── EventDispatcher.kt │ │ │ │ │ ├── HeartbeatProcessor.kt │ │ │ │ │ ├── HeartbeatScheduler.kt │ │ │ │ │ ├── HttpClientProvider.kt │ │ │ │ │ ├── KeyRefreshProcessor.kt │ │ │ │ │ ├── MessageSvcSyncer.kt │ │ │ │ │ ├── NetworkHandlerReference.kt │ │ │ │ │ ├── NoticeProcessorPipeline.kt │ │ │ │ │ ├── OtherClientUpdater.kt │ │ │ │ │ ├── PacketCodec.kt │ │ │ │ │ ├── PacketHandler.kt │ │ │ │ │ ├── PacketLoggingStrategy.kt │ │ │ │ │ ├── QRCodeLoginProcessor.kt │ │ │ │ │ ├── ServerList.kt │ │ │ │ │ ├── SsoProcessor.kt │ │ │ │ │ ├── SsoProcessorContext.kt │ │ │ │ │ ├── SyncController.kt │ │ │ │ │ └── package.kt │ │ │ │ ├── handler/ │ │ │ │ │ ├── CommonNetworkHandler.kt │ │ │ │ │ ├── NetworkHandler.kt │ │ │ │ │ ├── NetworkHandlerContext.kt │ │ │ │ │ ├── NetworkHandlerFactory.kt │ │ │ │ │ ├── NetworkHandlerSupport.kt │ │ │ │ │ ├── selector/ │ │ │ │ │ │ ├── AbstractKeepAliveNetworkHandlerSelector.kt │ │ │ │ │ │ ├── ExceptionInSelectorResumeException.kt │ │ │ │ │ │ ├── MaxAttemptsReachedException.kt │ │ │ │ │ │ ├── NetworkChannelException.kt │ │ │ │ │ │ ├── NetworkException.kt │ │ │ │ │ │ ├── NetworkHandlerSelector.kt │ │ │ │ │ │ ├── NoServerAvailableException.kt │ │ │ │ │ │ ├── PacketTimeoutException.kt │ │ │ │ │ │ ├── SelectorNetworkHandler.kt │ │ │ │ │ │ └── SelectorRequireReconnectException.kt │ │ │ │ │ └── state/ │ │ │ │ │ ├── CombinedStateObserver.kt │ │ │ │ │ ├── ExceptionInStateObserverException.kt │ │ │ │ │ ├── JobAttachStateObserver.kt │ │ │ │ │ ├── LoggingStateObserver.kt │ │ │ │ │ ├── SafeStateObserver.kt │ │ │ │ │ ├── StateChangedObserver.kt │ │ │ │ │ └── StateObserver.kt │ │ │ │ ├── highway/ │ │ │ │ │ ├── ChunkedFlowSession.kt │ │ │ │ │ ├── Highway.kt │ │ │ │ │ └── Http.kt │ │ │ │ ├── impl/ │ │ │ │ │ ├── HeartbeatFailedException.kt │ │ │ │ │ ├── ServerClosedException.kt │ │ │ │ │ └── package.kt │ │ │ │ ├── keys.kt │ │ │ │ ├── notice/ │ │ │ │ │ ├── NewContactSupport.kt │ │ │ │ │ ├── PrivateContactSupport.kt │ │ │ │ │ ├── TraceLoggingNoticeProcessor.kt │ │ │ │ │ ├── UnconsumedNoticesAlerter.kt │ │ │ │ │ ├── decoders/ │ │ │ │ │ │ ├── GroupNotificationDecoder.kt │ │ │ │ │ │ └── MsgInfoDecoder.kt │ │ │ │ │ ├── group/ │ │ │ │ │ │ ├── GroupMessageProcessor.kt │ │ │ │ │ │ ├── GroupNotificationProcessor.kt │ │ │ │ │ │ ├── GroupOrMemberListNoticeProcessor.kt │ │ │ │ │ │ └── GroupRecallProcessor.kt │ │ │ │ │ └── priv/ │ │ │ │ │ ├── FriendGroupNoticeProcessor.kt │ │ │ │ │ ├── FriendNoticeProcessor.kt │ │ │ │ │ ├── OtherClientNoticeProcessor.kt │ │ │ │ │ └── PrivateMessageProcessor.kt │ │ │ │ ├── protocol/ │ │ │ │ │ ├── LoginType.kt │ │ │ │ │ ├── SyncingCacheList.kt │ │ │ │ │ ├── data/ │ │ │ │ │ │ ├── jce/ │ │ │ │ │ │ │ ├── ChangeFriendNameReq.kt │ │ │ │ │ │ │ ├── ConfigPush.kt │ │ │ │ │ │ │ ├── DeviceItemDes.kt │ │ │ │ │ │ │ ├── FriendList.kt │ │ │ │ │ │ │ ├── GroupMngReq.kt │ │ │ │ │ │ │ ├── InstanceInfo.kt │ │ │ │ │ │ │ ├── MoveGroupMemPack.kt │ │ │ │ │ │ │ ├── MsgType0x210.kt │ │ │ │ │ │ │ ├── OnlinePushPack.kt │ │ │ │ │ │ │ ├── PushNotifyPack.kt │ │ │ │ │ │ │ ├── ReqPushStatus.kt │ │ │ │ │ │ │ ├── ReqSummaryCard.kt │ │ │ │ │ │ │ ├── RequestMSFForceOffline.kt │ │ │ │ │ │ │ ├── RequestPacket.kt │ │ │ │ │ │ │ ├── RequestPushForceOffline.kt │ │ │ │ │ │ │ ├── SetGroupPack.kt │ │ │ │ │ │ │ ├── SvcDevLoginInfo.kt │ │ │ │ │ │ │ ├── SvcReqMSFLoginNotifyData.kt │ │ │ │ │ │ │ ├── SvcReqRegister.kt │ │ │ │ │ │ │ ├── SvcRequestPushReadedNotify.kt │ │ │ │ │ │ │ ├── SvcRespRegister.kt │ │ │ │ │ │ │ ├── SvcRspGetDevLoginInfo.kt │ │ │ │ │ │ │ └── TroopList.kt │ │ │ │ │ │ ├── proto/ │ │ │ │ │ │ │ ├── Cmd0x346.kt │ │ │ │ │ │ │ ├── Cmd0x352.kt │ │ │ │ │ │ │ ├── Cmd0x388.kt │ │ │ │ │ │ │ ├── Cmd0x857.kt │ │ │ │ │ │ │ ├── Cmd0x858.kt │ │ │ │ │ │ │ ├── Define.kt │ │ │ │ │ │ │ ├── Exciting.kt │ │ │ │ │ │ │ ├── FrdSysMsg.kt │ │ │ │ │ │ │ ├── FriendListCommon.kt │ │ │ │ │ │ │ ├── Group.kt │ │ │ │ │ │ │ ├── GroupFileCommon.kt │ │ │ │ │ │ │ ├── Highway.kt │ │ │ │ │ │ │ ├── HummerCommelem.kt │ │ │ │ │ │ │ ├── HummerResv12.kt │ │ │ │ │ │ │ ├── HummerResv21.kt │ │ │ │ │ │ │ ├── HummerResv3.kt │ │ │ │ │ │ │ ├── HummerResv6.kt │ │ │ │ │ │ │ ├── ImageRequest.kt │ │ │ │ │ │ │ ├── ImgExtPbResvAttrCommon.kt │ │ │ │ │ │ │ ├── LongMsg.kt │ │ │ │ │ │ │ ├── Msg.kt │ │ │ │ │ │ │ ├── MsgCommon.kt │ │ │ │ │ │ │ ├── MsgRevokeUserDef.kt │ │ │ │ │ │ │ ├── MsgSvc.kt │ │ │ │ │ │ │ ├── MsgTransmit.kt │ │ │ │ │ │ │ ├── MultiMsg.kt │ │ │ │ │ │ │ ├── OIDB.kt │ │ │ │ │ │ │ ├── Oidb0x6d6.kt │ │ │ │ │ │ │ ├── Oidb0x6d7.kt │ │ │ │ │ │ │ ├── Oidb0x6d8.kt │ │ │ │ │ │ │ ├── Oidb0x6d9.kt │ │ │ │ │ │ │ ├── Oidb0x769.kt │ │ │ │ │ │ │ ├── Oidb0xeac.kt │ │ │ │ │ │ │ ├── OidbCmd0xb77.kt │ │ │ │ │ │ │ ├── OnlinePush.kt │ │ │ │ │ │ │ ├── PbReserve.kt │ │ │ │ │ │ │ ├── PttShortVideo.kt │ │ │ │ │ │ │ ├── SSOReserveField.kt │ │ │ │ │ │ │ ├── StatSvcGetOnline.kt │ │ │ │ │ │ │ ├── StatSvcSimpleGet.kt │ │ │ │ │ │ │ ├── StructMsg.kt │ │ │ │ │ │ │ ├── SyncCookie.kt │ │ │ │ │ │ │ ├── msgType0x210.kt │ │ │ │ │ │ │ └── msgType0x211.kt │ │ │ │ │ │ └── richstatus/ │ │ │ │ │ │ └── RichStatus.kt │ │ │ │ │ └── packet/ │ │ │ │ │ ├── EncryptMethod.kt │ │ │ │ │ ├── OutgoingPacket.kt │ │ │ │ │ ├── PacketFactory.kt │ │ │ │ │ ├── Tlv.kt │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── ChatType.kt │ │ │ │ │ │ ├── GroupFile.kt │ │ │ │ │ │ ├── MultiMsg.kt │ │ │ │ │ │ ├── MusicSharePacket.kt │ │ │ │ │ │ ├── NewContact.kt │ │ │ │ │ │ ├── NudgePacket.kt │ │ │ │ │ │ ├── PbMessageSvc.kt │ │ │ │ │ │ ├── SendMessageMultiProtocol.kt │ │ │ │ │ │ ├── TroopEssenceMsgManager.kt │ │ │ │ │ │ ├── TroopManagement.kt │ │ │ │ │ │ ├── image/ │ │ │ │ │ │ │ ├── ImgStore.kt │ │ │ │ │ │ │ └── LongConn.kt │ │ │ │ │ │ ├── receive/ │ │ │ │ │ │ │ ├── MessageSvc.PbDeleteMsg.kt │ │ │ │ │ │ │ ├── MessageSvc.PbGetGroupMsg.kt │ │ │ │ │ │ │ ├── MessageSvc.PbGetMsg.kt │ │ │ │ │ │ │ ├── MessageSvc.PbGetRoamMsgReq.kt │ │ │ │ │ │ │ ├── MessageSvc.PbSendMsg.kt │ │ │ │ │ │ │ ├── MessageSvc.PushForceOffline.kt │ │ │ │ │ │ │ ├── MessageSvc.PushNotify.kt │ │ │ │ │ │ │ ├── MessageSvc.PushReaded.kt │ │ │ │ │ │ │ ├── MessageSvc.RequestPushStatus.kt │ │ │ │ │ │ │ ├── OnlinePush.PbC2CMsgSync.kt │ │ │ │ │ │ │ ├── OnlinePush.PbPushGroupMsg.kt │ │ │ │ │ │ │ ├── OnlinePush.PbPushTransMsg.kt │ │ │ │ │ │ │ ├── OnlinePush.ReqPush.kt │ │ │ │ │ │ │ └── OnlinePush.SidExpired.kt │ │ │ │ │ │ ├── shortvideo/ │ │ │ │ │ │ │ └── PttCenterSvr.kt │ │ │ │ │ │ └── voice/ │ │ │ │ │ │ └── PttStore.kt │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── FriendList.kt │ │ │ │ │ │ ├── ProfileService.kt │ │ │ │ │ │ └── StrangerList.kt │ │ │ │ │ ├── login/ │ │ │ │ │ │ ├── ConfigPushSvc.kt │ │ │ │ │ │ ├── Heartbeat.kt │ │ │ │ │ │ ├── StatSvc.kt │ │ │ │ │ │ ├── WtLogin.kt │ │ │ │ │ │ └── wtlogin/ │ │ │ │ │ │ ├── WtLogin10.kt │ │ │ │ │ │ ├── WtLogin15.kt │ │ │ │ │ │ ├── WtLogin2.kt │ │ │ │ │ │ ├── WtLogin20.kt │ │ │ │ │ │ ├── WtLogin7.kt │ │ │ │ │ │ ├── WtLogin8.kt │ │ │ │ │ │ ├── WtLogin9.kt │ │ │ │ │ │ └── WtLoginExt.kt │ │ │ │ │ ├── sso/ │ │ │ │ │ │ └── TRpcRawPacket.kt │ │ │ │ │ └── summarycard/ │ │ │ │ │ ├── FriendRemark.kt │ │ │ │ │ └── SummaryCard.kt │ │ │ │ └── qimei/ │ │ │ │ └── Qimei.kt │ │ │ ├── pipeline/ │ │ │ │ └── ProcessorPipeline.kt │ │ │ ├── spi/ │ │ │ │ └── EncryptService.kt │ │ │ └── utils/ │ │ │ ├── AtomicIntSeq.kt │ │ │ ├── BotConfigurationExt.kt │ │ │ ├── ExternalResourceImpl.kt │ │ │ ├── FileSystem.kt │ │ │ ├── FragmentedMsgParsingCache.kt │ │ │ ├── GuidSource.kt │ │ │ ├── ImagePatcher.kt │ │ │ ├── MiraiCoreServices.kt │ │ │ ├── MiraiProtocolInternal.kt │ │ │ ├── MiraiUtilsLogger.kt │ │ │ ├── NetworkType.kt │ │ │ ├── PlatformDatagramChannel.kt │ │ │ ├── PlatformSocket.kt │ │ │ ├── ScheduledJob.kt │ │ │ ├── SingleEntrantLock.kt │ │ │ ├── SubLogger.kt │ │ │ ├── collection.kt │ │ │ ├── crypto/ │ │ │ │ ├── AES.kt │ │ │ │ ├── Ecdh.kt │ │ │ │ ├── QQEcdh.kt │ │ │ │ ├── RSA.kt │ │ │ │ └── TEA.kt │ │ │ ├── flags.kt │ │ │ ├── io/ │ │ │ │ ├── ProtocolStruct.kt │ │ │ │ ├── output.kt │ │ │ │ └── serialization/ │ │ │ │ ├── tars/ │ │ │ │ │ ├── Tars.kt │ │ │ │ │ ├── TarsId.kt │ │ │ │ │ └── internal/ │ │ │ │ │ ├── TarsDecoder.kt │ │ │ │ │ ├── TarsInput.kt │ │ │ │ │ ├── TarsOld.kt │ │ │ │ │ └── TarsTag.kt │ │ │ │ └── utils.kt │ │ │ ├── numbers.kt │ │ │ ├── printStructure.kt │ │ │ ├── retryWithServers.kt │ │ │ ├── runCoroutineInPlace.kt │ │ │ ├── string.kt │ │ │ └── type.kt │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── services/ │ │ │ ├── net.mamoe.mirai.IMirai │ │ │ ├── net.mamoe.mirai.auth.DefaultBotAuthorizationFactory │ │ │ ├── net.mamoe.mirai.event.InternalGlobalEventChannelProvider │ │ │ ├── net.mamoe.mirai.internal.message.protocol.MessageProtocol │ │ │ ├── net.mamoe.mirai.message.data.InternalImageProtocol │ │ │ ├── net.mamoe.mirai.message.data.InternalShortVideoProtocol │ │ │ ├── net.mamoe.mirai.message.data.OfflineAudio$Factory │ │ │ └── net.mamoe.mirai.utils.InternalProtocolDataExchange │ │ └── emoji-pattern.regex │ ├── commonTest/ │ │ ├── kotlin/ │ │ │ ├── AbstractTestWithMiraiImpl.kt │ │ │ ├── BotFactoryTest.kt │ │ │ ├── MockBot.kt │ │ │ ├── PlatformUtilsTest.kt │ │ │ ├── ScheduledJobTest.kt │ │ │ ├── TypeConversionTest.kt │ │ │ ├── contact/ │ │ │ │ └── file/ │ │ │ │ └── AbsoluteFolderTest.kt │ │ │ ├── event/ │ │ │ │ ├── AbstractEventTest.kt │ │ │ │ ├── CancelScopeTest.kt │ │ │ │ ├── EventChannelFlowTest.kt │ │ │ │ ├── EventChannelTest.kt │ │ │ │ ├── EventTests.kt │ │ │ │ ├── NextEventTest.kt │ │ │ │ └── StepUtil.kt │ │ │ ├── message/ │ │ │ │ ├── CleanupRubbishMessageElementsTest.kt │ │ │ │ ├── ImageBuilderTest.kt │ │ │ │ ├── ImageReadingTest.kt │ │ │ │ ├── InternalImageProtocolImplTest.kt │ │ │ │ ├── RefineContextTest.kt │ │ │ │ ├── code/ │ │ │ │ │ └── TestMiraiCode.kt │ │ │ │ ├── data/ │ │ │ │ │ ├── AudioTest.kt │ │ │ │ │ ├── ContentEqualsTest.kt │ │ │ │ │ ├── ForwardRefineTest.kt │ │ │ │ │ ├── MessageReceiptTest.kt │ │ │ │ │ ├── MessageRefineTest.kt │ │ │ │ │ └── MessageSerializationTest.kt │ │ │ │ ├── protocol/ │ │ │ │ │ ├── MessageProtocolFacadeTest.kt │ │ │ │ │ └── impl/ │ │ │ │ │ ├── AbstractMessageProtocolTest.kt │ │ │ │ │ ├── CustomMessageProtocolTest.kt │ │ │ │ │ ├── EqualityAsserter.kt │ │ │ │ │ ├── FaceProtocolTest.kt │ │ │ │ │ ├── FileMessageProtocolTest.kt │ │ │ │ │ ├── FlashImageProtocolTest.kt │ │ │ │ │ ├── ForwardMessageProtocolTest.kt │ │ │ │ │ ├── GeneralMessageSenderProtocolTest.kt │ │ │ │ │ ├── ImageProtocolTest.kt │ │ │ │ │ ├── LongMessageProtocolTest.kt │ │ │ │ │ ├── MarketFaceProtocolTest.kt │ │ │ │ │ ├── MusicShareProtocolTest.kt │ │ │ │ │ ├── PokeMessageProtocolTest.kt │ │ │ │ │ ├── QuoteReplyProtocolTest.kt │ │ │ │ │ ├── RichMessageProtocolTest.kt │ │ │ │ │ ├── SuperFaceProtocolTest.kt │ │ │ │ │ ├── TextProtocolTest.kt │ │ │ │ │ └── VipFaceProtocolTest.kt │ │ │ │ └── serialization/ │ │ │ │ └── AbstractMessageSerializationTest.kt │ │ │ ├── network/ │ │ │ │ ├── AwaitStateTest.kt │ │ │ │ ├── PacketCodecTest.kt │ │ │ │ ├── ServerListTest.kt │ │ │ │ ├── auth/ │ │ │ │ │ ├── AbstractBotAuthTest.kt │ │ │ │ │ ├── AuthorizationReasonTest.kt │ │ │ │ │ └── BotAuthorizationTest.kt │ │ │ │ ├── component/ │ │ │ │ │ ├── AbstractMutableComponentStorageTest.kt │ │ │ │ │ ├── BotAuthControlTest.kt │ │ │ │ │ ├── BotInitProcessorTest.kt │ │ │ │ │ ├── CombinedStorageTest.kt │ │ │ │ │ └── EventDispatcherTest.kt │ │ │ │ ├── framework/ │ │ │ │ │ ├── AbstractCommonNHTest.kt │ │ │ │ │ ├── AbstractCommonNHTestWithSelector.kt │ │ │ │ │ ├── AbstractMockNetworkHandlerTest.kt │ │ │ │ │ ├── AbstractNetworkHandlerTest.kt │ │ │ │ │ ├── AbstractRealNetworkHandlerTest.kt │ │ │ │ │ ├── AbstractRealTimeActionTestUnit.kt │ │ │ │ │ ├── ITestNetworkHandler.kt │ │ │ │ │ ├── PacketReplier.kt │ │ │ │ │ ├── SynchronizedStdoutLogger.kt │ │ │ │ │ ├── TestNetworkHandler.kt │ │ │ │ │ ├── TestNetworkHandlerContext.kt │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── TestEventDispatcherImpl.kt │ │ │ │ │ │ ├── TestImagePatcher.kt │ │ │ │ │ │ └── TestSsoProcessor.kt │ │ │ │ │ ├── networkUtils.kt │ │ │ │ │ ├── sessionUtils.kt │ │ │ │ │ └── test/ │ │ │ │ │ └── FrameworkEventTest.kt │ │ │ │ ├── handler/ │ │ │ │ │ ├── KeepAliveNetworkHandlerSelectorTest.kt │ │ │ │ │ ├── SelectorHeartbeatRecoveryTest.kt │ │ │ │ │ ├── SelectorLoginRecoveryTest.kt │ │ │ │ │ ├── StandaloneSelectorTests.kt │ │ │ │ │ └── StateObserverTest.kt │ │ │ │ └── impl/ │ │ │ │ └── common/ │ │ │ │ ├── AccountSecretsTest.kt │ │ │ │ ├── BotLifecycleTest.kt │ │ │ │ ├── CommonNHAddressChangedTest.kt │ │ │ │ ├── CommonNHBotNormalLoginTest.kt │ │ │ │ ├── CommonNHEventTest.kt │ │ │ │ ├── ResumeConnectionTest.kt │ │ │ │ ├── SendPacketTest.kt │ │ │ │ └── SetStateTest.kt │ │ │ ├── notice/ │ │ │ │ └── processors/ │ │ │ │ ├── AbstractNoticeProcessorTest.kt │ │ │ │ ├── BotInvitedJoinTest.kt │ │ │ │ ├── FriendNickChangeTest.kt │ │ │ │ ├── GroupRetrieveTest.kt │ │ │ │ ├── GroupTransferTest.kt │ │ │ │ ├── MemberAdminChangeTest.kt │ │ │ │ ├── MemberJoinTest.kt │ │ │ │ ├── MemberQuitTest.kt │ │ │ │ ├── MessageSyncTest.kt │ │ │ │ ├── MessageTest.kt │ │ │ │ ├── MuteTest.kt │ │ │ │ └── RecallTest.kt │ │ │ ├── samples/ │ │ │ │ └── CustomMessageSamples.kt │ │ │ ├── test/ │ │ │ │ ├── events.kt │ │ │ │ ├── initPlatform.common.kt │ │ │ │ ├── printing.kt │ │ │ │ └── utils.kt │ │ │ ├── testFramework/ │ │ │ │ ├── DebugProbes.kt │ │ │ │ ├── DynamicTest.kt │ │ │ │ ├── Platform.kt │ │ │ │ ├── message/ │ │ │ │ │ └── TestMessageSourceSequenceIdAwaiter.kt │ │ │ │ ├── package.kt │ │ │ │ └── rules/ │ │ │ │ └── DisabledOnJvmLikePlatform.kt │ │ │ └── utils/ │ │ │ ├── FileSystemTest.kt │ │ │ ├── crypto/ │ │ │ │ ├── AESTest.kt │ │ │ │ ├── EcdhTest.kt │ │ │ │ └── RSATest.kt │ │ │ └── io/ │ │ │ └── serialization/ │ │ │ ├── ReadJceStructTest.kt │ │ │ └── tars/ │ │ │ └── internal/ │ │ │ └── DebugLoggerTest.kt │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── services/ │ │ │ └── net.mamoe.mirai.internal.message.source.MessageSourceSequenceIdAwaiter │ │ └── recording/ │ │ └── configs/ │ │ ├── desensitization.yml │ │ └── test.desensitization.yml │ ├── jvmBaseMain/ │ │ └── kotlin/ │ │ ├── MiraiImpl.kt │ │ ├── contact/ │ │ │ ├── GroupImpl.kt │ │ │ ├── active/ │ │ │ │ └── GroupActiveImpl.kt │ │ │ └── file/ │ │ │ └── AbsoluteFolderImpl.kt │ │ ├── message/ │ │ │ └── protocol/ │ │ │ └── impl/ │ │ │ └── TextProtocol.kt │ │ ├── network/ │ │ │ ├── component/ │ │ │ │ └── ComponentKey.kt │ │ │ ├── handler/ │ │ │ │ ├── NetworkHandlerFactory.kt │ │ │ │ ├── SocketAddress.kt │ │ │ │ └── selector/ │ │ │ │ └── SelectorRequireReconnectException.kt │ │ │ ├── impl/ │ │ │ │ ├── netty/ │ │ │ │ │ ├── NettyChannelException.kt │ │ │ │ │ ├── NettyNetworkHandler.kt │ │ │ │ │ ├── NettyNetworkHandlerFactory.kt │ │ │ │ │ └── nettyUtils.kt │ │ │ │ └── package.kt │ │ │ ├── package.kt │ │ │ └── protocol/ │ │ │ └── data/ │ │ │ └── richstatus/ │ │ │ └── RichStatus.kt │ │ ├── package.kt │ │ └── utils/ │ │ ├── BotConfigurationExt.kt │ │ ├── ExternalResourceImpl.kt │ │ ├── PlatformSocket.kt │ │ ├── RemoteFileImpl.kt │ │ └── crypto/ │ │ ├── AES.kt │ │ ├── JceEcdh.kt │ │ ├── JceEcdhWithProvider.kt │ │ ├── QQEcdhJvm.kt │ │ └── RSA.kt │ ├── jvmBaseTest/ │ │ ├── kotlin/ │ │ │ ├── event/ │ │ │ │ ├── EventChannelJavaTest.java │ │ │ │ ├── EventLaunchUndispatchedTest.kt │ │ │ │ ├── JvmMethodEventsTest.kt │ │ │ │ ├── JvmMethodEventsTestJava.kt │ │ │ │ └── SimpleListenerHostTestJava.kt │ │ │ ├── network/ │ │ │ │ ├── component/ │ │ │ │ │ ├── ComponentKeyTest.kt │ │ │ │ │ └── ConcurrentComponentStorageToStringTest.kt │ │ │ │ ├── framework/ │ │ │ │ │ ├── AbstractCommonNHTest.kt │ │ │ │ │ ├── AbstractNettyNHTest.kt │ │ │ │ │ └── NettyNHTestChannel.kt │ │ │ │ └── impl/ │ │ │ │ └── netty/ │ │ │ │ └── CommonNHUtilsTest.kt │ │ │ ├── package.kt │ │ │ ├── test/ │ │ │ │ ├── AbstractTest.kt │ │ │ │ └── NativeTestWrapper.kt │ │ │ ├── testFramework/ │ │ │ │ ├── DebugProbes.kt │ │ │ │ ├── DynamicTest.kt │ │ │ │ ├── codegen/ │ │ │ │ │ ├── RemoveDefaultValuesVisitor.kt │ │ │ │ │ ├── ValueDescAnalyzer.kt │ │ │ │ │ ├── descriptors/ │ │ │ │ │ │ ├── ClassValueDesc.kt │ │ │ │ │ │ ├── CollectionLikeValueDesc.kt │ │ │ │ │ │ ├── CollectionValueDesc.kt │ │ │ │ │ │ ├── MapValueDesc.kt │ │ │ │ │ │ ├── ObjectArrayValueDesc.kt │ │ │ │ │ │ ├── PlainValueDesc.kt │ │ │ │ │ │ ├── PrimitiveArrayValueDesc.kt │ │ │ │ │ │ └── ValueDesc.kt │ │ │ │ │ ├── test/ │ │ │ │ │ │ ├── IndenterTest.kt │ │ │ │ │ │ ├── OptimizeByteArrayAsHexStringTransformerTest.kt │ │ │ │ │ │ └── visitors/ │ │ │ │ │ │ ├── ValueDescAnalyzerTest.kt │ │ │ │ │ │ └── ValueDescToStringRendererTest.kt │ │ │ │ │ ├── visitor/ │ │ │ │ │ │ ├── ValueDescTransformer.kt │ │ │ │ │ │ ├── ValueDescVisitor.kt │ │ │ │ │ │ └── ValueDescVisitorUnit.kt │ │ │ │ │ └── visitors/ │ │ │ │ │ ├── AnalyzeDefaultValuesMappingVisitor.kt │ │ │ │ │ ├── ClassFormatter.kt │ │ │ │ │ ├── Indenter.kt │ │ │ │ │ ├── OptimizeByteArrayAsHexStringTransformer.kt │ │ │ │ │ └── ValueDescToStringRenderer.kt │ │ │ │ ├── desensitizer/ │ │ │ │ │ └── Desensitizer.kt │ │ │ │ ├── message/ │ │ │ │ │ └── protocol/ │ │ │ │ │ └── MessageDecodingRecorder.kt │ │ │ │ ├── notice/ │ │ │ │ │ └── RecordingNoticeHandler.kt │ │ │ │ ├── rules/ │ │ │ │ │ └── DisabledOnPlatform.kt │ │ │ │ └── test/ │ │ │ │ └── RecordingNoticeProcessorTest.kt │ │ │ └── utils/ │ │ │ ├── CombinedExternalResourceTest.kt │ │ │ ├── StructureToStringTransformerNew.kt │ │ │ └── test/ │ │ │ └── StructureToStringTransformerNewTest.kt │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── net.mamoe.mirai.utils.StructureToStringTransformer │ ├── jvmMain/ │ │ └── kotlin/ │ │ ├── package.kt │ │ └── utils/ │ │ └── crypto/ │ │ └── EcdhJvmDesktop.kt │ └── jvmTest/ │ ├── README.md │ ├── kotlin/ │ │ ├── AtomicResizeCacheListTest.kt │ │ ├── JavaApiTests.java │ │ ├── bootstrap/ │ │ │ ├── RunMessageDecodingRecorder.kt │ │ │ └── RunNoticeRecorder.kt │ │ ├── directboot/ │ │ │ ├── DebugRunHelper.kt │ │ │ └── envprepare.kt │ │ ├── netinternalkit/ │ │ │ ├── Ansi.kt │ │ │ ├── LogCapture.kt │ │ │ └── NetReplayHelper.kt │ │ ├── package.kt │ │ ├── test/ │ │ │ └── initializeTestJvm.kt │ │ └── testFramework/ │ │ └── currentPlatform.kt │ └── resources/ │ └── account.yml ├── mirai-core-all/ │ └── build.gradle.kts ├── mirai-core-api/ │ ├── README.md │ ├── build.gradle.kts │ ├── compatibility-validation/ │ │ ├── android/ │ │ │ └── api/ │ │ │ └── android.api │ │ └── jvm/ │ │ └── api/ │ │ └── jvm.api │ └── src/ │ ├── androidMain/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ ├── package.kt │ │ └── utils/ │ │ ├── LoginSolver.android.kt │ │ ├── PlatformLogger.android.kt │ │ └── SingleFileLogger.android.kt │ ├── commonMain/ │ │ └── kotlin/ │ │ ├── Bot.kt │ │ ├── BotFactory.kt │ │ ├── IMirai.kt │ │ ├── LowLevelApiAccessor.kt │ │ ├── auth/ │ │ │ ├── BotAuthorization.kt │ │ │ └── QRCodeLoginListener.kt │ │ ├── contact/ │ │ │ ├── AnonymousMember.kt │ │ │ ├── AudioSupported.kt │ │ │ ├── AvatarSpec.kt │ │ │ ├── Contact.kt │ │ │ ├── ContactList.kt │ │ │ ├── ContactOrBot.kt │ │ │ ├── Exceptions.kt │ │ │ ├── FileSupported.kt │ │ │ ├── Friend.kt │ │ │ ├── Group.kt │ │ │ ├── Member.kt │ │ │ ├── MemberPermission.kt │ │ │ ├── NormalMember.kt │ │ │ ├── OtherClient.kt │ │ │ ├── Stranger.kt │ │ │ ├── TempUser.kt │ │ │ ├── User.kt │ │ │ ├── UserOrBot.kt │ │ │ ├── active/ │ │ │ │ ├── ActiveChart.kt │ │ │ │ ├── ActiveHonorInfo.kt │ │ │ │ ├── ActiveHonorList.kt │ │ │ │ ├── ActiveRankRecord.kt │ │ │ │ ├── ActiveRecord.kt │ │ │ │ ├── GroupActive.kt │ │ │ │ ├── MemberActive.kt │ │ │ │ ├── MemberMedalInfo.kt │ │ │ │ └── MemberMedalType.kt │ │ │ ├── announcement/ │ │ │ │ ├── Announcement.kt │ │ │ │ ├── AnnouncementImage.kt │ │ │ │ ├── AnnouncementParameters.kt │ │ │ │ ├── AnnouncementParametersBuilder.kt │ │ │ │ ├── Announcements.kt │ │ │ │ ├── OfflineAnnouncement.kt │ │ │ │ └── OnlineAnnouncement.kt │ │ │ ├── essence/ │ │ │ │ ├── EssenceMessageRecord.kt │ │ │ │ └── Essences.kt │ │ │ ├── file/ │ │ │ │ ├── AbsoluteFile.kt │ │ │ │ ├── AbsoluteFileFolder.kt │ │ │ │ ├── AbsoluteFolder.kt │ │ │ │ └── RemoteFiles.kt │ │ │ ├── friendgroup/ │ │ │ │ ├── FriendGroup.kt │ │ │ │ └── FriendGroups.kt │ │ │ └── roaming/ │ │ │ ├── RoamingMessageFilter.kt │ │ │ ├── RoamingMessages.kt │ │ │ └── RoamingSupported.kt │ │ ├── data/ │ │ │ ├── FriendInfo.kt │ │ │ ├── GroupHonorType.kt │ │ │ ├── GroupInfo.kt │ │ │ ├── MemberInfo.kt │ │ │ ├── OnlineStatus.kt │ │ │ ├── Profile.kt │ │ │ ├── RequestEventData.kt │ │ │ ├── StrangerInfo.kt │ │ │ ├── UserInfo.kt │ │ │ └── UserProfile.kt │ │ ├── event/ │ │ │ ├── Event.kt │ │ │ ├── EventChannel.kt │ │ │ ├── EventChannelKotlinExtensions.kt │ │ │ ├── ExceptionInEventChannelFilterException.kt │ │ │ ├── Extensions.kt │ │ │ ├── GlobalEventChannel.kt │ │ │ ├── JvmMethodListeners.kt │ │ │ ├── Listener.kt │ │ │ ├── MessageSelectBuilderUnit.kt │ │ │ ├── MessageSubscribersBuilder.kt │ │ │ ├── deprecated.nextEvent.kt │ │ │ ├── deprecated.nextEventAsync.kt │ │ │ ├── deprecated.syncFromEvent.kt │ │ │ ├── events/ │ │ │ │ ├── EventCancelledException.kt │ │ │ │ ├── ImageUploadEvent.kt │ │ │ │ ├── MessageEvent.kt │ │ │ │ ├── MessagePostSendEvent.kt │ │ │ │ ├── MessagePreSendEvent.kt │ │ │ │ ├── MessageRecallEvent.kt │ │ │ │ ├── MessageSyncEvent.kt │ │ │ │ ├── NudgeEvent.kt │ │ │ │ ├── ShortVideoUploadEvent.kt │ │ │ │ ├── SignEvent.kt │ │ │ │ ├── bot.kt │ │ │ │ ├── friend.kt │ │ │ │ ├── group.kt │ │ │ │ ├── otherClient.kt │ │ │ │ ├── stranger.kt │ │ │ │ └── types.kt │ │ │ ├── select.kt │ │ │ └── subscribeMessages.kt │ │ ├── internal/ │ │ │ ├── event/ │ │ │ │ ├── JvmMethodListenersInternal.kt │ │ │ │ ├── VerboseEvent.kt │ │ │ │ └── messageSubscribersInternal.kt │ │ │ ├── message/ │ │ │ │ ├── AbstractPolymorphicSerializer.kt │ │ │ │ └── MessageSerializersImpl.kt │ │ │ ├── network/ │ │ │ │ └── Packet.kt │ │ │ └── utils/ │ │ │ ├── ExternalResourceImpls.kt │ │ │ ├── ExternalResourceLeakObserver.kt │ │ │ ├── LoggerAdapterImpls.kt │ │ │ ├── MarkedMiraiLogger.kt │ │ │ ├── Marker.kt │ │ │ └── StdoutLogger.kt │ │ ├── message/ │ │ │ ├── MessageReceipt.kt │ │ │ ├── MessageSerializers.kt │ │ │ ├── action/ │ │ │ │ ├── AsyncRecallResult.kt │ │ │ │ └── Nudge.kt │ │ │ ├── code/ │ │ │ │ ├── CodableMessage.kt │ │ │ │ ├── MiraiCode.kt │ │ │ │ └── internal/ │ │ │ │ └── impl.kt │ │ │ ├── data/ │ │ │ │ ├── At.kt │ │ │ │ ├── AtAll.kt │ │ │ │ ├── Audio.kt │ │ │ │ ├── CombinedMessage.kt │ │ │ │ ├── ConstrainSingle.kt │ │ │ │ ├── CustomMessage.kt │ │ │ │ ├── Deprecated.kt │ │ │ │ ├── Dice.kt │ │ │ │ ├── Face.kt │ │ │ │ ├── FileMessage.kt │ │ │ │ ├── FlashImage.kt │ │ │ │ ├── ForwardMessage.kt │ │ │ │ ├── HummerMessage.kt │ │ │ │ ├── Image.kt │ │ │ │ ├── MarketFace.kt │ │ │ │ ├── Message.kt │ │ │ │ ├── MessageChain.kt │ │ │ │ ├── MessageChainBuilder.kt │ │ │ │ ├── MessageKey.kt │ │ │ │ ├── MessageOrigin.kt │ │ │ │ ├── MessageSource.kt │ │ │ │ ├── MessageSourceBuilder.kt │ │ │ │ ├── MusicShare.kt │ │ │ │ ├── OfflineMessageSource.kt │ │ │ │ ├── OnlineMessageSource.kt │ │ │ │ ├── PlainText.kt │ │ │ │ ├── PokeMessage.kt │ │ │ │ ├── QuoteReply.kt │ │ │ │ ├── README.md │ │ │ │ ├── RichMessage.kt │ │ │ │ ├── RockPaperScissors.kt │ │ │ │ ├── ShortVideo.kt │ │ │ │ ├── ShowImageFlag.kt │ │ │ │ ├── SingleMessage.kt │ │ │ │ ├── SuperFace.kt │ │ │ │ ├── UnsupportedMessage.kt │ │ │ │ ├── VipFace.kt │ │ │ │ ├── Voice.kt │ │ │ │ ├── impl.kt │ │ │ │ └── visitor/ │ │ │ │ └── MessageVisitor.kt │ │ │ └── utils.kt │ │ ├── network/ │ │ │ ├── ForceOfflineException.kt │ │ │ └── LoginFailedException.kt │ │ ├── spi/ │ │ │ ├── AudioToSilkService.kt │ │ │ └── SPIServiceLoader.kt │ │ └── utils/ │ │ ├── AbstractBotConfiguration.kt │ │ ├── AbstractExternalResource.kt │ │ ├── Annotations.kt │ │ ├── BotConfiguration.kt │ │ ├── DeviceInfo.kt │ │ ├── DeviceInfoBuilder.kt │ │ ├── DeviceInfoManager.kt │ │ ├── DeviceInfoV1LegacySerializer.kt │ │ ├── ExternalResource.kt │ │ ├── FileCacheStrategy.kt │ │ ├── FileLogger.kt │ │ ├── LoggerAdapters.kt │ │ ├── LoginSolver.kt │ │ ├── MiraiLogger.kt │ │ ├── MiraiLoggerFactoryImplementationBridge.kt │ │ ├── MiraiUtilsLogger.kt │ │ ├── OverFileSizeMaxException.kt │ │ ├── ProgressionCallback.kt │ │ ├── RemoteFile.kt │ │ ├── SingleFileLogger.kt │ │ └── Streamable.kt │ ├── commonTest/ │ │ ├── kotlin/ │ │ │ ├── logging/ │ │ │ │ ├── AbstractLoggingTest.kt │ │ │ │ ├── Log4j2LoggingTest.kt │ │ │ │ └── LoggingCompatibilityTest.kt │ │ │ ├── message.data/ │ │ │ │ ├── CombinedMessageTest.kt │ │ │ │ ├── ConstrainSingleHelperTest.kt │ │ │ │ ├── ConstrainSingleTest.kt │ │ │ │ ├── ImageTest.kt │ │ │ │ ├── LinearMessageChainImplTest.kt │ │ │ │ ├── MessageChainBuilderTest.kt │ │ │ │ ├── MessageChainImmutableTest.kt │ │ │ │ ├── MessageChainImplTest.kt │ │ │ │ ├── MessageKeyTest.kt │ │ │ │ ├── MessageUtilsTest.kt │ │ │ │ ├── MessageVisitorTest.kt │ │ │ │ └── TestMessageChainDelegate.kt │ │ │ ├── package.kt │ │ │ ├── test/ │ │ │ │ └── TestDSL.kt │ │ │ └── utils/ │ │ │ ├── DeviceInfoTest.kt │ │ │ ├── JvmDeviceInfoTest.kt │ │ │ └── TimeTest.kt │ │ └── resources/ │ │ └── log4j.properties │ ├── jvmMain/ │ │ └── kotlin/ │ │ ├── package.kt │ │ └── utils/ │ │ ├── LoginSolver.TxCaptchaHelper.kt │ │ ├── LoginSolver.jvm.kt │ │ ├── PlatformLogger.jvm.kt │ │ └── SingleFileLogger.jvm.kt │ └── jvmTest/ │ └── kotlin/ │ ├── message/ │ │ └── data/ │ │ └── MessageChainImmutableTestJdk8.kt │ └── package.kt ├── mirai-core-mock/ │ ├── README.md │ ├── build.gradle.kts │ ├── src/ │ │ ├── MockActions.kt │ │ ├── MockBot.kt │ │ ├── MockBotDSL.kt │ │ ├── MockBotFactory.kt │ │ ├── contact/ │ │ │ ├── MockAnonymousMember.kt │ │ │ ├── MockContact.kt │ │ │ ├── MockContactOrBot.kt │ │ │ ├── MockFriend.kt │ │ │ ├── MockGroup.kt │ │ │ ├── MockGroupControlPane.kt │ │ │ ├── MockMember.kt │ │ │ ├── MockMsgSyncSupport.kt │ │ │ ├── MockNormalMember.kt │ │ │ ├── MockOtherClient.kt │ │ │ ├── MockStranger.kt │ │ │ ├── MockUser.kt │ │ │ ├── MockUserOrBot.kt │ │ │ ├── active/ │ │ │ │ ├── MockGroupActive.kt │ │ │ │ └── MockMemberActive.kt │ │ │ ├── announcement/ │ │ │ │ └── MockAnnouncements.kt │ │ │ └── essence/ │ │ │ └── MockEssences.kt │ │ ├── database/ │ │ │ └── MessageDatabase.kt │ │ ├── internal/ │ │ │ ├── MockBotFactoryImpl.kt │ │ │ ├── MockBotImpl.kt │ │ │ ├── MockMiraiImpl.kt │ │ │ ├── components/ │ │ │ │ └── MockEventDispatcherImpl.kt │ │ │ ├── contact/ │ │ │ │ ├── AbstractMockContact.kt │ │ │ │ ├── MockAnnouncementsImpl.kt │ │ │ │ ├── MockAnonymousMemberImpl.kt │ │ │ │ ├── MockFriendImpl.kt │ │ │ │ ├── MockGroupImpl.kt │ │ │ │ ├── MockNormalMemberImpl.kt │ │ │ │ ├── MockStrangerImpl.kt │ │ │ │ ├── active/ │ │ │ │ │ ├── MockGroupActive.kt │ │ │ │ │ └── MockMemberActiveImpl.kt │ │ │ │ ├── essence/ │ │ │ │ │ └── MockEssences.kt │ │ │ │ ├── friendfroup/ │ │ │ │ │ ├── MockFriendGroup.kt │ │ │ │ │ └── MockFriendGroups.kt │ │ │ │ ├── roaming/ │ │ │ │ │ └── MockRoamingMessages.kt │ │ │ │ └── util.kt │ │ │ ├── contactbase/ │ │ │ │ ├── ContactDatabase.kt │ │ │ │ └── ContactInfo.kt │ │ │ ├── db/ │ │ │ │ └── MsgDatabaseImpl.kt │ │ │ ├── msgsrc/ │ │ │ │ └── OnlineMsgSrc.kt │ │ │ ├── remotefile/ │ │ │ │ ├── absolutefile/ │ │ │ │ │ ├── MockAbsoluteFile.kt │ │ │ │ │ ├── MockAbsoluteFolder.kt │ │ │ │ │ └── MockRemoteFiles.kt │ │ │ │ └── remotefile/ │ │ │ │ └── MockRemoteFile.kt │ │ │ └── serverfs/ │ │ │ ├── MockServerFileDiskImpl.kt │ │ │ └── TmpResourceServerImpl.kt │ │ ├── package.kt │ │ ├── resserver/ │ │ │ ├── MockServerFileDisk.kt │ │ │ ├── MockServerFileSystem.kt │ │ │ ├── MockServerRemoteFile.kt │ │ │ └── TmpResourceServer.kt │ │ ├── userprofile/ │ │ │ ├── UserProfileService.kt │ │ │ └── contactinfos.kt │ │ └── utils/ │ │ ├── AvatarGenerator.kt │ │ ├── MemberInfo.kt │ │ ├── MockActionsScope.kt │ │ ├── MockConversions.kt │ │ ├── NameGenerator.kt │ │ ├── NudgeDsl.kt │ │ ├── event.kt │ │ ├── http.kt │ │ ├── image.kt │ │ └── mockdsl.kt │ └── test/ │ ├── AbsoluteFileTest.kt │ ├── DslTest.kt │ ├── FsServerTest.kt │ ├── ImageUploadTest.kt │ ├── MockBotTestBase.kt │ ├── MsgDbTest.kt │ ├── TestBase.kt │ ├── TxFsDiskTest.kt │ ├── mock/ │ │ ├── MessageSerializationTest.kt │ │ ├── MessagingTest.kt │ │ ├── MockBotBaseTest.kt │ │ ├── MockBotEventTest.kt │ │ ├── MockFriendGroupsTest.kt │ │ ├── MockFriendTest.kt │ │ ├── MockGroupTest.kt │ │ ├── MockMemberTest.kt │ │ └── MockStrangerTest.kt │ └── package.kt ├── mirai-core-utils/ │ ├── README.md │ ├── build.gradle.kts │ └── src/ │ ├── androidInstrumentedTest/ │ │ └── kotlin/ │ │ └── AndroidUnwrapTest.kt │ ├── androidMain/ │ │ ├── AndroidManifest.xml │ │ └── kotlin/ │ │ └── Actuals.kt │ ├── commonMain/ │ │ └── kotlin/ │ │ ├── Annotations.kt │ │ ├── Arrays.kt │ │ ├── AtomicInteger.kt │ │ ├── Base64.kt │ │ ├── ByteArrayOp.kt │ │ ├── ByteArrayPool.kt │ │ ├── Bytes.kt │ │ ├── CheckableResult.kt │ │ ├── Clock.kt │ │ ├── Closeable.kt │ │ ├── CollectionDiff.kt │ │ ├── Collections.kt │ │ ├── Conversions.kt │ │ ├── CoroutineUtils.kt │ │ ├── Either.kt │ │ ├── ExceptionCollector.kt │ │ ├── File.kt │ │ ├── Files.kt │ │ ├── HtmlEntity.kt │ │ ├── IO.kt │ │ ├── JsonStruct.kt │ │ ├── LateinitMutableProperty.kt │ │ ├── Numbers.kt │ │ ├── RandomUtils.kt │ │ ├── Resources.kt │ │ ├── ResultExtensions.kt │ │ ├── SecretsProtection.kt │ │ ├── Serialization.kt │ │ ├── Services.kt │ │ ├── SizedCache.kt │ │ ├── StandardUtils.kt │ │ ├── Strings.kt │ │ ├── StructureToStringTransformer.kt │ │ ├── Symbol.kt │ │ ├── TimeUtils.kt │ │ ├── TlvMap.kt │ │ ├── TypeSafeMap.kt │ │ ├── UnsafeMutableNonNullProperty.kt │ │ ├── UtilsLogger.kt │ │ ├── annotations/ │ │ │ └── Range.kt │ │ ├── channels/ │ │ │ ├── ChannelState.kt │ │ │ ├── IllegalChannelStateException.kt │ │ │ ├── OnDemandChannelImpl.kt │ │ │ ├── OnDemandSendChannel.kt │ │ │ └── ProducerFailureException.kt │ │ ├── package.kt │ │ └── systemProp.kt │ ├── commonTest/ │ │ └── kotlin/ │ │ └── net/ │ │ └── mamoe/ │ │ └── mirai/ │ │ └── utils/ │ │ ├── CommonByteArrayOpTest.kt │ │ ├── EitherTest.kt │ │ ├── ExceptionCollectorTest.kt │ │ ├── ExternalImageTest.kt │ │ ├── HexToBytesTest.kt │ │ ├── HtmlEscapeTest.kt │ │ ├── ImageIdConversionTest.kt │ │ ├── LateinitMutablePropertyTest.kt │ │ ├── ResourceAccessLockTest.kt │ │ ├── SizedCacheTest.kt │ │ ├── TlvMapTest.kt │ │ ├── TrySafelyTest.kt │ │ ├── TypeSafeMapTest.kt │ │ ├── channels/ │ │ │ └── OnDemandChannelTest.kt │ │ └── testFramework/ │ │ └── AssertNoCoroutineSuspension.kt │ ├── jvmBaseMain/ │ │ └── kotlin/ │ │ ├── ByteArrayOp.kt │ │ ├── Clock.kt │ │ ├── Closeable.kt │ │ ├── Collections.kt │ │ ├── ConcurrentLinkedQueue.kt │ │ ├── CoroutineUtils.kt │ │ ├── ExceptionCollector.kt │ │ ├── Files.kt │ │ ├── IO.jvm.shared.kt │ │ ├── JvmNioBuffer.kt │ │ ├── MiraiFile.kt │ │ ├── Reflections.kt │ │ ├── Resources.kt │ │ ├── SecretsProtection.kt │ │ ├── Serialization.kt │ │ ├── Services.kt │ │ ├── StandardUtils.kt │ │ ├── Streams.kt │ │ ├── StructureToStringTransformer.kt │ │ ├── StructureToStringTransformerLegacy.kt │ │ ├── ThreadLocal.kt │ │ ├── TimeUtils.kt │ │ ├── WeakRef.kt │ │ ├── annotations/ │ │ │ └── Range.kt │ │ ├── package.kt │ │ └── systemProp.kt │ ├── jvmBaseTest/ │ │ └── kotlin/ │ │ ├── ByteArrayOpTest.kt │ │ ├── KotlinFlowToJdkStreamTest.kt │ │ ├── LateinitMutablePropertyTestJvm.kt │ │ └── package.kt │ ├── jvmMain/ │ │ └── kotlin/ │ │ ├── Actuals.kt │ │ └── IO.jvm.kt │ └── jvmTest/ │ └── kotlin/ │ ├── AndroidUnwrapTest.kt │ └── SecretsProtectionTest.kt ├── mirai-deps-test/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle.kts │ ├── gradle.properties │ └── test/ │ ├── AbstractTest.kt │ ├── CoreDependencyResolutionTest.kt │ ├── CoreShadowRelocationTest.kt │ └── package.kt ├── mirai-dokka/ │ ├── .gitignore │ ├── README.md │ ├── build.gradle.kts │ ├── frontend/ │ │ └── ext.js │ └── src/ │ ├── BuildVersionList.kt │ ├── DeployToGitHub.kt │ ├── Prepare.kt │ └── system.kt └── settings.gradle.kts