Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Mirai
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Mirai
Commits
90c0c5c5
Commit
90c0c5c5
authored
May 10, 2020
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Optimize experimental API usages
parent
90451366
Changes
78
Hide whitespace changes
Inline
Side-by-side
Showing
78 changed files
with
93 additions
and
237 deletions
+93
-237
compatibility-validator/src/test/kotlin/compatibility/CombinedMessageTest.kt
...ator/src/test/kotlin/compatibility/CombinedMessageTest.kt
+1
-1
mirai-core-qqandroid/build.gradle.kts
mirai-core-qqandroid/build.gradle.kts
+7
-0
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
...androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
+0
-2
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.android.kt
.../kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.android.kt
+0
-1
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/utils/cryptor/ECDHAndroid.kt
...in/net/mamoe/mirai/qqandroid/utils/cryptor/ECDHAndroid.kt
+0
-1
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/BotAccount.kt
...commonMain/kotlin/net/mamoe/mirai/qqandroid/BotAccount.kt
+1
-3
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.common.kt
...n/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.common.kt
+1
-4
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/FriendImpl.kt
...in/kotlin/net/mamoe/mirai/qqandroid/contact/FriendImpl.kt
+1
-2
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/GroupImpl.kt
...ain/kotlin/net/mamoe/mirai/qqandroid/contact/GroupImpl.kt
+0
-8
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/MemberImpl.kt
...in/kotlin/net/mamoe/mirai/qqandroid/contact/MemberImpl.kt
+5
-2
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/util.kt
...mmonMain/kotlin/net/mamoe/mirai/qqandroid/contact/util.kt
+0
-5
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/convension.kt
...in/kotlin/net/mamoe/mirai/qqandroid/message/convension.kt
+0
-2
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
...moe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
+4
-6
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt
...tlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt
+0
-3
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/HighwayHelper.kt
...et/mamoe/mirai/qqandroid/network/highway/HighwayHelper.kt
+3
-6
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/highway.kt
...tlin/net/mamoe/mirai/qqandroid/network/highway/highway.kt
+1
-3
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/EncryptMethod.kt
.../mirai/qqandroid/network/protocol/packet/EncryptMethod.kt
+0
-1
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/OutgoingPacketAndroid.kt
...qandroid/network/protocol/packet/OutgoingPacketAndroid.kt
+2
-5
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt
.../mirai/qqandroid/network/protocol/packet/PacketFactory.kt
+0
-6
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt
.../net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt
+4
-5
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/MultiMsg.kt
.../mirai/qqandroid/network/protocol/packet/chat/MultiMsg.kt
+1
-4
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt
...twork/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt
+10
-22
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.PbPushTransMsg.kt
...protocol/packet/chat/receive/OnlinePush.PbPushTransMsg.kt
+1
-1
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.ReqPush.kt
...etwork/protocol/packet/chat/receive/OnlinePush.ReqPush.kt
+0
-2
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/StatSvc.kt
.../mirai/qqandroid/network/protocol/packet/login/StatSvc.kt
+1
-2
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/WtLogin.kt
.../mirai/qqandroid/network/protocol/packet/login/WtLogin.kt
+0
-7
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/byteArrays.kt
...Main/kotlin/net/mamoe/mirai/qqandroid/utils/byteArrays.kt
+0
-4
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/io/input.kt
...onMain/kotlin/net/mamoe/mirai/qqandroid/utils/io/input.kt
+0
-2
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/io/output.kt
...nMain/kotlin/net/mamoe/mirai/qqandroid/utils/io/output.kt
+1
-2
mirai-core-qqandroid/src/commonTest/kotlin/net.mamoe.mirai.qqandroid/utils/PlatformUtilsTest.kt
...tlin/net.mamoe.mirai.qqandroid/utils/PlatformUtilsTest.kt
+0
-2
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
...src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
+0
-1
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.jvm.kt
...Main/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.jvm.kt
+1
-3
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/utils/PlatformSocket.kt
.../kotlin/net/mamoe/mirai/qqandroid/utils/PlatformSocket.kt
+0
-1
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/utils/cryptor/ECDHJvm.kt
...kotlin/net/mamoe/mirai/qqandroid/utils/cryptor/ECDHJvm.kt
+0
-1
mirai-core/build.gradle.kts
mirai-core/build.gradle.kts
+7
-0
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/BotJavaFriendlyAPI.kt
.../androidMain/kotlin/net/mamoe/mirai/BotJavaFriendlyAPI.kt
+1
-2
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/contact/Member.kt
.../src/androidMain/kotlin/net/mamoe/mirai/contact/Member.kt
+0
-1
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt
...droidMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt
+0
-1
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/ExternalImage.android.kt
...ain/kotlin/net/mamoe/mirai/utils/ExternalImage.android.kt
+0
-1
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.android.kt
.../kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.android.kt
+0
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
+0
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
+1
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Group.kt
...re/src/commonMain/kotlin/net.mamoe.mirai/contact/Group.kt
+4
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Member.kt
...e/src/commonMain/kotlin/net.mamoe.mirai/contact/Member.kt
+1
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/Event.kt
...core/src/commonMain/kotlin/net.mamoe.mirai/event/Event.kt
+0
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/deprecated.kt
...src/commonMain/kotlin/net.mamoe.mirai/event/deprecated.kt
+0
-5
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
...mmonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
+0
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/types.kt
...c/commonMain/kotlin/net.mamoe.mirai/event/events/types.kt
+0
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/internal/InternalEventListeners.kt
.../net.mamoe.mirai/event/internal/InternalEventListeners.kt
+4
-5
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/select.kt
...ore/src/commonMain/kotlin/net.mamoe.mirai/event/select.kt
+0
-3
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt
...monMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt
+1
-5
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscriberDeprecated.kt
...Main/kotlin/net.mamoe.mirai/event/subscriberDeprecated.kt
+0
-5
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessageReceipt.kt
...mmonMain/kotlin/net.mamoe.mirai/message/MessageReceipt.kt
+0
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/CombinedMessage.kt
...in/kotlin/net.mamoe.mirai/message/data/CombinedMessage.kt
+2
-3
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/CustomMessage.kt
...Main/kotlin/net.mamoe.mirai/message/data/CustomMessage.kt
+0
-3
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/ForwardMessage.kt
...ain/kotlin/net.mamoe.mirai/message/data/ForwardMessage.kt
+0
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/HummerMessage.kt
...Main/kotlin/net.mamoe.mirai/message/data/HummerMessage.kt
+3
-7
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Image.kt
...c/commonMain/kotlin/net.mamoe.mirai/message/data/Image.kt
+0
-4
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Message.kt
...commonMain/kotlin/net.mamoe.mirai/message/data/Message.kt
+0
-7
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt
...nMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt
+0
-4
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChainBuilder.kt
...otlin/net.mamoe.mirai/message/data/MessageChainBuilder.kt
+0
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageSource.kt
...Main/kotlin/net.mamoe.mirai/message/data/MessageSource.kt
+2
-6
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/QuoteReply.kt
...monMain/kotlin/net.mamoe.mirai/message/data/QuoteReply.kt
+0
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/RichMessage.kt
...onMain/kotlin/net.mamoe.mirai/message/data/RichMessage.kt
+1
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/impl.kt
...rc/commonMain/kotlin/net.mamoe.mirai/message/data/impl.kt
+1
-7
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/BotNetworkHandler.kt
...nMain/kotlin/net.mamoe.mirai/network/BotNetworkHandler.kt
+1
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/BotConfiguration.kt
...mmonMain/kotlin/net.mamoe.mirai/utils/BotConfiguration.kt
+0
-3
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/DeviceInfo.kt
...src/commonMain/kotlin/net.mamoe.mirai/utils/DeviceInfo.kt
+0
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/internal/DeferredReusableInput.common.kt
...amoe.mirai/utils/internal/DeferredReusableInput.common.kt
+1
-2
mirai-core/src/commonTest/kotlin/net/mamoe/mirai/message.data/CombinedMessageTest.kt
...otlin/net/mamoe/mirai/message.data/CombinedMessageTest.kt
+1
-2
mirai-core/src/commonTest/kotlin/net/mamoe/mirai/message.data/ConstrainSingleTest.kt
...otlin/net/mamoe/mirai/message.data/ConstrainSingleTest.kt
+2
-5
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/FileCacheStrategy.jvm.kt
...ain/kotlin/net/mamoe/mirai/utils/FileCacheStrategy.jvm.kt
+0
-1
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt
...c/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt
+1
-1
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt
.../jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt
+0
-1
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/DeferredReusableInput.jvm.kt
...t/mamoe/mirai/utils/internal/DeferredReusableInput.jvm.kt
+1
-1
mirai-core/src/jvmTest/kotlin/net/mamoe/mirai/event/EventTests.kt
...re/src/jvmTest/kotlin/net/mamoe/mirai/event/EventTests.kt
+0
-1
mirai-core/src/jvmTest/kotlin/net/mamoe/mirai/event/JvmMethodEventsTest.kt
...mTest/kotlin/net/mamoe/mirai/event/JvmMethodEventsTest.kt
+12
-2
mirai-core/src/jvmTest/kotlin/net/mamoe/mirai/utils/LockFreeLinkedListTest.kt
...st/kotlin/net/mamoe/mirai/utils/LockFreeLinkedListTest.kt
+1
-3
No files found.
compatibility-validator/src/test/kotlin/compatibility/CombinedMessageTest.kt
View file @
90c0c5c5
...
@@ -5,7 +5,7 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
...
@@ -5,7 +5,7 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
@OptIn
(
MiraiInternalAPI
::
class
)
internal
class
CombinedMessageTest
{
internal
class
CombinedMessageTest
{
...
...
mirai-core-qqandroid/build.gradle.kts
View file @
90c0c5c5
...
@@ -40,6 +40,13 @@ kotlin {
...
@@ -40,6 +40,13 @@ kotlin {
all
{
all
{
languageSettings
.
enableLanguageFeature
(
"InlineClasses"
)
languageSettings
.
enableLanguageFeature
(
"InlineClasses"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.Experimental"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.Experimental"
)
languageSettings
.
useExperimentalAnnotation
(
"net.mamoe.mirai.utils.MiraiInternalAPI"
)
languageSettings
.
useExperimentalAnnotation
(
"net.mamoe.mirai.utils.MiraiExperimentalAPI"
)
languageSettings
.
useExperimentalAnnotation
(
"net.mamoe.mirai.LowLevelAPI"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.ExperimentalUnsignedTypes"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.experimental.ExperimentalTypeInference"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.time.ExperimentalTime"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.contracts.ExperimentalContracts"
)
languageSettings
.
progressiveMode
=
true
languageSettings
.
progressiveMode
=
true
dependencies
{
dependencies
{
...
...
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
View file @
90c0c5c5
...
@@ -22,7 +22,6 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
...
@@ -22,7 +22,6 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
*/
*/
@Suppress
(
"INAPPLICABLE_JVM_NAME"
)
@Suppress
(
"INAPPLICABLE_JVM_NAME"
)
actual
object
QQAndroid
:
BotFactory
{
actual
object
QQAndroid
:
BotFactory
{
@OptIn
(
MiraiInternalAPI
::
class
)
@JvmName
(
"newBot"
)
@JvmName
(
"newBot"
)
actual
override
fun
Bot
(
context
:
Context
,
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
):
Bot
{
actual
override
fun
Bot
(
context
:
Context
,
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
):
Bot
{
return
QQAndroidBot
(
context
,
BotAccount
(
qq
,
password
),
configuration
)
return
QQAndroidBot
(
context
,
BotAccount
(
qq
,
password
),
configuration
)
...
@@ -31,7 +30,6 @@ actual object QQAndroid : BotFactory {
...
@@ -31,7 +30,6 @@ actual object QQAndroid : BotFactory {
/**
/**
* 使用指定的 [配置][configuration] 构造 [Bot] 实例
* 使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
@JvmName
(
"newBot"
)
@JvmName
(
"newBot"
)
actual
override
fun
Bot
(
actual
override
fun
Bot
(
context
:
Context
,
context
:
Context
,
...
...
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.android.kt
View file @
90c0c5c5
...
@@ -21,7 +21,6 @@ import net.mamoe.mirai.qqandroid.utils.toReadPacket
...
@@ -21,7 +21,6 @@ import net.mamoe.mirai.qqandroid.utils.toReadPacket
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
java.nio.ByteBuffer
import
java.nio.ByteBuffer
@OptIn
(
MiraiInternalAPI
::
class
)
@Suppress
(
"DEPRECATION"
)
@Suppress
(
"DEPRECATION"
)
internal
actual
fun
ByteReadChannel
.
toKotlinByteReadChannel
():
kotlinx
.
coroutines
.
io
.
ByteReadChannel
{
internal
actual
fun
ByteReadChannel
.
toKotlinByteReadChannel
():
kotlinx
.
coroutines
.
io
.
ByteReadChannel
{
return
object
: kotlinx.coroutines.io.
ByteReadChannel
{
return
object
: kotlinx.coroutines.io.
ByteReadChannel
{
...
...
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/utils/cryptor/ECDHAndroid.kt
View file @
90c0c5c5
...
@@ -85,7 +85,6 @@ internal actual class ECDH actual constructor(actual val keyPair: ECDHKeyPair) {
...
@@ -85,7 +85,6 @@ internal actual class ECDH actual constructor(actual val keyPair: ECDHKeyPair) {
.
genKeyPair
())
.
genKeyPair
())
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
actual
fun
calculateShareKey
(
actual
fun
calculateShareKey
(
privateKey
:
ECDHPrivateKey
,
privateKey
:
ECDHPrivateKey
,
publicKey
:
ECDHPublicKey
publicKey
:
ECDHPublicKey
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/BotAccount.kt
View file @
90c0c5c5
...
@@ -26,8 +26,6 @@ internal data class BotAccount(
...
@@ -26,8 +26,6 @@ internal data class BotAccount(
val
passwordMd5
:
ByteArray
// md5
val
passwordMd5
:
ByteArray
// md5
)
{
)
{
constructor
(
id
:
Long
,
passwordPlainText
:
String
)
:
this
(
id
,
MiraiPlatformUtils
.
md5
(
passwordPlainText
.
toByteArray
()))
constructor
(
id
:
Long
,
passwordPlainText
:
String
)
:
this
(
id
,
MiraiPlatformUtils
.
md5
(
passwordPlainText
.
toByteArray
()))
@OptIn
(
MiraiInternalAPI
::
class
)
override
fun
equals
(
other
:
Any
?):
Boolean
{
override
fun
equals
(
other
:
Any
?):
Boolean
{
if
(
this
===
other
)
return
true
if
(
this
===
other
)
return
true
if
(
other
==
null
||
this
::
class
!= other::class) return false
if
(
other
==
null
||
this
::
class
!= other::class) return false
...
@@ -40,7 +38,7 @@ internal data class BotAccount(
...
@@ -40,7 +38,7 @@ internal data class BotAccount(
return
true
return
true
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
override
fun
hashCode
():
Int
{
override
fun
hashCode
():
Int
{
var
result
=
id
.
hashCode
()
var
result
=
id
.
hashCode
()
result
=
31
*
result
+
passwordMd5
.
contentHashCode
()
result
=
31
*
result
+
passwordMd5
.
contentHashCode
()
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.common.kt
View file @
90c0c5c5
...
@@ -70,7 +70,6 @@ internal fun Bot.asQQAndroidBot(): QQAndroidBot {
...
@@ -70,7 +70,6 @@ internal fun Bot.asQQAndroidBot(): QQAndroidBot {
}
}
@Suppress
(
"INVISIBLE_MEMBER"
,
"BooleanLiteralArgument"
)
@Suppress
(
"INVISIBLE_MEMBER"
,
"BooleanLiteralArgument"
)
@OptIn
(
MiraiInternalAPI
::
class
)
internal
class
QQAndroidBot
constructor
(
internal
class
QQAndroidBot
constructor
(
context
:
Context
,
context
:
Context
,
account
:
BotAccount
,
account
:
BotAccount
,
...
@@ -232,7 +231,7 @@ internal class QQAndroidBot constructor(
...
@@ -232,7 +231,7 @@ internal class QQAndroidBot constructor(
}
}
}
}
@OptIn
(
MiraiInternalAPI
::
class
,
MiraiExperimentalAPI
::
class
)
internal
abstract
class
QQAndroidBotBase
constructor
(
internal
abstract
class
QQAndroidBotBase
constructor
(
context
:
Context
,
context
:
Context
,
private
val
account
:
BotAccount
,
private
val
account
:
BotAccount
,
...
@@ -771,11 +770,9 @@ internal abstract class QQAndroidBotBase constructor(
...
@@ -771,11 +770,9 @@ internal abstract class QQAndroidBotBase constructor(
internal
val
EMPTY_BYTE_ARRAY
=
ByteArray
(
0
)
internal
val
EMPTY_BYTE_ARRAY
=
ByteArray
(
0
)
@Suppress
(
"DEPRECATION"
)
@Suppress
(
"DEPRECATION"
)
@OptIn
(
MiraiInternalAPI
::
class
)
internal
expect
fun
io
.
ktor
.
utils
.
io
.
ByteReadChannel
.
toKotlinByteReadChannel
():
ByteReadChannel
internal
expect
fun
io
.
ktor
.
utils
.
io
.
ByteReadChannel
.
toKotlinByteReadChannel
():
ByteReadChannel
@OptIn
(
MiraiInternalAPI
::
class
)
private
fun
RichMessage
.
Templates
.
longMessage
(
brief
:
String
,
resId
:
String
,
timeSeconds
:
Long
):
RichMessage
{
private
fun
RichMessage
.
Templates
.
longMessage
(
brief
:
String
,
resId
:
String
,
timeSeconds
:
Long
):
RichMessage
{
val
limited
:
String
=
if
(
brief
.
length
>
30
)
{
val
limited
:
String
=
if
(
brief
.
length
>
30
)
{
brief
.
take
(
30
)
+
"…"
brief
.
take
(
30
)
+
"…"
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/FriendImpl.kt
View file @
90c0c5c5
...
@@ -41,7 +41,6 @@ import kotlin.contracts.contract
...
@@ -41,7 +41,6 @@ import kotlin.contracts.contract
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
import
kotlin.jvm.JvmSynthetic
import
kotlin.jvm.JvmSynthetic
import
kotlin.math.roundToInt
import
kotlin.math.roundToInt
import
kotlin.time.ExperimentalTime
import
kotlin.time.measureTime
import
kotlin.time.measureTime
internal
inline
class
FriendInfoImpl
(
internal
inline
class
FriendInfoImpl
(
...
@@ -85,7 +84,7 @@ internal class FriendImpl(
...
@@ -85,7 +84,7 @@ internal class FriendImpl(
}
}
@JvmSynthetic
@JvmSynthetic
@OptIn
(
MiraiInternalAPI
::
class
,
ExperimentalStdlibApi
::
class
,
ExperimentalTime
::
class
)
override
suspend
fun
uploadImage
(
image
:
ExternalImage
):
Image
=
try
{
override
suspend
fun
uploadImage
(
image
:
ExternalImage
):
Image
=
try
{
@Suppress
(
"INVISIBLE_MEMBER"
,
"INVISIBLE_REFERENCE"
)
@Suppress
(
"INVISIBLE_MEMBER"
,
"INVISIBLE_REFERENCE"
)
if
(
image
.
input
is
net
.
mamoe
.
mirai
.
utils
.
internal
.
DeferredReusableInput
)
{
if
(
image
.
input
is
net
.
mamoe
.
mirai
.
utils
.
internal
.
DeferredReusableInput
)
{
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/GroupImpl.kt
View file @
90c0c5c5
...
@@ -36,13 +36,11 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvc
...
@@ -36,13 +36,11 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvc
import
net.mamoe.mirai.qqandroid.network.protocol.packet.list.ProfileService
import
net.mamoe.mirai.qqandroid.network.protocol.packet.list.ProfileService
import
net.mamoe.mirai.qqandroid.utils.estimateLength
import
net.mamoe.mirai.qqandroid.utils.estimateLength
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.*
import
kotlin.contracts.ExperimentalContracts
import
kotlin.contracts.contract
import
kotlin.contracts.contract
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
import
kotlin.jvm.JvmSynthetic
import
kotlin.jvm.JvmSynthetic
import
kotlin.time.ExperimentalTime
import
kotlin.time.ExperimentalTime
@OptIn
(
ExperimentalContracts
::
class
)
internal
fun
GroupImpl
.
Companion
.
checkIsInstance
(
instance
:
Group
)
{
internal
fun
GroupImpl
.
Companion
.
checkIsInstance
(
instance
:
Group
)
{
contract
{
contract
{
returns
()
implies
(
instance
is
GroupImpl
)
returns
()
implies
(
instance
is
GroupImpl
)
...
@@ -50,7 +48,6 @@ internal fun GroupImpl.Companion.checkIsInstance(instance: Group) {
...
@@ -50,7 +48,6 @@ internal fun GroupImpl.Companion.checkIsInstance(instance: Group) {
check
(
instance
is
GroupImpl
)
{
"group is not an instanceof GroupImpl!! DO NOT interlace two or more protocol implementations!!"
}
check
(
instance
is
GroupImpl
)
{
"group is not an instanceof GroupImpl!! DO NOT interlace two or more protocol implementations!!"
}
}
}
@OptIn
(
ExperimentalContracts
::
class
)
internal
fun
Group
.
checkIsGroupImpl
()
{
internal
fun
Group
.
checkIsGroupImpl
()
{
contract
{
contract
{
returns
()
implies
(
this
@
checkIsGroupImpl
is
GroupImpl
)
returns
()
implies
(
this
@
checkIsGroupImpl
is
GroupImpl
)
...
@@ -58,7 +55,6 @@ internal fun Group.checkIsGroupImpl() {
...
@@ -58,7 +55,6 @@ internal fun Group.checkIsGroupImpl() {
GroupImpl
.
checkIsInstance
(
this
)
GroupImpl
.
checkIsInstance
(
this
)
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
,
LowLevelAPI
::
class
)
@Suppress
(
"PropertyName"
)
@Suppress
(
"PropertyName"
)
internal
class
GroupImpl
(
internal
class
GroupImpl
(
bot
:
QQAndroidBot
,
bot
:
QQAndroidBot
,
...
@@ -249,10 +245,8 @@ internal class GroupImpl(
...
@@ -249,10 +245,8 @@ internal class GroupImpl(
return
true
return
true
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
)
override
fun
newMember
(
memberInfo
:
MemberInfo
):
Member
{
override
fun
newMember
(
memberInfo
:
MemberInfo
):
Member
{
return
MemberImpl
(
return
MemberImpl
(
@OptIn
(
LowLevelAPI
::
class
)
bot
.
_lowLevelNewFriend
(
memberInfo
)
as
FriendImpl
,
bot
.
_lowLevelNewFriend
(
memberInfo
)
as
FriendImpl
,
this
,
this
,
this
.
coroutineContext
,
this
.
coroutineContext
,
...
@@ -290,7 +284,6 @@ internal class GroupImpl(
...
@@ -290,7 +284,6 @@ internal class GroupImpl(
return
members
.
firstOrNull
{
it
.
id
==
id
}
return
members
.
firstOrNull
{
it
.
id
==
id
}
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
,
LowLevelAPI
::
class
)
@JvmSynthetic
@JvmSynthetic
override
suspend
fun
sendMessage
(
message
:
Message
):
MessageReceipt
<
Group
>
{
override
suspend
fun
sendMessage
(
message
:
Message
):
MessageReceipt
<
Group
>
{
require
(
message
.
isContentNotEmpty
())
{
"message is empty"
}
require
(
message
.
isContentNotEmpty
())
{
"message is empty"
}
...
@@ -301,7 +294,6 @@ internal class GroupImpl(
...
@@ -301,7 +294,6 @@ internal class GroupImpl(
}
}
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
)
private
suspend
fun
sendMessageImpl
(
message
:
Message
,
isForward
:
Boolean
):
MessageReceipt
<
Group
>
{
private
suspend
fun
sendMessageImpl
(
message
:
Message
,
isForward
:
Boolean
):
MessageReceipt
<
Group
>
{
if
(
message
is
MessageChain
)
{
if
(
message
is
MessageChain
)
{
if
(
message
.
anyIsInstance
<
ForwardMessage
>())
{
if
(
message
.
anyIsInstance
<
ForwardMessage
>())
{
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/MemberImpl.kt
View file @
90c0c5c5
...
@@ -33,7 +33,10 @@ import net.mamoe.mirai.qqandroid.message.MessageSourceToTempImpl
...
@@ -33,7 +33,10 @@ import net.mamoe.mirai.qqandroid.message.MessageSourceToTempImpl
import
net.mamoe.mirai.qqandroid.network.protocol.data.jce.StTroopMemberInfo
import
net.mamoe.mirai.qqandroid.network.protocol.data.jce.StTroopMemberInfo
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvcPbSendMsg
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvcPbSendMsg
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.ExternalImage
import
net.mamoe.mirai.utils.currentTimeSeconds
import
net.mamoe.mirai.utils.getValue
import
net.mamoe.mirai.utils.unsafeWeakRef
import
kotlin.contracts.ExperimentalContracts
import
kotlin.contracts.ExperimentalContracts
import
kotlin.contracts.contract
import
kotlin.contracts.contract
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
...
@@ -189,7 +192,7 @@ internal class MemberImpl constructor(
...
@@ -189,7 +192,7 @@ internal class MemberImpl constructor(
net
.
mamoe
.
mirai
.
event
.
events
.
MemberUnmuteEvent
(
this
@MemberImpl
,
null
).
broadcast
()
net
.
mamoe
.
mirai
.
event
.
events
.
MemberUnmuteEvent
(
this
@MemberImpl
,
null
).
broadcast
()
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
@JvmSynthetic
@JvmSynthetic
override
suspend
fun
kick
(
message
:
String
)
{
override
suspend
fun
kick
(
message
:
String
)
{
checkBotPermissionHigherThanThis
()
checkBotPermissionHigherThanThis
()
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/contact/util.kt
View file @
90c0c5c5
...
@@ -24,11 +24,8 @@ import net.mamoe.mirai.qqandroid.message.ensureSequenceIdAvailable
...
@@ -24,11 +24,8 @@ import net.mamoe.mirai.qqandroid.message.ensureSequenceIdAvailable
import
net.mamoe.mirai.qqandroid.message.firstIsInstanceOrNull
import
net.mamoe.mirai.qqandroid.message.firstIsInstanceOrNull
import
net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler
import
net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvcPbSendMsg
import
net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvcPbSendMsg
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.verbose
import
net.mamoe.mirai.utils.verbose
@OptIn
(
MiraiInternalAPI
::
class
)
internal
suspend
fun
<
T
:
Contact
>
Friend
.
sendMessageImpl
(
generic
:
T
,
message
:
Message
):
MessageReceipt
<
T
>
{
internal
suspend
fun
<
T
:
Contact
>
Friend
.
sendMessageImpl
(
generic
:
T
,
message
:
Message
):
MessageReceipt
<
T
>
{
val
event
=
MessageSendEvent
.
FriendMessageSendEvent
(
this
,
message
.
asMessageChain
()).
broadcast
()
val
event
=
MessageSendEvent
.
FriendMessageSendEvent
(
this
,
message
.
asMessageChain
()).
broadcast
()
if
(
event
.
isCancelled
)
{
if
(
event
.
isCancelled
)
{
...
@@ -50,7 +47,6 @@ internal suspend fun <T : Contact> Friend.sendMessageImpl(generic: T, message: M
...
@@ -50,7 +47,6 @@ internal suspend fun <T : Contact> Friend.sendMessageImpl(generic: T, message: M
return
MessageReceipt
(
source
,
generic
,
null
)
return
MessageReceipt
(
source
,
generic
,
null
)
}
}
@OptIn
(
MiraiInternalAPI
::
class
,
MiraiExperimentalAPI
::
class
)
internal
fun
Contact
.
logMessageSent
(
message
:
Message
)
{
internal
fun
Contact
.
logMessageSent
(
message
:
Message
)
{
@Suppress
(
"INVISIBLE_MEMBER"
,
"INVISIBLE_REFERENCE"
)
@Suppress
(
"INVISIBLE_MEMBER"
,
"INVISIBLE_REFERENCE"
)
if
(
message
!
is
net
.
mamoe
.
mirai
.
message
.
data
.
LongMessage
)
{
if
(
message
!
is
net
.
mamoe
.
mirai
.
message
.
data
.
LongMessage
)
{
...
@@ -58,7 +54,6 @@ internal fun Contact.logMessageSent(message: Message) {
...
@@ -58,7 +54,6 @@ internal fun Contact.logMessageSent(message: Message) {
}
}
}
}
@OptIn
(
MiraiInternalAPI
::
class
,
MiraiExperimentalAPI
::
class
)
internal
fun
MessageEvent
.
logMessageReceived
()
{
internal
fun
MessageEvent
.
logMessageReceived
()
{
when
(
this
)
{
when
(
this
)
{
is
GroupMessageEvent
->
bot
.
logger
.
verbose
{
is
GroupMessageEvent
->
bot
.
logger
.
verbose
{
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/message/convension.kt
View file @
90c0c5c5
...
@@ -36,7 +36,6 @@ private val UNSUPPORTED_POKE_MESSAGE_PLAIN = PlainText("[戳一戳]请使用最
...
@@ -36,7 +36,6 @@ private val UNSUPPORTED_POKE_MESSAGE_PLAIN = PlainText("[戳一戳]请使用最
private
val
UNSUPPORTED_FLASH_MESSAGE_PLAIN
=
PlainText
(
"[闪照]请使用新版手机QQ查看闪照。"
)
private
val
UNSUPPORTED_FLASH_MESSAGE_PLAIN
=
PlainText
(
"[闪照]请使用新版手机QQ查看闪照。"
)
@Suppress
(
"INVISIBLE_MEMBER"
,
"INVISIBLE_REFERENCE"
)
@Suppress
(
"INVISIBLE_MEMBER"
,
"INVISIBLE_REFERENCE"
)
@OptIn
(
MiraiInternalAPI
::
class
,
MiraiExperimentalAPI
::
class
)
internal
fun
MessageChain
.
toRichTextElems
(
forGroup
:
Boolean
,
withGeneralFlags
:
Boolean
):
MutableList
<
ImMsgBody
.
Elem
>
{
internal
fun
MessageChain
.
toRichTextElems
(
forGroup
:
Boolean
,
withGeneralFlags
:
Boolean
):
MutableList
<
ImMsgBody
.
Elem
>
{
val
elements
=
ArrayList
<
ImMsgBody
.
Elem
>(
this
.
size
)
val
elements
=
ArrayList
<
ImMsgBody
.
Elem
>(
this
.
size
)
...
@@ -302,7 +301,6 @@ internal inline fun <reified R> Iterable<*>.firstIsInstanceOrNull(): R? {
...
@@ -302,7 +301,6 @@ internal inline fun <reified R> Iterable<*>.firstIsInstanceOrNull(): R? {
internal
val
MIRAI_CUSTOM_ELEM_TYPE
=
"mirai"
.
hashCode
()
// 103904510
internal
val
MIRAI_CUSTOM_ELEM_TYPE
=
"mirai"
.
hashCode
()
// 103904510
@Suppress
(
"INVISIBLE_REFERENCE"
,
"INVISIBLE_MEMBER"
)
@Suppress
(
"INVISIBLE_REFERENCE"
,
"INVISIBLE_MEMBER"
)
@OptIn
(
MiraiInternalAPI
::
class
,
LowLevelAPI
::
class
,
ExperimentalStdlibApi
::
class
)
internal
fun
List
<
ImMsgBody
.
Elem
>.
joinToMessageChain
(
groupIdOrZero
:
Long
,
bot
:
Bot
,
list
:
MessageChainBuilder
)
{
internal
fun
List
<
ImMsgBody
.
Elem
>.
joinToMessageChain
(
groupIdOrZero
:
Long
,
bot
:
Bot
,
list
:
MessageChainBuilder
)
{
// (this._miraiContentToString())
// (this._miraiContentToString())
this
.
forEach
{
element
->
this
.
forEach
{
element
->
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
View file @
90c0c5c5
...
@@ -20,7 +20,6 @@ import kotlinx.io.core.ByteReadPacket
...
@@ -20,7 +20,6 @@ import kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.buildPacket
import
kotlinx.io.core.buildPacket
import
kotlinx.io.core.use
import
kotlinx.io.core.use
import
net.mamoe.mirai.event.*
import
net.mamoe.mirai.event.*
import
net.mamoe.mirai.event.Listener.EventPriority.MONITOR
import
net.mamoe.mirai.event.events.BotOfflineEvent
import
net.mamoe.mirai.event.events.BotOfflineEvent
import
net.mamoe.mirai.event.events.BotOnlineEvent
import
net.mamoe.mirai.event.events.BotOnlineEvent
import
net.mamoe.mirai.event.events.BotReloginEvent
import
net.mamoe.mirai.event.events.BotReloginEvent
...
@@ -50,10 +49,8 @@ import net.mamoe.mirai.utils.*
...
@@ -50,10 +49,8 @@ import net.mamoe.mirai.utils.*
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
import
kotlin.jvm.JvmField
import
kotlin.jvm.JvmField
import
kotlin.jvm.Volatile
import
kotlin.jvm.Volatile
import
kotlin.time.ExperimentalTime
@Suppress
(
"MemberVisibilityCanBePrivate"
)
@Suppress
(
"MemberVisibilityCanBePrivate"
)
@OptIn
(
MiraiInternalAPI
::
class
)
internal
class
QQAndroidBotNetworkHandler
(
coroutineContext
:
CoroutineContext
,
bot
:
QQAndroidBot
)
:
BotNetworkHandler
()
{
internal
class
QQAndroidBotNetworkHandler
(
coroutineContext
:
CoroutineContext
,
bot
:
QQAndroidBot
)
:
BotNetworkHandler
()
{
override
val
bot
:
QQAndroidBot
by
bot
.
unsafeWeakRef
()
override
val
bot
:
QQAndroidBot
by
bot
.
unsafeWeakRef
()
override
val
supervisor
:
CompletableJob
=
SupervisorJob
(
coroutineContext
[
Job
])
override
val
supervisor
:
CompletableJob
=
SupervisorJob
(
coroutineContext
[
Job
])
...
@@ -114,7 +111,7 @@ internal class QQAndroidBotNetworkHandler(coroutineContext: CoroutineContext, bo
...
@@ -114,7 +111,7 @@ internal class QQAndroidBotNetworkHandler(coroutineContext: CoroutineContext, bo
}.
also
{
heartbeatJob
=
it
}
}.
also
{
heartbeatJob
=
it
}
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
)
override
suspend
fun
closeEverythingAndRelogin
(
host
:
String
,
port
:
Int
,
cause
:
Throwable
?)
{
override
suspend
fun
closeEverythingAndRelogin
(
host
:
String
,
port
:
Int
,
cause
:
Throwable
?)
{
heartbeatJob
?.
cancel
(
CancellationException
(
"relogin"
,
cause
))
heartbeatJob
?.
cancel
(
CancellationException
(
"relogin"
,
cause
))
heartbeatJob
?.
join
()
heartbeatJob
?.
join
()
...
@@ -314,7 +311,7 @@ internal class QQAndroidBotNetworkHandler(coroutineContext: CoroutineContext, bo
...
@@ -314,7 +311,7 @@ internal class QQAndroidBotNetworkHandler(coroutineContext: CoroutineContext, bo
initGroupOk
=
true
initGroupOk
=
true
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
,
ExperimentalTime
::
class
)
override
suspend
fun
init
():
Unit
=
coroutineScope
{
override
suspend
fun
init
():
Unit
=
coroutineScope
{
check
(
bot
.
isActive
)
{
"bot is dead therefore network can't init"
}
check
(
bot
.
isActive
)
{
"bot is dead therefore network can't init"
}
check
(
this
@QQAndroidBotNetworkHandler
.
isActive
)
{
"network is dead therefore can't init"
}
check
(
this
@QQAndroidBotNetworkHandler
.
isActive
)
{
"network is dead therefore can't init"
}
...
@@ -390,7 +387,8 @@ internal class QQAndroidBotNetworkHandler(coroutineContext: CoroutineContext, bo
...
@@ -390,7 +387,8 @@ internal class QQAndroidBotNetworkHandler(coroutineContext: CoroutineContext, bo
}
}
init
{
init
{
val
listener
=
bot
.
subscribeAlways
<
BotReloginEvent
>(
priority
=
MONITOR
)
{
@Suppress
(
"RemoveRedundantQualifierName"
)
val
listener
=
bot
.
subscribeAlways
<
BotReloginEvent
>(
priority
=
Listener
.
EventPriority
.
MONITOR
)
{
if
(
bot
!=
this
.
bot
)
return
@
subscribeAlways
if
(
bot
!=
this
.
bot
)
return
@
subscribeAlways
this
@QQAndroidBotNetworkHandler
.
launch
{
syncMessageSvc
()
}
this
@QQAndroidBotNetworkHandler
.
launch
{
syncMessageSvc
()
}
}
}
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt
View file @
90c0c5c5
...
@@ -35,7 +35,6 @@ internal val DeviceInfo.guid: ByteArray get() = generateGuid(androidId, macAddre
...
@@ -35,7 +35,6 @@ internal val DeviceInfo.guid: ByteArray get() = generateGuid(androidId, macAddre
* Defaults "%4;7t>;28<fc.5*6".toByteArray()
* Defaults "%4;7t>;28<fc.5*6".toByteArray()
*/
*/
@Suppress
(
"RemoveRedundantQualifierName"
)
// bug
@Suppress
(
"RemoveRedundantQualifierName"
)
// bug
@OptIn
(
MiraiInternalAPI
::
class
)
private
fun
generateGuid
(
androidId
:
ByteArray
,
macAddress
:
ByteArray
):
ByteArray
=
private
fun
generateGuid
(
androidId
:
ByteArray
,
macAddress
:
ByteArray
):
ByteArray
=
net
.
mamoe
.
mirai
.
qqandroid
.
utils
.
MiraiPlatformUtils
.
md5
(
androidId
+
macAddress
)
net
.
mamoe
.
mirai
.
qqandroid
.
utils
.
MiraiPlatformUtils
.
md5
(
androidId
+
macAddress
)
...
@@ -68,7 +67,6 @@ internal object DefaultServerList : Set<Pair<String, Int>> by setOf(
...
@@ -68,7 +67,6 @@ internal object DefaultServerList : Set<Pair<String, Int>> by setOf(
DOMAINS
DOMAINS
Pskey: "openmobile.qq.com"
Pskey: "openmobile.qq.com"
*/
*/
@OptIn
(
MiraiExperimentalAPI
::
class
,
MiraiInternalAPI
::
class
)
@PublishedApi
@PublishedApi
internal
open
class
QQAndroidClient
(
internal
open
class
QQAndroidClient
(
context
:
Context
,
context
:
Context
,
...
@@ -270,7 +268,6 @@ internal open class QQAndroidClient(
...
@@ -270,7 +268,6 @@ internal open class QQAndroidClient(
}
}
@Suppress
(
"RemoveRedundantQualifierName"
)
// bug
@Suppress
(
"RemoveRedundantQualifierName"
)
// bug
@OptIn
(
MiraiInternalAPI
::
class
)
internal
fun
generateTgtgtKey
(
guid
:
ByteArray
):
ByteArray
=
internal
fun
generateTgtgtKey
(
guid
:
ByteArray
):
ByteArray
=
net
.
mamoe
.
mirai
.
qqandroid
.
utils
.
MiraiPlatformUtils
.
md5
(
getRandomByteArray
(
16
)
+
guid
)
net
.
mamoe
.
mirai
.
qqandroid
.
utils
.
MiraiPlatformUtils
.
md5
(
getRandomByteArray
(
16
)
+
guid
)
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/HighwayHelper.kt
View file @
90c0c5c5
...
@@ -26,7 +26,6 @@ import kotlinx.coroutines.isActive
...
@@ -26,7 +26,6 @@ import kotlinx.coroutines.isActive
import
kotlinx.coroutines.withTimeoutOrNull
import
kotlinx.coroutines.withTimeoutOrNull
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.use
import
kotlinx.io.core.use
import
kotlinx.serialization.InternalSerializationApi
import
net.mamoe.mirai.qqandroid.QQAndroidBot
import
net.mamoe.mirai.qqandroid.QQAndroidBot
import
net.mamoe.mirai.qqandroid.network.QQAndroidClient
import
net.mamoe.mirai.qqandroid.network.QQAndroidClient
import
net.mamoe.mirai.qqandroid.network.protocol.data.proto.CSDataHighwayHead
import
net.mamoe.mirai.qqandroid.network.protocol.data.proto.CSDataHighwayHead
...
@@ -36,8 +35,6 @@ import net.mamoe.mirai.qqandroid.utils.addSuppressedMirai
...
@@ -36,8 +35,6 @@ import net.mamoe.mirai.qqandroid.utils.addSuppressedMirai
import
net.mamoe.mirai.qqandroid.utils.io.serialization.readProtoBuf
import
net.mamoe.mirai.qqandroid.utils.io.serialization.readProtoBuf
import
net.mamoe.mirai.qqandroid.utils.io.withUse
import
net.mamoe.mirai.qqandroid.utils.io.withUse
import
net.mamoe.mirai.qqandroid.utils.toIpV4AddressString
import
net.mamoe.mirai.qqandroid.utils.toIpV4AddressString
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.internal.ReusableInput
import
net.mamoe.mirai.utils.internal.ReusableInput
import
net.mamoe.mirai.utils.verbose
import
net.mamoe.mirai.utils.verbose
import
kotlin.coroutines.EmptyCoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
...
@@ -45,7 +42,7 @@ import kotlin.math.roundToInt
...
@@ -45,7 +42,7 @@ import kotlin.math.roundToInt
import
kotlin.time.ExperimentalTime
import
kotlin.time.ExperimentalTime
import
kotlin.time.measureTime
import
kotlin.time.measureTime
@OptIn
(
MiraiInternalAPI
::
class
,
InternalSerializationApi
::
class
)
@Suppress
(
"SpellCheckingInspection"
)
@Suppress
(
"SpellCheckingInspection"
)
internal
suspend
fun
HttpClient
.
postImage
(
internal
suspend
fun
HttpClient
.
postImage
(
htcmd
:
String
,
htcmd
:
String
,
...
@@ -77,7 +74,7 @@ internal suspend fun HttpClient.postImage(
...
@@ -77,7 +74,7 @@ internal suspend fun HttpClient.postImage(
override
val
contentType
:
ContentType
=
ContentType
.
Image
.
Any
override
val
contentType
:
ContentType
=
ContentType
.
Image
.
Any
override
val
contentLength
:
Long
=
imageInput
.
size
override
val
contentLength
:
Long
=
imageInput
.
size
@OptIn
(
MiraiExperimentalAPI
::
class
)
override
suspend
fun
writeTo
(
channel
:
ByteWriteChannel
)
{
override
suspend
fun
writeTo
(
channel
:
ByteWriteChannel
)
{
imageInput
.
writeTo
(
channel
)
imageInput
.
writeTo
(
channel
)
...
@@ -85,7 +82,7 @@ internal suspend fun HttpClient.postImage(
...
@@ -85,7 +82,7 @@ internal suspend fun HttpClient.postImage(
}
}
}
==
HttpStatusCode
.
OK
}
==
HttpStatusCode
.
OK
@OptIn
(
MiraiInternalAPI
::
class
,
InternalSerializationApi
::
class
)
internal
object
HighwayHelper
{
internal
object
HighwayHelper
{
@Suppress
(
"INVISIBLE_REFERENCE"
,
"INVISIBLE_MEMBER"
)
@Suppress
(
"INVISIBLE_REFERENCE"
,
"INVISIBLE_MEMBER"
)
suspend
fun
uploadImageToServers
(
suspend
fun
uploadImageToServers
(
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/highway/highway.kt
View file @
90c0c5c5
...
@@ -14,20 +14,18 @@ package net.mamoe.mirai.qqandroid.network.highway
...
@@ -14,20 +14,18 @@ package net.mamoe.mirai.qqandroid.network.highway
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.buildPacket
import
kotlinx.io.core.buildPacket
import
kotlinx.io.core.writeFully
import
kotlinx.io.core.writeFully
import
kotlinx.serialization.InternalSerializationApi
import
net.mamoe.mirai.qqandroid.network.QQAndroidClient
import
net.mamoe.mirai.qqandroid.network.QQAndroidClient
import
net.mamoe.mirai.qqandroid.network.protocol.data.proto.CSDataHighwayHead
import
net.mamoe.mirai.qqandroid.network.protocol.data.proto.CSDataHighwayHead
import
net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY
import
net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY
import
net.mamoe.mirai.qqandroid.utils.ByteArrayPool
import
net.mamoe.mirai.qqandroid.utils.ByteArrayPool
import
net.mamoe.mirai.qqandroid.utils.MiraiPlatformUtils
import
net.mamoe.mirai.qqandroid.utils.MiraiPlatformUtils
import
net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray
import
net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.internal.ChunkedFlowSession
import
net.mamoe.mirai.utils.internal.ChunkedFlowSession
import
net.mamoe.mirai.utils.internal.ChunkedInput
import
net.mamoe.mirai.utils.internal.ChunkedInput
import
net.mamoe.mirai.utils.internal.ReusableInput
import
net.mamoe.mirai.utils.internal.ReusableInput
import
net.mamoe.mirai.utils.internal.map
import
net.mamoe.mirai.utils.internal.map
@OptIn
(
MiraiInternalAPI
::
class
,
InternalSerializationApi
::
class
)
internal
fun
createImageDataPacketSequence
(
internal
fun
createImageDataPacketSequence
(
// RequestDataTrans
// RequestDataTrans
client
:
QQAndroidClient
,
client
:
QQAndroidClient
,
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/EncryptMethod.kt
View file @
90c0c5c5
...
@@ -19,7 +19,6 @@ import net.mamoe.mirai.qqandroid.utils.cryptor.ECDHKeyPair
...
@@ -19,7 +19,6 @@ import net.mamoe.mirai.qqandroid.utils.cryptor.ECDHKeyPair
import
net.mamoe.mirai.qqandroid.utils.io.encryptAndWrite
import
net.mamoe.mirai.qqandroid.utils.io.encryptAndWrite
import
net.mamoe.mirai.qqandroid.utils.io.writeShortLVByteArray
import
net.mamoe.mirai.qqandroid.utils.io.writeShortLVByteArray
@OptIn
(
ExperimentalUnsignedTypes
::
class
)
internal
interface
EncryptMethod
{
internal
interface
EncryptMethod
{
val
id
:
Int
val
id
:
Int
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/OutgoingPacketAndroid.kt
View file @
90c0c5c5
...
@@ -35,7 +35,6 @@ internal val KEY_16_ZEROS = ByteArray(16)
...
@@ -35,7 +35,6 @@ internal val KEY_16_ZEROS = ByteArray(16)
internal
val
EMPTY_BYTE_ARRAY
=
ByteArray
(
0
)
internal
val
EMPTY_BYTE_ARRAY
=
ByteArray
(
0
)
@Suppress
(
"DuplicatedCode"
)
@Suppress
(
"DuplicatedCode"
)
@OptIn
(
MiraiInternalAPI
::
class
)
internal
inline
fun
OutgoingPacketFactory
<*>.
buildOutgoingUniPacket
(
internal
inline
fun
OutgoingPacketFactory
<*>.
buildOutgoingUniPacket
(
client
:
QQAndroidClient
,
client
:
QQAndroidClient
,
bodyType
:
Byte
=
1
,
// 1: PB?
bodyType
:
Byte
=
1
,
// 1: PB?
...
@@ -67,7 +66,6 @@ internal inline fun OutgoingPacketFactory<*>.buildOutgoingUniPacket(
...
@@ -67,7 +66,6 @@ internal inline fun OutgoingPacketFactory<*>.buildOutgoingUniPacket(
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
internal
inline
fun
IncomingPacketFactory
<*>.
buildResponseUniPacket
(
internal
inline
fun
IncomingPacketFactory
<*>.
buildResponseUniPacket
(
client
:
QQAndroidClient
,
client
:
QQAndroidClient
,
bodyType
:
Byte
=
1
,
// 1: PB?
bodyType
:
Byte
=
1
,
// 1: PB?
...
@@ -98,7 +96,7 @@ internal inline fun IncomingPacketFactory<*>.buildResponseUniPacket(
...
@@ -98,7 +96,7 @@ internal inline fun IncomingPacketFactory<*>.buildResponseUniPacket(
})
})
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
private
inline
fun
BytePacketBuilder
.
writeUniPacket
(
private
inline
fun
BytePacketBuilder
.
writeUniPacket
(
commandName
:
String
,
commandName
:
String
,
unknownData
:
ByteArray
,
unknownData
:
ByteArray
,
...
@@ -131,7 +129,6 @@ internal val NO_ENCRYPT: ByteArray = ByteArray(0)
...
@@ -131,7 +129,6 @@ internal val NO_ENCRYPT: ByteArray = ByteArray(0)
/**
/**
* com.tencent.qphone.base.util.CodecWarpper#encodeRequest(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, byte[], int, int, java.lang.String, byte, byte, byte, byte[], byte[], boolean)
* com.tencent.qphone.base.util.CodecWarpper#encodeRequest(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, byte[], int, int, java.lang.String, byte, byte, byte, byte[], byte[], boolean)
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
internal
inline
fun
OutgoingPacketFactory
<*>.
buildLoginOutgoingPacket
(
internal
inline
fun
OutgoingPacketFactory
<*>.
buildLoginOutgoingPacket
(
client
:
QQAndroidClient
,
client
:
QQAndroidClient
,
bodyType
:
Byte
,
bodyType
:
Byte
,
...
@@ -169,7 +166,7 @@ internal inline fun OutgoingPacketFactory<*>.buildLoginOutgoingPacket(
...
@@ -169,7 +166,7 @@ internal inline fun OutgoingPacketFactory<*>.buildLoginOutgoingPacket(
private
inline
val
BRP_STUB
get
()
=
ByteReadPacket
.
Empty
private
inline
val
BRP_STUB
get
()
=
ByteReadPacket
.
Empty
@OptIn
(
MiraiInternalAPI
::
class
)
internal
inline
fun
BytePacketBuilder
.
writeSsoPacket
(
internal
inline
fun
BytePacketBuilder
.
writeSsoPacket
(
client
:
QQAndroidClient
,
client
:
QQAndroidClient
,
subAppId
:
Long
,
subAppId
:
Long
,
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/PacketFactory.kt
View file @
90c0c5c5
...
@@ -54,7 +54,6 @@ internal sealed class PacketFactory<TPacket : Packet?> {
...
@@ -54,7 +54,6 @@ internal sealed class PacketFactory<TPacket : Packet?> {
*
*
* @param TPacket 服务器回复包解析结果
* @param TPacket 服务器回复包解析结果
*/
*/
@OptIn
(
ExperimentalUnsignedTypes
::
class
)
internal
abstract
class
OutgoingPacketFactory
<
TPacket
:
Packet
?>(
internal
abstract
class
OutgoingPacketFactory
<
TPacket
:
Packet
?>(
/**
/**
* 命令名. 如 `wtlogin.login`, `ConfigPushSvc.PushDomain`
* 命令名. 如 `wtlogin.login`, `ConfigPushSvc.PushDomain`
...
@@ -125,7 +124,6 @@ internal typealias PacketConsumer<T> = suspend (packetFactory: PacketFactory<T>,
...
@@ -125,7 +124,6 @@ internal typealias PacketConsumer<T> = suspend (packetFactory: PacketFactory<T>,
@PublishedApi
@PublishedApi
internal
val
PacketLogger
:
MiraiLoggerWithSwitch
=
DefaultLogger
(
"Packet"
).
withSwitch
(
false
)
internal
val
PacketLogger
:
MiraiLoggerWithSwitch
=
DefaultLogger
(
"Packet"
).
withSwitch
(
false
)
@OptIn
(
ExperimentalUnsignedTypes
::
class
)
internal
object
KnownPacketFactories
{
internal
object
KnownPacketFactories
{
object
OutgoingFactories
:
List
<
OutgoingPacketFactory
<
*
>>
by
mutableListOf
(
object
OutgoingFactories
:
List
<
OutgoingPacketFactory
<
*
>>
by
mutableListOf
(
WtLogin
.
Login
,
WtLogin
.
Login
,
...
@@ -174,7 +172,6 @@ internal object KnownPacketFactories {
...
@@ -174,7 +172,6 @@ internal object KnownPacketFactories {
}
}
// do not inline. Exceptions thrown will not be reported correctly
// do not inline. Exceptions thrown will not be reported correctly
@OptIn
(
MiraiInternalAPI
::
class
)
@Suppress
(
"UNCHECKED_CAST"
)
@Suppress
(
"UNCHECKED_CAST"
)
suspend
fun
<
T
:
Packet
?
>
parseIncomingPacket
(
suspend
fun
<
T
:
Packet
?
>
parseIncomingPacket
(
bot
:
QQAndroidBot
,
bot
:
QQAndroidBot
,
...
@@ -235,7 +232,6 @@ internal object KnownPacketFactories {
...
@@ -235,7 +232,6 @@ internal object KnownPacketFactories {
}
}
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
internal
suspend
fun
<
T
:
Packet
?
>
handleIncomingPacket
(
internal
suspend
fun
<
T
:
Packet
?
>
handleIncomingPacket
(
it
:
IncomingPacket
<
T
>,
it
:
IncomingPacket
<
T
>,
bot
:
QQAndroidBot
,
bot
:
QQAndroidBot
,
...
@@ -296,7 +292,6 @@ internal object KnownPacketFactories {
...
@@ -296,7 +292,6 @@ internal object KnownPacketFactories {
lateinit
var
consumer
:
PacketConsumer
<
T
>
lateinit
var
consumer
:
PacketConsumer
<
T
>
}
}
@OptIn
(
ExperimentalUnsignedTypes
::
class
,
MiraiInternalAPI
::
class
)
private
fun
parseSsoFrame
(
bot
:
QQAndroidBot
,
input
:
ByteReadPacket
):
IncomingPacket
<
*
>
{
private
fun
parseSsoFrame
(
bot
:
QQAndroidBot
,
input
:
ByteReadPacket
):
IncomingPacket
<
*
>
{
val
commandName
:
String
val
commandName
:
String
val
ssoSequenceId
:
Int
val
ssoSequenceId
:
Int
...
@@ -355,7 +350,6 @@ internal object KnownPacketFactories {
...
@@ -355,7 +350,6 @@ internal object KnownPacketFactories {
return
IncomingPacket
(
packetFactory
,
ssoSequenceId
,
packet
,
commandName
)
return
IncomingPacket
(
packetFactory
,
ssoSequenceId
,
packet
,
commandName
)
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
private
suspend
fun
<
T
:
Packet
?
>
ByteReadPacket
.
parseOicqResponse
(
private
suspend
fun
<
T
:
Packet
?
>
ByteReadPacket
.
parseOicqResponse
(
bot
:
QQAndroidBot
,
bot
:
QQAndroidBot
,
packetFactory
:
OutgoingPacketFactory
<
T
>,
packetFactory
:
OutgoingPacketFactory
<
T
>,
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/Tlv.kt
View file @
90c0c5c5
...
@@ -20,7 +20,6 @@ import net.mamoe.mirai.qqandroid.utils.MiraiPlatformUtils
...
@@ -20,7 +20,6 @@ import net.mamoe.mirai.qqandroid.utils.MiraiPlatformUtils
import
net.mamoe.mirai.qqandroid.utils.NetworkType
import
net.mamoe.mirai.qqandroid.utils.NetworkType
import
net.mamoe.mirai.qqandroid.utils.io.*
import
net.mamoe.mirai.qqandroid.utils.io.*
import
net.mamoe.mirai.qqandroid.utils.toByteArray
import
net.mamoe.mirai.qqandroid.utils.toByteArray
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.currentTimeMillis
import
net.mamoe.mirai.utils.currentTimeMillis
import
kotlin.random.Random
import
kotlin.random.Random
...
@@ -80,7 +79,7 @@ internal fun BytePacketBuilder.t18(
...
@@ -80,7 +79,7 @@ internal fun BytePacketBuilder.t18(
}
shouldEqualsTo
22
}
shouldEqualsTo
22
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
internal
fun
BytePacketBuilder
.
t106
(
internal
fun
BytePacketBuilder
.
t106
(
appId
:
Long
=
16L
,
appId
:
Long
=
16L
,
subAppId
:
Long
,
subAppId
:
Long
,
...
@@ -326,7 +325,7 @@ internal fun BytePacketBuilder.t144(
...
@@ -326,7 +325,7 @@ internal fun BytePacketBuilder.t144(
}
}
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
internal
fun
BytePacketBuilder
.
t109
(
internal
fun
BytePacketBuilder
.
t109
(
androidId
:
ByteArray
androidId
:
ByteArray
)
{
)
{
...
@@ -562,7 +561,7 @@ internal fun BytePacketBuilder.t400(
...
@@ -562,7 +561,7 @@ internal fun BytePacketBuilder.t400(
}
}
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
internal
fun
BytePacketBuilder
.
t187
(
internal
fun
BytePacketBuilder
.
t187
(
macAddress
:
ByteArray
macAddress
:
ByteArray
)
{
)
{
...
@@ -572,7 +571,7 @@ internal fun BytePacketBuilder.t187(
...
@@ -572,7 +571,7 @@ internal fun BytePacketBuilder.t187(
}
}
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
internal
fun
BytePacketBuilder
.
t188
(
internal
fun
BytePacketBuilder
.
t188
(
androidId
:
ByteArray
androidId
:
ByteArray
)
{
)
{
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/MultiMsg.kt
View file @
90c0c5c5
...
@@ -31,9 +31,8 @@ import net.mamoe.mirai.qqandroid.utils._miraiContentToString
...
@@ -31,9 +31,8 @@ import net.mamoe.mirai.qqandroid.utils._miraiContentToString
import
net.mamoe.mirai.qqandroid.utils.io.serialization.readProtoBuf
import
net.mamoe.mirai.qqandroid.utils.io.serialization.readProtoBuf
import
net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray
import
net.mamoe.mirai.qqandroid.utils.io.serialization.toByteArray
import
net.mamoe.mirai.qqandroid.utils.io.serialization.writeProtoBuf
import
net.mamoe.mirai.qqandroid.utils.io.serialization.writeProtoBuf
import
net.mamoe.mirai.utils.MiraiInternalAPI
internal
class
MessageValidationData
@OptIn
(
MiraiInternalAPI
::
class
)
constructor
(
internal
class
MessageValidationData
(
val
data
:
ByteArray
,
val
data
:
ByteArray
,
val
md5
:
ByteArray
=
MiraiPlatformUtils
.
md5
(
data
)
val
md5
:
ByteArray
=
MiraiPlatformUtils
.
md5
(
data
)
)
{
)
{
...
@@ -44,8 +43,6 @@ internal class MessageValidationData @OptIn(MiraiInternalAPI::class) constructor
...
@@ -44,8 +43,6 @@ internal class MessageValidationData @OptIn(MiraiInternalAPI::class) constructor
@Suppress
(
"NOTHING_TO_INLINE"
)
@Suppress
(
"NOTHING_TO_INLINE"
)
internal
inline
fun
Int
.
toLongUnsigned
():
Long
=
this
.
toLong
().
and
(
0
xFFFF_FFFF
)
internal
inline
fun
Int
.
toLongUnsigned
():
Long
=
this
.
toLong
().
and
(
0
xFFFF_FFFF
)
@OptIn
(
MiraiInternalAPI
::
class
)
internal
fun
Collection
<
ForwardMessage
.
INode
>.
calculateValidationDataForGroup
(
internal
fun
Collection
<
ForwardMessage
.
INode
>.
calculateValidationDataForGroup
(
sequenceId
:
Int
,
sequenceId
:
Int
,
random
:
Int
,
random
:
Int
,
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt
View file @
90c0c5c5
...
@@ -14,7 +14,6 @@ import kotlinx.coroutines.FlowPreview
...
@@ -14,7 +14,6 @@ import kotlinx.coroutines.FlowPreview
import
kotlinx.coroutines.flow.*
import
kotlinx.coroutines.flow.*
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.discardExact
import
net.mamoe.mirai.LowLevelAPI
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.data.MemberInfo
import
net.mamoe.mirai.data.MemberInfo
...
@@ -48,13 +47,15 @@ import net.mamoe.mirai.qqandroid.utils.io.serialization.writeProtoBuf
...
@@ -48,13 +47,15 @@ import net.mamoe.mirai.qqandroid.utils.io.serialization.writeProtoBuf
import
net.mamoe.mirai.qqandroid.utils.read
import
net.mamoe.mirai.qqandroid.utils.read
import
net.mamoe.mirai.qqandroid.utils.soutv
import
net.mamoe.mirai.qqandroid.utils.soutv
import
net.mamoe.mirai.qqandroid.utils.toUHexString
import
net.mamoe.mirai.qqandroid.utils.toUHexString
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.currentTimeSeconds
import
net.mamoe.mirai.utils.debug
import
net.mamoe.mirai.utils.warning
/**
/**
* 获取好友消息和消息记录
* 获取好友消息和消息记录
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
internal
object
MessageSvcPbGetMsg
:
OutgoingPacketFactory
<
MessageSvcPbGetMsg
.
Response
>(
"MessageSvc.PbGetMsg"
)
{
internal
object
MessageSvcPbGetMsg
:
OutgoingPacketFactory
<
MessageSvcPbGetMsg
.
Response
>(
"MessageSvc.PbGetMsg"
)
{
@Suppress
(
"SpellCheckingInspection"
)
@Suppress
(
"SpellCheckingInspection"
)
operator
fun
invoke
(
operator
fun
invoke
(
...
@@ -86,7 +87,6 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
...
@@ -86,7 +87,6 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
)
)
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
open
class
GetMsgSuccess
(
delegate
:
List
<
Packet
>)
:
Response
(
MsgSvc
.
SyncFlag
.
STOP
,
delegate
),
Event
,
open
class
GetMsgSuccess
(
delegate
:
List
<
Packet
>)
:
Response
(
MsgSvc
.
SyncFlag
.
STOP
,
delegate
),
Event
,
Packet
.
NoLog
{
Packet
.
NoLog
{
override
fun
toString
():
String
=
"MessageSvcPbGetMsg.GetMsgSuccess(messages=<Iterable>))"
override
fun
toString
():
String
=
"MessageSvcPbGetMsg.GetMsgSuccess(messages=<Iterable>))"
...
@@ -143,7 +143,6 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
...
@@ -143,7 +143,6 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
)
)
}
}
@OptIn
(
LowLevelAPI
::
class
)
private
fun
MsgComm
.
Msg
.
getNewMemberInfo
():
MemberInfo
{
private
fun
MsgComm
.
Msg
.
getNewMemberInfo
():
MemberInfo
{
return
object
:
MemberInfo
{
return
object
:
MemberInfo
{
override
val
nameCard
:
String
get
()
=
""
override
val
nameCard
:
String
get
()
=
""
...
@@ -156,7 +155,7 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
...
@@ -156,7 +155,7 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
}
}
}
}
@OptIn
(
MiraiInternalAPI
::
class
,
MiraiExperimentalAPI
::
class
,
FlowPreview
::
class
,
LowLevelAPI
::
class
)
@OptIn
(
FlowPreview
::
class
)
override
suspend
fun
ByteReadPacket
.
decode
(
bot
:
QQAndroidBot
):
Response
{
override
suspend
fun
ByteReadPacket
.
decode
(
bot
:
QQAndroidBot
):
Response
{
// 00 00 01 0F 08 00 12 00 1A 34 08 FF C1 C4 F1 05 10 FF C1 C4 F1 05 18 E6 ED B9 C3 02 20 89 FE BE A4 06 28 8A CA 91 D1 0C 48 9B A5 BD 9B 0A 58 DE 9D 99 F8 08 60 1D 68 FF C1 C4 F1 05 70 00 20 02 2A 9D 01 08 F3 C1 C4 F1 05 10 A2 FF 8C F0 03 18 01 22 8A 01 0A 2A 08 A2 FF 8C F0 03 10 DD F1 92 B7 07 18 A6 01 20 0B 28 AE F9 01 30 F4 C1 C4 F1 05 38 A7 E3 D8 D4 84 80 80 80 01 B8 01 CD B5 01 12 08 08 01 10 00 18 00 20 00 1A 52 0A 50 0A 27 08 00 10 F4 C1 C4 F1 05 18 A7 E3 D8 D4 04 20 00 28 0C 30 00 38 86 01 40 22 4A 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91 12 08 0A 06 0A 04 4E 4D 53 4C 12 15 AA 02 12 9A 01 0F 80 01 01 C8 01 00 F0 01 00 F8 01 00 90 02 00 12 04 4A 02 08 00 30 01 2A 15 08 97 A2 C1 F1 05 10 95 A6 F5 E5 0C 18 01 30 01 40 01 48 81 01 2A 10 08 D3 F7 B5 F1 05 10 DD F1 92 B7 07 18 01 30 01 38 00 42 00 48 00
// 00 00 01 0F 08 00 12 00 1A 34 08 FF C1 C4 F1 05 10 FF C1 C4 F1 05 18 E6 ED B9 C3 02 20 89 FE BE A4 06 28 8A CA 91 D1 0C 48 9B A5 BD 9B 0A 58 DE 9D 99 F8 08 60 1D 68 FF C1 C4 F1 05 70 00 20 02 2A 9D 01 08 F3 C1 C4 F1 05 10 A2 FF 8C F0 03 18 01 22 8A 01 0A 2A 08 A2 FF 8C F0 03 10 DD F1 92 B7 07 18 A6 01 20 0B 28 AE F9 01 30 F4 C1 C4 F1 05 38 A7 E3 D8 D4 84 80 80 80 01 B8 01 CD B5 01 12 08 08 01 10 00 18 00 20 00 1A 52 0A 50 0A 27 08 00 10 F4 C1 C4 F1 05 18 A7 E3 D8 D4 04 20 00 28 0C 30 00 38 86 01 40 22 4A 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91 12 08 0A 06 0A 04 4E 4D 53 4C 12 15 AA 02 12 9A 01 0F 80 01 01 C8 01 00 F0 01 00 F8 01 00 90 02 00 12 04 4A 02 08 00 30 01 2A 15 08 97 A2 C1 F1 05 10 95 A6 F5 E5 0C 18 01 30 01 40 01 48 81 01 2A 10 08 D3 F7 B5 F1 05 10 DD F1 92 B7 07 18 01 30 01 38 00 42 00 48 00
val
resp
=
readProtoBuf
(
MsgSvc
.
PbGetMsgResp
.
serializer
())
val
resp
=
readProtoBuf
(
MsgSvc
.
PbGetMsgResp
.
serializer
())
...
@@ -179,9 +178,7 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
...
@@ -179,9 +178,7 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
.
filterNot
{
it
.
msg
==
null
}
.
filterNot
{
it
.
msg
==
null
}
.
flatMapConcat
{
it
.
msg
!!
.
asFlow
()
}
.
flatMapConcat
{
it
.
msg
!!
.
asFlow
()
}
.
also
{
.
also
{
MessageSvcPbDeleteMsg
.
delete
(
MessageSvcPbDeleteMsg
.
delete
(
bot
,
it
)
bot
,
it
)
}
// 删除消息
}
// 删除消息
.
mapNotNull
<
MsgComm
.
Msg
,
Packet
>
{
msg
->
.
mapNotNull
<
MsgComm
.
Msg
,
Packet
>
{
msg
->
...
@@ -375,12 +372,9 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
...
@@ -375,12 +372,9 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
val
list
:
List
<
Packet
>
=
messages
.
toList
()
val
list
:
List
<
Packet
>
=
messages
.
toList
()
if
(
resp
.
syncFlag
==
MsgSvc
.
SyncFlag
.
STOP
)
{
if
(
resp
.
syncFlag
==
MsgSvc
.
SyncFlag
.
STOP
)
{
return
GetMsgSuccess
(
return
GetMsgSuccess
(
list
)
list
)
}
}
return
Response
(
return
Response
(
resp
.
syncFlag
,
list
)
resp
.
syncFlag
,
list
)
}
}
override
suspend
fun
QQAndroidBot
.
handle
(
packet
:
Response
)
{
override
suspend
fun
QQAndroidBot
.
handle
(
packet
:
Response
)
{
...
@@ -388,20 +382,14 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
...
@@ -388,20 +382,14 @@ internal object MessageSvcPbGetMsg : OutgoingPacketFactory<MessageSvcPbGetMsg.Re
MsgSvc
.
SyncFlag
.
STOP
->
return
MsgSvc
.
SyncFlag
.
STOP
->
return
MsgSvc
.
SyncFlag
.
START
->
{
MsgSvc
.
SyncFlag
.
START
->
{
network
.
run
{
network
.
run
{
MessageSvcPbGetMsg
(
MessageSvcPbGetMsg
(
client
,
MsgSvc
.
SyncFlag
.
CONTINUE
,
currentTimeSeconds
).
sendAndExpect
<
Packet
>()
client
,
MsgSvc
.
SyncFlag
.
CONTINUE
,
currentTimeSeconds
).
sendAndExpect
<
Packet
>()
}
}
return
return
}
}
MsgSvc
.
SyncFlag
.
CONTINUE
->
{
MsgSvc
.
SyncFlag
.
CONTINUE
->
{
network
.
run
{
network
.
run
{
MessageSvcPbGetMsg
(
MessageSvcPbGetMsg
(
client
,
MsgSvc
.
SyncFlag
.
CONTINUE
,
currentTimeSeconds
).
sendAndExpect
<
Packet
>()
client
,
MsgSvc
.
SyncFlag
.
CONTINUE
,
currentTimeSeconds
).
sendAndExpect
<
Packet
>()
}
}
return
return
}
}
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.PbPushTransMsg.kt
View file @
90c0c5c5
...
@@ -42,7 +42,7 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
...
@@ -42,7 +42,7 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
internal
object
OnlinePushPbPushTransMsg
:
internal
object
OnlinePushPbPushTransMsg
:
IncomingPacketFactory
<
Packet
?
>(
"OnlinePush.PbPushTransMsg"
,
"OnlinePush.RespPush"
)
{
IncomingPacketFactory
<
Packet
?
>(
"OnlinePush.PbPushTransMsg"
,
"OnlinePush.RespPush"
)
{
@OptIn
(
MiraiInternalAPI
::
class
)
override
suspend
fun
ByteReadPacket
.
decode
(
bot
:
QQAndroidBot
,
sequenceId
:
Int
):
Packet
?
{
override
suspend
fun
ByteReadPacket
.
decode
(
bot
:
QQAndroidBot
,
sequenceId
:
Int
):
Packet
?
{
val
content
=
this
.
readProtoBuf
(
OnlinePushTrans
.
PbMsgInfo
.
serializer
())
val
content
=
this
.
readProtoBuf
(
OnlinePushTrans
.
PbMsgInfo
.
serializer
())
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/OnlinePush.ReqPush.kt
View file @
90c0c5c5
...
@@ -23,7 +23,6 @@ import kotlinx.io.core.readBytes
...
@@ -23,7 +23,6 @@ import kotlinx.io.core.readBytes
import
kotlinx.io.core.readUInt
import
kotlinx.io.core.readUInt
import
kotlinx.serialization.Serializable
import
kotlinx.serialization.Serializable
import
net.mamoe.mirai.JavaFriendlyAPI
import
net.mamoe.mirai.JavaFriendlyAPI
import
net.mamoe.mirai.LowLevelAPI
import
net.mamoe.mirai.data.FriendInfo
import
net.mamoe.mirai.data.FriendInfo
import
net.mamoe.mirai.event.events.*
import
net.mamoe.mirai.event.events.*
import
net.mamoe.mirai.getFriendOrNull
import
net.mamoe.mirai.getFriendOrNull
...
@@ -352,7 +351,6 @@ internal inline fun lambda528(crossinline block: MsgType0x210.(QQAndroidBot) ->
...
@@ -352,7 +351,6 @@ internal inline fun lambda528(crossinline block: MsgType0x210.(QQAndroidBot) ->
/**
/**
* @see MsgType0x210
* @see MsgType0x210
*/
*/
@OptIn
(
LowLevelAPI
::
class
,
MiraiInternalAPI
::
class
)
internal
object
Transformers528
:
Map
<
Long
,
Lambda528
>
by
mapOf
(
internal
object
Transformers528
:
Map
<
Long
,
Lambda528
>
by
mapOf
(
// Network(1994701021) 16:03:54 : unknown group 528 type 0x0000000000000026, data: 08 01 12 40 0A 06 08 F4 EF BB 8F 04 10 E7 C1 AD B8 02 18 01 22 2C 10 01 1A 1A 18 B4 DC F8 9B 0C 20 E7 C1 AD B8 02 28 06 30 02 A2 01 04 08 93 D6 03 A8 01 08 20 00 28 00 32 08 18 01 20 FE AF AF F5 05 28 00
// Network(1994701021) 16:03:54 : unknown group 528 type 0x0000000000000026, data: 08 01 12 40 0A 06 08 F4 EF BB 8F 04 10 E7 C1 AD B8 02 18 01 22 2C 10 01 1A 1A 18 B4 DC F8 9B 0C 20 E7 C1 AD B8 02 28 06 30 02 A2 01 04 08 93 D6 03 A8 01 08 20 00 28 00 32 08 18 01 20 FE AF AF F5 05 28 00
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/StatSvc.kt
View file @
90c0c5c5
...
@@ -28,7 +28,6 @@ import net.mamoe.mirai.qqandroid.utils.NetworkType
...
@@ -28,7 +28,6 @@ import net.mamoe.mirai.qqandroid.utils.NetworkType
import
net.mamoe.mirai.qqandroid.utils.encodeToString
import
net.mamoe.mirai.qqandroid.utils.encodeToString
import
net.mamoe.mirai.qqandroid.utils.io.serialization.*
import
net.mamoe.mirai.qqandroid.utils.io.serialization.*
import
net.mamoe.mirai.qqandroid.utils.toReadPacket
import
net.mamoe.mirai.qqandroid.utils.toReadPacket
import
net.mamoe.mirai.utils.MiraiInternalAPI
@Suppress
(
"EnumEntryName"
,
"unused"
)
@Suppress
(
"EnumEntryName"
,
"unused"
)
internal
enum
class
RegPushReason
{
internal
enum
class
RegPushReason
{
...
@@ -89,7 +88,7 @@ internal class StatSvc {
...
@@ -89,7 +88,7 @@ internal class StatSvc {
override
fun
toString
():
String
=
"Response(StatSvc.register)"
override
fun
toString
():
String
=
"Response(StatSvc.register)"
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
operator
fun
invoke
(
operator
fun
invoke
(
client
:
QQAndroidClient
,
client
:
QQAndroidClient
,
regPushReason
:
RegPushReason
=
RegPushReason
.
appRegister
regPushReason
:
RegPushReason
=
RegPushReason
.
appRegister
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/login/WtLogin.kt
View file @
90c0c5c5
...
@@ -10,7 +10,6 @@
...
@@ -10,7 +10,6 @@
package
net.mamoe.mirai.qqandroid.network.protocol.packet.login
package
net.mamoe.mirai.qqandroid.network.protocol.packet.login
import
io.ktor.util.InternalAPI
import
kotlinx.io.core.*
import
kotlinx.io.core.*
import
net.mamoe.mirai.qqandroid.QQAndroidBot
import
net.mamoe.mirai.qqandroid.QQAndroidBot
import
net.mamoe.mirai.qqandroid.network.*
import
net.mamoe.mirai.qqandroid.network.*
...
@@ -20,8 +19,6 @@ import net.mamoe.mirai.qqandroid.utils.*
...
@@ -20,8 +19,6 @@ import net.mamoe.mirai.qqandroid.utils.*
import
net.mamoe.mirai.qqandroid.utils.cryptor.TEA
import
net.mamoe.mirai.qqandroid.utils.cryptor.TEA
import
net.mamoe.mirai.qqandroid.utils.guidFlag
import
net.mamoe.mirai.qqandroid.utils.guidFlag
import
net.mamoe.mirai.qqandroid.utils.io.*
import
net.mamoe.mirai.qqandroid.utils.io.*
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.currentTimeSeconds
import
net.mamoe.mirai.utils.currentTimeSeconds
import
net.mamoe.mirai.utils.error
import
net.mamoe.mirai.utils.error
...
@@ -30,7 +27,6 @@ internal class WtLogin {
...
@@ -30,7 +27,6 @@ internal class WtLogin {
* OicqRequest
* OicqRequest
*/
*/
@Suppress
(
"FunctionName"
)
@Suppress
(
"FunctionName"
)
@OptIn
(
ExperimentalUnsignedTypes
::
class
,
MiraiInternalAPI
::
class
)
internal
object
Login
:
OutgoingPacketFactory
<
Login
.
LoginPacketResponse
>(
"wtlogin.login"
)
{
internal
object
Login
:
OutgoingPacketFactory
<
Login
.
LoginPacketResponse
>(
"wtlogin.login"
)
{
/**
/**
* 提交验证码
* 提交验证码
...
@@ -125,7 +121,6 @@ internal class WtLogin {
...
@@ -125,7 +121,6 @@ internal class WtLogin {
object
SubCommand9
{
object
SubCommand9
{
private
const
val
appId
=
16L
private
const
val
appId
=
16L
@OptIn
(
MiraiInternalAPI
::
class
,
MiraiExperimentalAPI
::
class
)
operator
fun
invoke
(
operator
fun
invoke
(
client
:
QQAndroidClient
client
:
QQAndroidClient
):
OutgoingPacket
=
buildLoginOutgoingPacket
(
client
,
bodyType
=
2
)
{
sequenceId
->
):
OutgoingPacket
=
buildLoginOutgoingPacket
(
client
,
bodyType
=
2
)
{
sequenceId
->
...
@@ -306,7 +301,6 @@ internal class WtLogin {
...
@@ -306,7 +301,6 @@ internal class WtLogin {
}
}
}
}
@InternalAPI
override
suspend
fun
ByteReadPacket
.
decode
(
bot
:
QQAndroidBot
):
LoginPacketResponse
{
override
suspend
fun
ByteReadPacket
.
decode
(
bot
:
QQAndroidBot
):
LoginPacketResponse
{
discardExact
(
2
)
// subCommand
discardExact
(
2
)
// subCommand
...
@@ -364,7 +358,6 @@ internal class WtLogin {
...
@@ -364,7 +358,6 @@ internal class WtLogin {
}
}
}
}
@InternalAPI
private
fun
onSolveLoginCaptcha
(
tlvMap
:
TlvMap
,
bot
:
QQAndroidBot
):
LoginPacketResponse
.
Captcha
{
private
fun
onSolveLoginCaptcha
(
tlvMap
:
TlvMap
,
bot
:
QQAndroidBot
):
LoginPacketResponse
.
Captcha
{
/*
/*
java.lang.IllegalStateException: UNKNOWN CAPTCHA QUESTION:
java.lang.IllegalStateException: UNKNOWN CAPTCHA QUESTION:
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/byteArrays.kt
View file @
90c0c5c5
...
@@ -18,7 +18,6 @@ import kotlinx.io.charsets.Charsets
...
@@ -18,7 +18,6 @@ import kotlinx.io.charsets.Charsets
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.String
import
kotlinx.io.core.String
import
kotlinx.io.core.use
import
kotlinx.io.core.use
import
kotlin.contracts.ExperimentalContracts
import
kotlin.contracts.InvocationKind
import
kotlin.contracts.InvocationKind
import
kotlin.contracts.contract
import
kotlin.contracts.contract
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmMultifileClass
...
@@ -29,7 +28,6 @@ import kotlin.jvm.JvmSynthetic
...
@@ -29,7 +28,6 @@ import kotlin.jvm.JvmSynthetic
@JvmOverloads
@JvmOverloads
@Suppress
(
"DuplicatedCode"
)
// false positive. foreach is not common to UByteArray and ByteArray
@Suppress
(
"DuplicatedCode"
)
// false positive. foreach is not common to UByteArray and ByteArray
@OptIn
(
ExperimentalUnsignedTypes
::
class
)
internal
fun
List
<
Byte
>.
toUHexString
(
separator
:
String
=
" "
,
offset
:
Int
=
0
,
length
:
Int
=
this
.
size
-
offset
):
String
{
internal
fun
List
<
Byte
>.
toUHexString
(
separator
:
String
=
" "
,
offset
:
Int
=
0
,
length
:
Int
=
this
.
size
-
offset
):
String
{
require
(
offset
>=
0
)
{
"offset shouldn't be negative: $offset"
}
require
(
offset
>=
0
)
{
"offset shouldn't be negative: $offset"
}
require
(
length
>=
0
)
{
"length shouldn't be negative: $length"
}
require
(
length
>=
0
)
{
"length shouldn't be negative: $length"
}
...
@@ -53,7 +51,6 @@ internal fun List<Byte>.toUHexString(separator: String = " ", offset: Int = 0, l
...
@@ -53,7 +51,6 @@ internal fun List<Byte>.toUHexString(separator: String = " ", offset: Int = 0, l
@JvmOverloads
@JvmOverloads
@Suppress
(
"DuplicatedCode"
)
// false positive. foreach is not common to UByteArray and ByteArray
@Suppress
(
"DuplicatedCode"
)
// false positive. foreach is not common to UByteArray and ByteArray
@OptIn
(
ExperimentalUnsignedTypes
::
class
)
internal
fun
ByteArray
.
toUHexString
(
separator
:
String
=
" "
,
offset
:
Int
=
0
,
length
:
Int
=
this
.
size
-
offset
):
String
{
internal
fun
ByteArray
.
toUHexString
(
separator
:
String
=
" "
,
offset
:
Int
=
0
,
length
:
Int
=
this
.
size
-
offset
):
String
{
this
.
checkOffsetAndLength
(
offset
,
length
)
this
.
checkOffsetAndLength
(
offset
,
length
)
if
(
length
==
0
)
{
if
(
length
==
0
)
{
...
@@ -100,7 +97,6 @@ internal inline fun ByteArray.encodeToString(offset: Int = 0, charset: Charset =
...
@@ -100,7 +97,6 @@ internal inline fun ByteArray.encodeToString(offset: Int = 0, charset: Charset =
internal
inline
fun
ByteArray
.
toReadPacket
(
offset
:
Int
=
0
,
length
:
Int
=
this
.
size
-
offset
)
=
internal
inline
fun
ByteArray
.
toReadPacket
(
offset
:
Int
=
0
,
length
:
Int
=
this
.
size
-
offset
)
=
ByteReadPacket
(
this
,
offset
=
offset
,
length
=
length
)
ByteReadPacket
(
this
,
offset
=
offset
,
length
=
length
)
@OptIn
(
ExperimentalContracts
::
class
)
internal
inline
fun
<
R
>
ByteArray
.
read
(
t
:
ByteReadPacket
.()
->
R
):
R
{
internal
inline
fun
<
R
>
ByteArray
.
read
(
t
:
ByteReadPacket
.()
->
R
):
R
{
contract
{
contract
{
callsInPlace
(
t
,
InvocationKind
.
EXACTLY_ONCE
)
callsInPlace
(
t
,
InvocationKind
.
EXACTLY_ONCE
)
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/io/input.kt
View file @
90c0c5c5
...
@@ -20,7 +20,6 @@ import net.mamoe.mirai.qqandroid.utils.ByteArrayPool
...
@@ -20,7 +20,6 @@ import net.mamoe.mirai.qqandroid.utils.ByteArrayPool
import
net.mamoe.mirai.qqandroid.utils.toReadPacket
import
net.mamoe.mirai.qqandroid.utils.toReadPacket
import
net.mamoe.mirai.qqandroid.utils.toUHexString
import
net.mamoe.mirai.qqandroid.utils.toUHexString
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
kotlin.contracts.ExperimentalContracts
import
kotlin.contracts.InvocationKind
import
kotlin.contracts.InvocationKind
import
kotlin.contracts.contract
import
kotlin.contracts.contract
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmMultifileClass
...
@@ -40,7 +39,6 @@ internal inline fun ByteReadPacket.readPacketExact(
...
@@ -40,7 +39,6 @@ internal inline fun ByteReadPacket.readPacketExact(
n
:
Int
=
remaining
.
toInt
()
//not that safe but adequate
n
:
Int
=
remaining
.
toInt
()
//not that safe but adequate
):
ByteReadPacket
=
this
.
readBytes
(
n
).
toReadPacket
()
):
ByteReadPacket
=
this
.
readBytes
(
n
).
toReadPacket
()
@OptIn
(
ExperimentalContracts
::
class
)
internal
inline
fun
<
C
:
Closeable
,
R
>
C
.
withUse
(
block
:
C
.()
->
R
):
R
{
internal
inline
fun
<
C
:
Closeable
,
R
>
C
.
withUse
(
block
:
C
.()
->
R
):
R
{
contract
{
contract
{
callsInPlace
(
block
,
InvocationKind
.
EXACTLY_ONCE
)
callsInPlace
(
block
,
InvocationKind
.
EXACTLY_ONCE
)
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/io/output.kt
View file @
90c0c5c5
...
@@ -16,7 +16,6 @@ package net.mamoe.mirai.qqandroid.utils.io
...
@@ -16,7 +16,6 @@ package net.mamoe.mirai.qqandroid.utils.io
import
kotlinx.io.core.*
import
kotlinx.io.core.*
import
net.mamoe.mirai.qqandroid.utils.coerceAtMostOrFail
import
net.mamoe.mirai.qqandroid.utils.coerceAtMostOrFail
import
net.mamoe.mirai.qqandroid.utils.cryptor.TEA
import
net.mamoe.mirai.qqandroid.utils.cryptor.TEA
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmName
...
@@ -66,6 +65,6 @@ internal fun BytePacketBuilder.writeHex(uHex: String) {
...
@@ -66,6 +65,6 @@ internal fun BytePacketBuilder.writeHex(uHex: String) {
}
}
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
internal
inline
fun
BytePacketBuilder
.
encryptAndWrite
(
key
:
ByteArray
,
encoder
:
BytePacketBuilder
.()
->
Unit
)
=
internal
inline
fun
BytePacketBuilder
.
encryptAndWrite
(
key
:
ByteArray
,
encoder
:
BytePacketBuilder
.()
->
Unit
)
=
TEA
.
encrypt
(
BytePacketBuilder
().
apply
(
encoder
).
build
(),
key
)
{
decrypted
->
writeFully
(
decrypted
)
}
TEA
.
encrypt
(
BytePacketBuilder
().
apply
(
encoder
).
build
(),
key
)
{
decrypted
->
writeFully
(
decrypted
)
}
\ No newline at end of file
mirai-core-qqandroid/src/commonTest/kotlin/net.mamoe.mirai.qqandroid/utils/PlatformUtilsTest.kt
View file @
90c0c5c5
...
@@ -10,11 +10,9 @@
...
@@ -10,11 +10,9 @@
package
net.mamoe.mirai.qqandroid.utils
package
net.mamoe.mirai.qqandroid.utils
import
kotlinx.io.core.toByteArray
import
kotlinx.io.core.toByteArray
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
@OptIn
(
MiraiInternalAPI
::
class
)
internal
class
PlatformUtilsTest
{
internal
class
PlatformUtilsTest
{
@Test
@Test
...
...
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
View file @
90c0c5c5
...
@@ -22,7 +22,6 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
...
@@ -22,7 +22,6 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
* QQ for Android
* QQ for Android
*/
*/
@Suppress
(
"INAPPLICABLE_JVM_NAME"
)
@Suppress
(
"INAPPLICABLE_JVM_NAME"
)
@OptIn
(
MiraiInternalAPI
::
class
)
actual
object
QQAndroid
:
BotFactory
{
actual
object
QQAndroid
:
BotFactory
{
/**
/**
...
...
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.jvm.kt
View file @
90c0c5c5
...
@@ -23,12 +23,10 @@ import net.mamoe.mirai.utils.ContextImpl
...
@@ -23,12 +23,10 @@ import net.mamoe.mirai.utils.ContextImpl
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
java.nio.ByteBuffer
import
java.nio.ByteBuffer
@OptIn
(
MiraiInternalAPI
::
class
)
@Suppress
(
"FunctionName"
)
@Suppress
(
"FunctionName"
)
internal
fun
QQAndroidBot
(
account
:
BotAccount
,
configuration
:
BotConfiguration
):
QQAndroidBot
=
internal
fun
QQAndroidBot
(
account
:
BotAccount
,
configuration
:
BotConfiguration
):
QQAndroidBot
=
QQAndroidBot
(
ContextImpl
(),
account
,
configuration
)
QQAndroidBot
(
ContextImpl
(),
account
,
configuration
)
@OptIn
(
MiraiInternalAPI
::
class
)
@Suppress
(
"DEPRECATION"
)
@Suppress
(
"DEPRECATION"
)
internal
actual
fun
ByteReadChannel
.
toKotlinByteReadChannel
():
kotlinx
.
coroutines
.
io
.
ByteReadChannel
{
internal
actual
fun
ByteReadChannel
.
toKotlinByteReadChannel
():
kotlinx
.
coroutines
.
io
.
ByteReadChannel
{
return
object
: kotlinx.coroutines.io.
ByteReadChannel
{
return
object
: kotlinx.coroutines.io.
ByteReadChannel
{
...
...
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/utils/PlatformSocket.kt
View file @
90c0c5c5
...
@@ -81,7 +81,6 @@ internal actual class PlatformSocket : Closeable {
...
@@ -81,7 +81,6 @@ internal actual class PlatformSocket : Closeable {
}
}
}
}
@OptIn
(
ExperimentalIoApi
::
class
)
actual
suspend
fun
connect
(
coroutineContext
:
CoroutineContext
,
serverHost
:
String
,
serverPort
:
Int
)
{
actual
suspend
fun
connect
(
coroutineContext
:
CoroutineContext
,
serverHost
:
String
,
serverPort
:
Int
)
{
withContext
(
Dispatchers
.
IO
)
{
withContext
(
Dispatchers
.
IO
)
{
socket
=
Socket
(
serverHost
,
serverPort
)
socket
=
Socket
(
serverHost
,
serverPort
)
...
...
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/utils/cryptor/ECDHJvm.kt
View file @
90c0c5c5
...
@@ -71,7 +71,6 @@ internal actual class ECDH actual constructor(actual val keyPair: ECDHKeyPair) {
...
@@ -71,7 +71,6 @@ internal actual class ECDH actual constructor(actual val keyPair: ECDHKeyPair) {
.
genKeyPair
())
.
genKeyPair
())
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
actual
fun
calculateShareKey
(
actual
fun
calculateShareKey
(
privateKey
:
ECDHPrivateKey
,
privateKey
:
ECDHPrivateKey
,
publicKey
:
ECDHPublicKey
publicKey
:
ECDHPublicKey
...
...
mirai-core/build.gradle.kts
View file @
90c0c5c5
...
@@ -41,6 +41,13 @@ kotlin {
...
@@ -41,6 +41,13 @@ kotlin {
all
{
all
{
languageSettings
.
enableLanguageFeature
(
"InlineClasses"
)
languageSettings
.
enableLanguageFeature
(
"InlineClasses"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.Experimental"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.Experimental"
)
languageSettings
.
useExperimentalAnnotation
(
"net.mamoe.mirai.utils.MiraiInternalAPI"
)
languageSettings
.
useExperimentalAnnotation
(
"net.mamoe.mirai.utils.MiraiExperimentalAPI"
)
languageSettings
.
useExperimentalAnnotation
(
"net.mamoe.mirai.LowLevelAPI"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.ExperimentalUnsignedTypes"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.experimental.ExperimentalTypeInference"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.time.ExperimentalTime"
)
languageSettings
.
useExperimentalAnnotation
(
"kotlin.contracts.ExperimentalContracts"
)
languageSettings
.
progressiveMode
=
true
languageSettings
.
progressiveMode
=
true
}
}
...
...
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/BotJavaFriendlyAPI.kt
View file @
90c0c5c5
...
@@ -125,14 +125,13 @@ actual abstract class BotJavaFriendlyAPI actual constructor() {
...
@@ -125,14 +125,13 @@ actual abstract class BotJavaFriendlyAPI actual constructor() {
* @param message 若需要验证请求时的验证消息.
* @param message 若需要验证请求时的验证消息.
* @param remark 好友备注
* @param remark 好友备注
*/
*/
@OptIn
(
MiraiExperimentalAPI
::
class
)
@JvmName
(
"addFriend"
)
@JvmName
(
"addFriend"
)
fun
__addFriendBlockingForJava__
(
fun
__addFriendBlockingForJava__
(
id
:
Long
,
id
:
Long
,
message
:
String
?
=
null
,
message
:
String
?
=
null
,
remark
:
String
?
=
null
remark
:
String
?
=
null
):
AddFriendResult
{
):
AddFriendResult
{
@OptIn
(
MiraiExperimentalAPI
::
class
)
return
runBlocking
{
addFriend
(
id
,
message
,
remark
)
}
return
runBlocking
{
addFriend
(
id
,
message
,
remark
)
}
}
}
...
...
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/contact/Member.kt
View file @
90c0c5c5
...
@@ -25,7 +25,6 @@ import net.mamoe.mirai.utils.WeakRefProperty
...
@@ -25,7 +25,6 @@ import net.mamoe.mirai.utils.WeakRefProperty
* 群成员.
* 群成员.
*/
*/
@Suppress
(
"INAPPLICABLE_JVM_NAME"
)
@Suppress
(
"INAPPLICABLE_JVM_NAME"
)
@OptIn
(
MiraiInternalAPI
::
class
,
JavaFriendlyAPI
::
class
)
actual
abstract
class
Member
:
MemberJavaFriendlyAPI
()
{
actual
abstract
class
Member
:
MemberJavaFriendlyAPI
()
{
/**
/**
* 所在的群.
* 所在的群.
...
...
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/message/MessagePacket.kt
View file @
90c0c5c5
...
@@ -29,7 +29,6 @@ import java.net.URL
...
@@ -29,7 +29,6 @@ import java.net.URL
message
=
"use ContactMessage"
,
message
=
"use ContactMessage"
,
replaceWith
=
ReplaceWith
(
"ContactMessage"
,
"net.mamoe.mirai.message.ContactMessage"
)
replaceWith
=
ReplaceWith
(
"ContactMessage"
,
"net.mamoe.mirai.message.ContactMessage"
)
)
)
@OptIn
(
MiraiInternalAPI
::
class
)
actual
abstract
class
MessagePacket
<
TSender
:
QQ
,
TSubject
:
Contact
>
actual
constructor
()
:
actual
abstract
class
MessagePacket
<
TSender
:
QQ
,
TSubject
:
Contact
>
actual
constructor
()
:
MessagePacketBase
<
TSender
,
TSubject
>()
{
MessagePacketBase
<
TSender
,
TSubject
>()
{
...
...
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/ExternalImage.android.kt
View file @
90c0c5c5
...
@@ -43,7 +43,6 @@ fun Bitmap.toExternalImage(formatName: String = "gif"): ExternalImage {
...
@@ -43,7 +43,6 @@ fun Bitmap.toExternalImage(formatName: String = "gif"): ExternalImage {
/**
/**
* 读取文件头识别图片属性, 然后构造 [ExternalImage]
* 读取文件头识别图片属性, 然后构造 [ExternalImage]
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
@Throws
(
IOException
::
class
)
@Throws
(
IOException
::
class
)
fun
File
.
toExternalImage
():
ExternalImage
{
fun
File
.
toExternalImage
():
ExternalImage
{
val
input
=
BitmapFactory
.
decodeFile
(
this
.
absolutePath
)
val
input
=
BitmapFactory
.
decodeFile
(
this
.
absolutePath
)
...
...
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.android.kt
View file @
90c0c5c5
...
@@ -108,8 +108,6 @@ actual open class SystemDeviceInfo actual constructor() : DeviceInfo() {
...
@@ -108,8 +108,6 @@ actual open class SystemDeviceInfo actual constructor() : DeviceInfo() {
(
context
.
applicationContext
.
getSystemService
(
Context
.
WIFI_SERVICE
)
as
WifiManager
).
connectionInfo
.
ssid
.
orEmpty
()
(
context
.
applicationContext
.
getSystemService
(
Context
.
WIFI_SERVICE
)
as
WifiManager
).
connectionInfo
.
ssid
.
orEmpty
()
.
toByteArray
()
.
toByteArray
()
}.
getOrEmpty
()
}.
getOrEmpty
()
@OptIn
(
MiraiInternalAPI
::
class
)
override
val
imsiMd5
:
ByteArray
override
val
imsiMd5
:
ByteArray
@SuppressLint
(
"HardwareIds"
)
@SuppressLint
(
"HardwareIds"
)
get
()
=
kotlin
.
runCatching
{
get
()
=
kotlin
.
runCatching
{
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/Bot.kt
View file @
90c0c5c5
...
@@ -49,7 +49,6 @@ suspend inline fun <B : Bot> B.alsoLogin(): B = also { login() }
...
@@ -49,7 +49,6 @@ suspend inline fun <B : Bot> B.alsoLogin(): B = also { login() }
* @see BotFactory 构造 [Bot] 的工厂, [Bot] 唯一的构造方式.
* @see BotFactory 构造 [Bot] 的工厂, [Bot] 唯一的构造方式.
*/
*/
@Suppress
(
"INAPPLICABLE_JVM_NAME"
)
@Suppress
(
"INAPPLICABLE_JVM_NAME"
)
@OptIn
(
MiraiInternalAPI
::
class
,
LowLevelAPI
::
class
)
abstract
class
Bot
:
CoroutineScope
,
LowLevelBotAPIAccessor
,
BotJavaFriendlyAPI
(),
ContactOrBot
{
abstract
class
Bot
:
CoroutineScope
,
LowLevelBotAPIAccessor
,
BotJavaFriendlyAPI
(),
ContactOrBot
{
companion
object
{
companion
object
{
/**
/**
...
@@ -269,7 +268,6 @@ abstract class Bot : CoroutineScope, LowLevelBotAPIAccessor, BotJavaFriendlyAPI(
...
@@ -269,7 +268,6 @@ abstract class Bot : CoroutineScope, LowLevelBotAPIAccessor, BotJavaFriendlyAPI(
*/
*/
abstract
fun
close
(
cause
:
Throwable
?
=
null
)
abstract
fun
close
(
cause
:
Throwable
?
=
null
)
@OptIn
(
LowLevelAPI
::
class
,
MiraiExperimentalAPI
::
class
)
final
override
fun
toString
():
String
=
"Bot($id)"
final
override
fun
toString
():
String
=
"Bot($id)"
/**
/**
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotImpl.kt
View file @
90c0c5c5
...
@@ -30,7 +30,6 @@ import kotlin.time.measureTime
...
@@ -30,7 +30,6 @@ import kotlin.time.measureTime
/*
/*
* 泛型 N 不需要向外(接口)暴露.
* 泛型 N 不需要向外(接口)暴露.
*/
*/
@OptIn
(
MiraiExperimentalAPI
::
class
)
@MiraiInternalAPI
@MiraiInternalAPI
abstract
class
BotImpl
<
N
:
BotNetworkHandler
>
constructor
(
abstract
class
BotImpl
<
N
:
BotNetworkHandler
>
constructor
(
context
:
Context
,
context
:
Context
,
...
@@ -254,7 +253,7 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
...
@@ -254,7 +253,7 @@ abstract class BotImpl<N : BotNetworkHandler> constructor(
}
}
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
override
fun
close
(
cause
:
Throwable
?)
{
override
fun
close
(
cause
:
Throwable
?)
{
if
(!
this
.
isActive
)
{
if
(!
this
.
isActive
)
{
// already cancelled
// already cancelled
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Group.kt
View file @
90c0c5c5
...
@@ -23,7 +23,10 @@ import net.mamoe.mirai.message.MessageReceipt
...
@@ -23,7 +23,10 @@ import net.mamoe.mirai.message.MessageReceipt
import
net.mamoe.mirai.message.data.Image
import
net.mamoe.mirai.message.data.Image
import
net.mamoe.mirai.message.data.Message
import
net.mamoe.mirai.message.data.Message
import
net.mamoe.mirai.message.data.toMessage
import
net.mamoe.mirai.message.data.toMessage
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.ExternalImage
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.OverFileSizeMaxException
import
net.mamoe.mirai.utils.get
import
net.mamoe.mirai.utils.internal.runBlocking
import
net.mamoe.mirai.utils.internal.runBlocking
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmStatic
import
kotlin.jvm.JvmStatic
...
@@ -190,7 +193,6 @@ abstract class Group : Contact(), CoroutineScope {
...
@@ -190,7 +193,6 @@ abstract class Group : Contact(), CoroutineScope {
/**
/**
* @see quit
* @see quit
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
@Suppress
(
"FunctionName"
)
@Suppress
(
"FunctionName"
)
@JvmName
(
"quit"
)
@JvmName
(
"quit"
)
@JavaFriendlyAPI
@JavaFriendlyAPI
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/contact/Member.kt
View file @
90c0c5c5
...
@@ -18,7 +18,6 @@ import net.mamoe.mirai.getFriendOrNull
...
@@ -18,7 +18,6 @@ import net.mamoe.mirai.getFriendOrNull
import
net.mamoe.mirai.message.MessageReceipt
import
net.mamoe.mirai.message.MessageReceipt
import
net.mamoe.mirai.message.data.Message
import
net.mamoe.mirai.message.data.Message
import
net.mamoe.mirai.message.data.toMessage
import
net.mamoe.mirai.message.data.toMessage
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.WeakRefProperty
import
net.mamoe.mirai.utils.WeakRefProperty
import
kotlin.jvm.JvmSynthetic
import
kotlin.jvm.JvmSynthetic
import
kotlin.time.Duration
import
kotlin.time.Duration
...
@@ -34,7 +33,7 @@ import kotlin.time.ExperimentalTime
...
@@ -34,7 +33,7 @@ import kotlin.time.ExperimentalTime
* [Member.isFriend] 判断此成员是否为好友
* [Member.isFriend] 判断此成员是否为好友
*/
*/
@Suppress
(
"INAPPLICABLE_JVM_NAME"
)
@Suppress
(
"INAPPLICABLE_JVM_NAME"
)
@OptIn
(
MiraiInternalAPI
::
class
,
JavaFriendlyAPI
::
class
)
@OptIn
(
JavaFriendlyAPI
::
class
)
abstract
class
Member
:
MemberJavaFriendlyAPI
()
{
abstract
class
Member
:
MemberJavaFriendlyAPI
()
{
/**
/**
* 所在的群.
* 所在的群.
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/Event.kt
View file @
90c0c5c5
...
@@ -14,7 +14,6 @@ package net.mamoe.mirai.event
...
@@ -14,7 +14,6 @@ package net.mamoe.mirai.event
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.CoroutineScope
import
net.mamoe.mirai.event.internal.broadcastInternal
import
net.mamoe.mirai.event.internal.broadcastInternal
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.SinceMirai
import
net.mamoe.mirai.utils.SinceMirai
import
kotlin.jvm.JvmSynthetic
import
kotlin.jvm.JvmSynthetic
import
kotlin.jvm.Volatile
import
kotlin.jvm.Volatile
...
@@ -142,7 +141,6 @@ interface CancellableEvent : Event {
...
@@ -142,7 +141,6 @@ interface CancellableEvent : Event {
/**
/**
* 广播一个事件的唯一途径.
* 广播一个事件的唯一途径.
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
suspend
fun
<
E
:
Event
>
E
.
broadcast
():
E
=
apply
{
suspend
fun
<
E
:
Event
>
E
.
broadcast
():
E
=
apply
{
if
(
this
is
BroadcastControllable
&&
!
this
.
shouldBroadcast
)
{
if
(
this
is
BroadcastControllable
&&
!
this
.
shouldBroadcast
)
{
return
@
apply
return
@
apply
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/deprecated.kt
View file @
90c0c5c5
...
@@ -26,7 +26,6 @@ import kotlinx.coroutines.channels.ReceiveChannel
...
@@ -26,7 +26,6 @@ import kotlinx.coroutines.channels.ReceiveChannel
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.event.events.BotEvent
import
net.mamoe.mirai.event.events.BotEvent
import
net.mamoe.mirai.utils.PlannedRemoval
import
net.mamoe.mirai.utils.PlannedRemoval
import
kotlin.contracts.ExperimentalContracts
import
kotlin.contracts.InvocationKind
import
kotlin.contracts.InvocationKind
import
kotlin.contracts.contract
import
kotlin.contracts.contract
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
...
@@ -64,7 +63,6 @@ abstract class AbstractCancellableEvent : AbstractEvent(), CancellableEvent
...
@@ -64,7 +63,6 @@ abstract class AbstractCancellableEvent : AbstractEvent(), CancellableEvent
level
=
DeprecationLevel
.
HIDDEN
level
=
DeprecationLevel
.
HIDDEN
)
)
@
kotlin
.
internal
.
LowPriorityInOverloadResolution
@
kotlin
.
internal
.
LowPriorityInOverloadResolution
@OptIn
(
ExperimentalContracts
::
class
)
fun
<
R
>
Bot
.
subscribeMessages
(
fun
<
R
>
Bot
.
subscribeMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
...
@@ -90,7 +88,6 @@ fun <R> Bot.subscribeMessages(
...
@@ -90,7 +88,6 @@ fun <R> Bot.subscribeMessages(
"Deprecated for better Coroutine life cycle management. Please filter bot instance on your own."
,
"Deprecated for better Coroutine life cycle management. Please filter bot instance on your own."
,
level
=
DeprecationLevel
.
HIDDEN
level
=
DeprecationLevel
.
HIDDEN
)
)
@OptIn
(
ExperimentalContracts
::
class
)
fun
<
R
>
Bot
.
subscribeGroupMessages
(
fun
<
R
>
Bot
.
subscribeGroupMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
...
@@ -116,7 +113,6 @@ fun <R> Bot.subscribeGroupMessages(
...
@@ -116,7 +113,6 @@ fun <R> Bot.subscribeGroupMessages(
"Deprecated for better Coroutine life cycle management. Please filter bot instance on your own."
,
"Deprecated for better Coroutine life cycle management. Please filter bot instance on your own."
,
level
=
DeprecationLevel
.
HIDDEN
level
=
DeprecationLevel
.
HIDDEN
)
)
@OptIn
(
ExperimentalContracts
::
class
)
fun
<
R
>
Bot
.
subscribeFriendMessages
(
fun
<
R
>
Bot
.
subscribeFriendMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
...
@@ -143,7 +139,6 @@ fun <R> Bot.subscribeFriendMessages(
...
@@ -143,7 +139,6 @@ fun <R> Bot.subscribeFriendMessages(
"Deprecated for better Coroutine life cycle management. Please filter bot instance on your own."
,
"Deprecated for better Coroutine life cycle management. Please filter bot instance on your own."
,
level
=
DeprecationLevel
.
HIDDEN
level
=
DeprecationLevel
.
HIDDEN
)
)
@OptIn
(
ExperimentalContracts
::
class
)
fun
<
R
>
Bot
.
subscribeTempMessages
(
fun
<
R
>
Bot
.
subscribeTempMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/BotEvents.kt
View file @
90c0c5c5
...
@@ -187,7 +187,6 @@ sealed class MessageRecallEvent : BotEvent, AbstractEvent() {
...
@@ -187,7 +187,6 @@ sealed class MessageRecallEvent : BotEvent, AbstractEvent() {
)
:
MessageRecallEvent
(),
GroupOperableEvent
,
Packet
)
:
MessageRecallEvent
(),
GroupOperableEvent
,
Packet
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
)
val
MessageRecallEvent
.
GroupRecall
.
author
:
Member
val
MessageRecallEvent
.
GroupRecall
.
author
:
Member
get
()
=
if
(
authorId
==
bot
.
id
)
group
.
botAsMember
else
group
[
authorId
]
get
()
=
if
(
authorId
==
bot
.
id
)
group
.
botAsMember
else
group
[
authorId
]
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/types.kt
View file @
90c0c5c5
...
@@ -14,7 +14,6 @@ import net.mamoe.mirai.contact.Friend
...
@@ -14,7 +14,6 @@ import net.mamoe.mirai.contact.Friend
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.event.Event
import
net.mamoe.mirai.event.Event
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
/**
/**
* 有关一个 [Bot] 的事件
* 有关一个 [Bot] 的事件
...
@@ -76,7 +75,6 @@ val GroupOperableEvent.isByBot: Boolean
...
@@ -76,7 +75,6 @@ val GroupOperableEvent.isByBot: Boolean
* 当操作人为 [Member] 时获取这个 [Member],
* 当操作人为 [Member] 时获取这个 [Member],
* 当操作人为 [Bot] 时获取 [Group.botAsMember]
* 当操作人为 [Bot] 时获取 [Group.botAsMember]
*/
*/
@OptIn
(
MiraiExperimentalAPI
::
class
)
val
GroupOperableEvent
.
operatorOrBot
:
Member
val
GroupOperableEvent
.
operatorOrBot
:
Member
get
()
=
this
.
operator
?:
this
.
group
.
botAsMember
get
()
=
this
.
operator
?:
this
.
group
.
botAsMember
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/internal/InternalEventListeners.kt
View file @
90c0c5c5
...
@@ -15,7 +15,10 @@ import kotlinx.coroutines.sync.Mutex
...
@@ -15,7 +15,10 @@ import kotlinx.coroutines.sync.Mutex
import
kotlinx.coroutines.sync.withLock
import
kotlinx.coroutines.sync.withLock
import
net.mamoe.mirai.event.*
import
net.mamoe.mirai.event.*
import
net.mamoe.mirai.event.events.BotEvent
import
net.mamoe.mirai.event.events.BotEvent
import
net.mamoe.mirai.utils.*
import
net.mamoe.mirai.utils.LockFreeLinkedList
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.MiraiLogger
import
net.mamoe.mirai.utils.PlannedRemoval
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.coroutineContext
import
kotlin.coroutines.coroutineContext
import
kotlin.jvm.JvmField
import
kotlin.jvm.JvmField
...
@@ -26,10 +29,8 @@ internal fun <L : Listener<E>, E : Event> KClass<out E>.subscribeInternal(listen
...
@@ -26,10 +29,8 @@ internal fun <L : Listener<E>, E : Event> KClass<out E>.subscribeInternal(listen
with
(
GlobalEventListeners
[
listener
.
priority
])
{
with
(
GlobalEventListeners
[
listener
.
priority
])
{
@Suppress
(
"UNCHECKED_CAST"
)
@Suppress
(
"UNCHECKED_CAST"
)
val
node
=
ListenerNode
(
listener
as
Listener
<
Event
>,
this
@
subscribeInternal
)
val
node
=
ListenerNode
(
listener
as
Listener
<
Event
>,
this
@
subscribeInternal
)
@OptIn
(
MiraiInternalAPI
::
class
)
addLast
(
node
)
addLast
(
node
)
listener
.
invokeOnCompletion
{
listener
.
invokeOnCompletion
{
@OptIn
(
MiraiInternalAPI
::
class
)
this
.
remove
(
node
)
this
.
remove
(
node
)
}
}
}
}
...
@@ -128,13 +129,11 @@ internal expect class MiraiAtomicBoolean(initial: Boolean) {
...
@@ -128,13 +129,11 @@ internal expect class MiraiAtomicBoolean(initial: Boolean) {
// inline: NO extra Continuation
// inline: NO extra Continuation
@Suppress
(
"UNCHECKED_CAST"
)
@Suppress
(
"UNCHECKED_CAST"
)
internal
suspend
inline
fun
Event
.
broadcastInternal
()
{
internal
suspend
inline
fun
Event
.
broadcastInternal
()
{
@OptIn
(
MiraiExperimentalAPI
::
class
)
if
(
EventDisabled
)
return
if
(
EventDisabled
)
return
callAndRemoveIfRequired
(
this
@
broadcastInternal
as
?
AbstractEvent
?:
error
(
"Events must extends AbstractEvent"
))
callAndRemoveIfRequired
(
this
@
broadcastInternal
as
?
AbstractEvent
?:
error
(
"Events must extends AbstractEvent"
))
}
}
@Suppress
(
"DuplicatedCode"
)
@Suppress
(
"DuplicatedCode"
)
@OptIn
(
MiraiInternalAPI
::
class
)
internal
suspend
fun
<
E
:
AbstractEvent
>
callAndRemoveIfRequired
(
internal
suspend
fun
<
E
:
AbstractEvent
>
callAndRemoveIfRequired
(
event
:
E
event
:
E
)
{
)
{
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/select.kt
View file @
90c0c5c5
...
@@ -18,7 +18,6 @@ import net.mamoe.mirai.message.data.PlainText
...
@@ -18,7 +18,6 @@ import net.mamoe.mirai.message.data.PlainText
import
net.mamoe.mirai.message.isContextIdenticalWith
import
net.mamoe.mirai.message.isContextIdenticalWith
import
net.mamoe.mirai.message.nextMessage
import
net.mamoe.mirai.message.nextMessage
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
kotlin.experimental.ExperimentalTypeInference
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmSynthetic
import
kotlin.jvm.JvmSynthetic
...
@@ -69,7 +68,6 @@ suspend inline fun <reified T : MessageEvent> T.whileSelectMessages(
...
@@ -69,7 +68,6 @@ suspend inline fun <reified T : MessageEvent> T.whileSelectMessages(
/**
/**
* [selectMessages] 的 [Unit] 返回值捷径 (由于 Kotlin 无法推断 [Unit] 类型)
* [selectMessages] 的 [Unit] 返回值捷径 (由于 Kotlin 无法推断 [Unit] 类型)
*/
*/
@OptIn
(
ExperimentalTypeInference
::
class
)
@MiraiExperimentalAPI
@MiraiExperimentalAPI
@JvmName
(
"selectMessages1"
)
@JvmName
(
"selectMessages1"
)
suspend
inline
fun
<
reified
T
:
MessageEvent
>
T
.
selectMessagesUnit
(
suspend
inline
fun
<
reified
T
:
MessageEvent
>
T
.
selectMessagesUnit
(
...
@@ -474,7 +472,6 @@ internal val ExceptionHandlerIgnoringCancellationException = CoroutineExceptionH
...
@@ -474,7 +472,6 @@ internal val ExceptionHandlerIgnoringCancellationException = CoroutineExceptionH
@PublishedApi
@PublishedApi
@BuilderInference
@BuilderInference
@OptIn
(
ExperimentalTypeInference
::
class
)
internal
suspend
inline
fun
<
reified
T
:
MessageEvent
,
R
>
T
.
selectMessagesImpl
(
internal
suspend
inline
fun
<
reified
T
:
MessageEvent
,
R
>
T
.
selectMessagesImpl
(
timeoutMillis
:
Long
=
-
1
,
timeoutMillis
:
Long
=
-
1
,
isUnit
:
Boolean
,
isUnit
:
Boolean
,
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt
View file @
90c0c5c5
...
@@ -22,7 +22,6 @@ import net.mamoe.mirai.message.FriendMessageEvent
...
@@ -22,7 +22,6 @@ import net.mamoe.mirai.message.FriendMessageEvent
import
net.mamoe.mirai.message.GroupMessageEvent
import
net.mamoe.mirai.message.GroupMessageEvent
import
net.mamoe.mirai.message.MessageEvent
import
net.mamoe.mirai.message.MessageEvent
import
net.mamoe.mirai.message.TempMessageEvent
import
net.mamoe.mirai.message.TempMessageEvent
import
kotlin.contracts.ExperimentalContracts
import
kotlin.contracts.InvocationKind
import
kotlin.contracts.InvocationKind
import
kotlin.contracts.contract
import
kotlin.contracts.contract
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
...
@@ -39,7 +38,7 @@ typealias MessagePacketSubscribersBuilder = MessageSubscribersBuilder<MessageEve
...
@@ -39,7 +38,7 @@ typealias MessagePacketSubscribersBuilder = MessageSubscribersBuilder<MessageEve
*
*
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
fun
<
R
>
CoroutineScope
.
subscribeMessages
(
fun
<
R
>
CoroutineScope
.
subscribeMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
...
@@ -73,7 +72,6 @@ typealias GroupMessageSubscribersBuilder = MessageSubscribersBuilder<GroupMessag
...
@@ -73,7 +72,6 @@ typealias GroupMessageSubscribersBuilder = MessageSubscribersBuilder<GroupMessag
*
*
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
fun
<
R
>
CoroutineScope
.
subscribeGroupMessages
(
fun
<
R
>
CoroutineScope
.
subscribeGroupMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
...
@@ -101,7 +99,6 @@ typealias FriendMessageSubscribersBuilder = MessageSubscribersBuilder<FriendMess
...
@@ -101,7 +99,6 @@ typealias FriendMessageSubscribersBuilder = MessageSubscribersBuilder<FriendMess
*
*
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
fun
<
R
>
CoroutineScope
.
subscribeFriendMessages
(
fun
<
R
>
CoroutineScope
.
subscribeFriendMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
...
@@ -129,7 +126,6 @@ typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder<TempMessageE
...
@@ -129,7 +126,6 @@ typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder<TempMessageE
*
*
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
* @see CoroutineScope.incoming 打开一个指定事件的接收通道
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
fun
<
R
>
CoroutineScope
.
subscribeTempMessages
(
fun
<
R
>
CoroutineScope
.
subscribeTempMessages
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
concurrencyKind
:
Listener
.
ConcurrencyKind
=
Listener
.
ConcurrencyKind
.
CONCURRENT
,
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscriberDeprecated.kt
View file @
90c0c5c5
...
@@ -22,7 +22,6 @@ import net.mamoe.mirai.event.Listener.EventPriority.NORMAL
...
@@ -22,7 +22,6 @@ import net.mamoe.mirai.event.Listener.EventPriority.NORMAL
import
net.mamoe.mirai.event.events.BotEvent
import
net.mamoe.mirai.event.events.BotEvent
import
net.mamoe.mirai.event.internal.Handler
import
net.mamoe.mirai.event.internal.Handler
import
net.mamoe.mirai.event.internal.subscribeInternal
import
net.mamoe.mirai.event.internal.subscribeInternal
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.PlannedRemoval
import
net.mamoe.mirai.utils.PlannedRemoval
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
...
@@ -41,7 +40,6 @@ import kotlin.reflect.KClass
...
@@ -41,7 +40,6 @@ import kotlin.reflect.KClass
@Suppress
(
"DeprecatedCallableAddReplaceWith"
,
"DEPRECATION"
)
@Suppress
(
"DeprecatedCallableAddReplaceWith"
,
"DEPRECATION"
)
@JvmSynthetic
@JvmSynthetic
@JvmName
(
"subscribeAlwaysForBot"
)
@JvmName
(
"subscribeAlwaysForBot"
)
@OptIn
(
MiraiInternalAPI
::
class
)
@
kotlin
.
internal
.
LowPriorityInOverloadResolution
@
kotlin
.
internal
.
LowPriorityInOverloadResolution
@Deprecated
(
@Deprecated
(
"Deprecated for better Coroutine life cycle management. Please filter bot instance on your own."
,
"Deprecated for better Coroutine life cycle management. Please filter bot instance on your own."
,
...
@@ -80,7 +78,6 @@ fun <E : BotEvent> Bot.subscribe(
...
@@ -80,7 +78,6 @@ fun <E : BotEvent> Bot.subscribe(
@JvmSynthetic
@JvmSynthetic
@JvmName
(
"subscribeAlwaysForBot1"
)
@JvmName
(
"subscribeAlwaysForBot1"
)
@
kotlin
.
internal
.
LowPriorityInOverloadResolution
@
kotlin
.
internal
.
LowPriorityInOverloadResolution
@OptIn
(
MiraiInternalAPI
::
class
)
@Deprecated
(
@Deprecated
(
"Deprecated for better Coroutine life cycle management. Please filter bot instance on your own."
,
"Deprecated for better Coroutine life cycle management. Please filter bot instance on your own."
,
level
=
DeprecationLevel
.
HIDDEN
level
=
DeprecationLevel
.
HIDDEN
...
@@ -248,7 +245,6 @@ fun <E : Event> CoroutineScope.subscribeOnceDeprecated(
...
@@ -248,7 +245,6 @@ fun <E : Event> CoroutineScope.subscribeOnceDeprecated(
@PlannedRemoval
(
"1.2.0"
)
@PlannedRemoval
(
"1.2.0"
)
@JvmSynthetic
@JvmSynthetic
@JvmName
(
"subscribeAlwaysForBot"
)
@JvmName
(
"subscribeAlwaysForBot"
)
@OptIn
(
MiraiInternalAPI
::
class
)
@Deprecated
(
"for binary compatibility"
,
level
=
DeprecationLevel
.
HIDDEN
)
@Deprecated
(
"for binary compatibility"
,
level
=
DeprecationLevel
.
HIDDEN
)
@Suppress
(
"unused"
)
@Suppress
(
"unused"
)
inline
fun
<
reified
E
:
BotEvent
>
Bot
.
subscribeDeprecated
(
inline
fun
<
reified
E
:
BotEvent
>
Bot
.
subscribeDeprecated
(
...
@@ -285,7 +281,6 @@ fun <E : BotEvent> Bot.subscribeDeprecated(
...
@@ -285,7 +281,6 @@ fun <E : BotEvent> Bot.subscribeDeprecated(
@JvmName
(
"subscribeAlwaysForBot1"
)
@JvmName
(
"subscribeAlwaysForBot1"
)
@Deprecated
(
"for binary compatibility"
,
level
=
DeprecationLevel
.
HIDDEN
)
@Deprecated
(
"for binary compatibility"
,
level
=
DeprecationLevel
.
HIDDEN
)
@Suppress
(
"unused"
)
@Suppress
(
"unused"
)
@OptIn
(
MiraiInternalAPI
::
class
)
inline
fun
<
reified
E
:
BotEvent
>
Bot
.
subscribeAlwaysDeprecated
(
inline
fun
<
reified
E
:
BotEvent
>
Bot
.
subscribeAlwaysDeprecated
(
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
coroutineContext
:
CoroutineContext
=
EmptyCoroutineContext
,
concurrency
:
Listener
.
ConcurrencyKind
=
CONCURRENT
,
concurrency
:
Listener
.
ConcurrencyKind
=
CONCURRENT
,
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/MessageReceipt.kt
View file @
90c0c5c5
...
@@ -18,7 +18,6 @@ import net.mamoe.mirai.contact.*
...
@@ -18,7 +18,6 @@ import net.mamoe.mirai.contact.*
import
net.mamoe.mirai.message.data.*
import
net.mamoe.mirai.message.data.*
import
net.mamoe.mirai.recallIn
import
net.mamoe.mirai.recallIn
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.internal.runBlocking
import
net.mamoe.mirai.utils.internal.runBlocking
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
...
@@ -42,7 +41,6 @@ import kotlin.jvm.JvmSynthetic
...
@@ -42,7 +41,6 @@ import kotlin.jvm.JvmSynthetic
* @see MessageReceipt.sourceId 源 id
* @see MessageReceipt.sourceId 源 id
* @see MessageReceipt.sourceTime 源时间
* @see MessageReceipt.sourceTime 源时间
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
open
class
MessageReceipt
<
out
C
:
Contact
>(
open
class
MessageReceipt
<
out
C
:
Contact
>(
/**
/**
* 指代发送出去的消息.
* 指代发送出去的消息.
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/CombinedMessage.kt
View file @
90c0c5c5
...
@@ -12,7 +12,6 @@
...
@@ -12,7 +12,6 @@
package
net.mamoe.mirai.message.data
package
net.mamoe.mirai.message.data
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.PlannedRemoval
import
net.mamoe.mirai.utils.PlannedRemoval
import
kotlin.jvm.JvmField
import
kotlin.jvm.JvmField
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmMultifileClass
...
@@ -53,7 +52,7 @@ internal constructor(
...
@@ -53,7 +52,7 @@ internal constructor(
private
var
toStringCache
:
String
?
=
null
private
var
toStringCache
:
String
?
=
null
@OptIn
(
MiraiExperimentalAPI
::
class
)
override
fun
toString
():
String
=
toStringCache
?:
(
left
.
toString
()
+
tail
.
toString
()).
also
{
toStringCache
=
it
}
override
fun
toString
():
String
=
toStringCache
?:
(
left
.
toString
()
+
tail
.
toString
()).
also
{
toStringCache
=
it
}
private
var
contentToStringCache
:
String
?
=
null
private
var
contentToStringCache
:
String
?
=
null
...
@@ -70,7 +69,7 @@ internal constructor(
...
@@ -70,7 +69,7 @@ internal constructor(
/*
/*
@JvmSynthetic
@JvmSynthetic
// 不要把它用作 local function, 会编译错误
// 不要把它用作 local function, 会编译错误
@OptIn(MiraiExperimentalAPI::class, MiraiInternalAPI::class)
private suspend fun SequenceScope<SingleMessage>.yieldCombinedOrElementsFlatten(message: Message) {
private suspend fun SequenceScope<SingleMessage>.yieldCombinedOrElementsFlatten(message: Message) {
when (message) {
when (message) {
is CombinedMessage -> {
is CombinedMessage -> {
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/CustomMessage.kt
View file @
90c0c5c5
...
@@ -114,7 +114,6 @@ sealed class CustomMessage : SingleMessage {
...
@@ -114,7 +114,6 @@ sealed class CustomMessage : SingleMessage {
override
val
typeName
:
String
get
()
=
"CustomMessage"
override
val
typeName
:
String
get
()
=
"CustomMessage"
private
val
factories
:
LockFreeLinkedList
<
Factory
<
*
>>
=
LockFreeLinkedList
()
private
val
factories
:
LockFreeLinkedList
<
Factory
<
*
>>
=
LockFreeLinkedList
()
@OptIn
(
MiraiInternalAPI
::
class
)
internal
fun
register
(
factory
:
Factory
<
out
CustomMessage
>)
{
internal
fun
register
(
factory
:
Factory
<
out
CustomMessage
>)
{
factories
.
removeIf
{
it
::
class
== factory::class }
factories
.
removeIf
{
it
::
class
== factory::class }
val exist = factories.as
Sequence
().
firstOrNull
{
it
.
typeName
==
factory
.
typeName
}
val exist = factories.as
Sequence
().
firstOrNull
{
it
.
typeName
==
factory
.
typeName
}
...
@@ -135,7 +134,6 @@ sealed class CustomMessage : SingleMessage {
...
@@ -135,7 +134,6 @@ sealed class CustomMessage : SingleMessage {
class
CustomMessageFullDataDeserializeUserException
(
val
body
:
ByteArray
,
cause
:
Throwable
?)
:
class
CustomMessageFullDataDeserializeUserException
(
val
body
:
ByteArray
,
cause
:
Throwable
?)
:
RuntimeException
(
cause
)
RuntimeException
(
cause
)
@OptIn
(
MiraiInternalAPI
::
class
)
internal
fun
deserialize
(
fullData
:
ByteReadPacket
):
CustomMessage
?
{
internal
fun
deserialize
(
fullData
:
ByteReadPacket
):
CustomMessage
?
{
val
msg
=
kotlin
.
runCatching
{
val
msg
=
kotlin
.
runCatching
{
val
length
=
fullData
.
readInt
()
val
length
=
fullData
.
readInt
()
...
@@ -194,7 +192,6 @@ abstract class CustomMessageMetadata : CustomMessage(), MessageMetadata {
...
@@ -194,7 +192,6 @@ abstract class CustomMessageMetadata : CustomMessage(), MessageMetadata {
@Suppress
(
"NOTHING_TO_INLINE"
)
@Suppress
(
"NOTHING_TO_INLINE"
)
@OptIn
(
MiraiExperimentalAPI
::
class
)
internal
inline
fun
<
T
:
CustomMessageMetadata
>
T
.
customToStringImpl
(
factory
:
CustomMessage
.
Factory
<
*
>):
ByteArray
{
internal
inline
fun
<
T
:
CustomMessageMetadata
>
T
.
customToStringImpl
(
factory
:
CustomMessage
.
Factory
<
*
>):
ByteArray
{
@Suppress
(
"UNCHECKED_CAST"
)
@Suppress
(
"UNCHECKED_CAST"
)
return
(
factory
as
CustomMessage
.
Factory
<
T
>).
serialize
(
this
)
return
(
factory
as
CustomMessage
.
Factory
<
T
>).
serialize
(
this
)
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/ForwardMessage.kt
View file @
90c0c5c5
...
@@ -542,8 +542,6 @@ class ForwardMessageBuilder private constructor(
...
@@ -542,8 +542,6 @@ class ForwardMessageBuilder private constructor(
/** 构造 [ForwardMessage] */
/** 构造 [ForwardMessage] */
fun
build
():
ForwardMessage
=
ForwardMessage
(
container
.
toList
(),
this
.
displayStrategy
)
fun
build
():
ForwardMessage
=
ForwardMessage
(
container
.
toList
(),
this
.
displayStrategy
)
@OptIn
(
MiraiExperimentalAPI
::
class
)
internal
fun
Bot
.
smartName
():
String
=
when
(
val
c
=
this
@ForwardMessageBuilder
.
context
)
{
internal
fun
Bot
.
smartName
():
String
=
when
(
val
c
=
this
@ForwardMessageBuilder
.
context
)
{
is
Group
->
c
.
botAsMember
.
nameCardOrNick
is
Group
->
c
.
botAsMember
.
nameCardOrNick
else
->
nick
else
->
nick
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/HummerMessage.kt
View file @
90c0c5c5
...
@@ -15,8 +15,6 @@ package net.mamoe.mirai.message.data
...
@@ -15,8 +15,6 @@ package net.mamoe.mirai.message.data
import
net.mamoe.mirai.message.data.PokeMessage.Types
import
net.mamoe.mirai.message.data.PokeMessage.Types
import
net.mamoe.mirai.message.data.VipFace.Companion
import
net.mamoe.mirai.message.data.VipFace.Companion
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
kotlin.jvm.*
import
kotlin.jvm.*
/**
/**
...
@@ -42,7 +40,6 @@ sealed class HummerMessage : MessageContent {
...
@@ -42,7 +40,6 @@ sealed class HummerMessage : MessageContent {
*
*
* @see Types 使用伴生对象中的常量
* @see Types 使用伴生对象中的常量
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
data class
PokeMessage
internal
constructor
(
data class
PokeMessage
internal
constructor
(
/**
/**
* 仅 mirai, 显示的名称
* 仅 mirai, 显示的名称
...
@@ -133,7 +130,7 @@ data class PokeMessage internal constructor(
...
@@ -133,7 +130,7 @@ data class PokeMessage internal constructor(
)
)
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
)
private
val
stringValue
=
"[mirai:poke:$type,$id]"
private
val
stringValue
=
"[mirai:poke:$type,$id]"
override
fun
toString
():
String
=
stringValue
override
fun
toString
():
String
=
stringValue
...
@@ -155,7 +152,6 @@ data class PokeMessage internal constructor(
...
@@ -155,7 +152,6 @@ data class PokeMessage internal constructor(
*
*
* @see Types 使用伴生对象中的常量
* @see Types 使用伴生对象中的常量
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
data class
VipFace
internal
constructor
(
data class
VipFace
internal
constructor
(
/**
/**
* 使用 [Companion] 中常量.
* 使用 [Companion] 中常量.
...
@@ -217,7 +213,7 @@ data class VipFace internal constructor(
...
@@ -217,7 +213,7 @@ data class VipFace internal constructor(
private
infix
fun
Int
.
to
(
name
:
String
):
Kind
=
Kind
(
this
,
name
)
private
infix
fun
Int
.
to
(
name
:
String
):
Kind
=
Kind
(
this
,
name
)
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
)
private
val
stringValue
=
"[mirai:vipface:$kind,$count]"
private
val
stringValue
=
"[mirai:vipface:$kind,$count]"
override
fun
toString
():
String
=
stringValue
override
fun
toString
():
String
=
stringValue
...
@@ -245,7 +241,7 @@ sealed class FlashImage : MessageContent, HummerMessage() {
...
@@ -245,7 +241,7 @@ sealed class FlashImage : MessageContent, HummerMessage() {
@JvmStatic
@JvmStatic
@JvmName
(
"from"
)
@JvmName
(
"from"
)
operator
fun
invoke
(
image
:
Image
):
FlashImage
{
operator
fun
invoke
(
image
:
Image
):
FlashImage
{
@OptIn
(
MiraiInternalAPI
::
class
)
return
when
(
image
)
{
return
when
(
image
)
{
is
GroupImage
->
GroupFlashImage
(
image
)
is
GroupImage
->
GroupFlashImage
(
image
)
is
FriendImage
->
FriendFlashImage
(
image
)
is
FriendImage
->
FriendFlashImage
(
image
)
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Image.kt
View file @
90c0c5c5
...
@@ -100,7 +100,6 @@ expect interface Image : Message, MessageContent {
...
@@ -100,7 +100,6 @@ expect interface Image : Message, MessageContent {
@PlannedRemoval
(
"1.2.0"
)
// make internal
@PlannedRemoval
(
"1.2.0"
)
// make internal
@Suppress
(
"DEPRECATION_ERROR"
)
@Suppress
(
"DEPRECATION_ERROR"
)
// CustomFace
// CustomFace
@OptIn
(
MiraiInternalAPI
::
class
)
sealed
class
GroupImage
:
AbstractImage
()
{
sealed
class
GroupImage
:
AbstractImage
()
{
companion
object
Key
:
Message
.
Key
<
GroupImage
>
{
companion
object
Key
:
Message
.
Key
<
GroupImage
>
{
override
val
typeName
:
String
get
()
=
"GroupImage"
override
val
typeName
:
String
get
()
=
"GroupImage"
...
@@ -124,7 +123,6 @@ val Image.md5: ByteArray
...
@@ -124,7 +123,6 @@ val Image.md5: ByteArray
*/
// NotOnlineImage
*/
// NotOnlineImage
@PlannedRemoval
(
"1.2.0"
)
// make internal
@PlannedRemoval
(
"1.2.0"
)
// make internal
@Suppress
(
"DEPRECATION_ERROR"
)
@Suppress
(
"DEPRECATION_ERROR"
)
@OptIn
(
MiraiInternalAPI
::
class
)
sealed
class
FriendImage
:
AbstractImage
()
{
sealed
class
FriendImage
:
AbstractImage
()
{
companion
object
Key
:
Message
.
Key
<
FriendImage
>
{
companion
object
Key
:
Message
.
Key
<
FriendImage
>
{
override
val
typeName
:
String
get
()
=
"FriendImage"
override
val
typeName
:
String
get
()
=
"FriendImage"
...
@@ -190,7 +188,6 @@ fun Image(imageId: String): OfflineImage = when {
...
@@ -190,7 +188,6 @@ fun Image(imageId: String): OfflineImage = when {
@JvmSynthetic
@JvmSynthetic
suspend
fun
Image
.
queryUrl
():
String
{
suspend
fun
Image
.
queryUrl
():
String
{
@Suppress
(
"DEPRECATION"
)
@Suppress
(
"DEPRECATION"
)
@OptIn
(
MiraiInternalAPI
::
class
)
return
when
(
this
)
{
return
when
(
this
)
{
is
OnlineImage
->
this
.
originUrl
is
OnlineImage
->
this
.
originUrl
else
->
BotImpl
.
instances
.
peekFirst
().
get
()
?.
queryImageUrl
(
this
)
else
->
BotImpl
.
instances
.
peekFirst
().
get
()
?.
queryImageUrl
(
this
)
...
@@ -248,7 +245,6 @@ interface OfflineImage : Image {
...
@@ -248,7 +245,6 @@ interface OfflineImage : Image {
)
)
@JvmSynthetic
@JvmSynthetic
suspend
fun
OfflineImage
.
queryUrl
():
String
{
suspend
fun
OfflineImage
.
queryUrl
():
String
{
@OptIn
(
MiraiInternalAPI
::
class
)
return
BotImpl
.
instances
.
peekFirst
().
get
()
?.
queryImageUrl
(
this
)
?:
error
(
"No Bot available to query image url"
)
return
BotImpl
.
instances
.
peekFirst
().
get
()
?.
queryImageUrl
(
this
)
?:
error
(
"No Bot available to query image url"
)
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/Message.kt
View file @
90c0c5c5
...
@@ -17,9 +17,7 @@ import net.mamoe.mirai.contact.Contact
...
@@ -17,9 +17,7 @@ import net.mamoe.mirai.contact.Contact
import
net.mamoe.mirai.message.MessageEvent
import
net.mamoe.mirai.message.MessageEvent
import
net.mamoe.mirai.message.MessageReceipt
import
net.mamoe.mirai.message.MessageReceipt
import
net.mamoe.mirai.message.data.Message.Key
import
net.mamoe.mirai.message.data.Message.Key
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.PlannedRemoval
import
net.mamoe.mirai.utils.PlannedRemoval
import
kotlin.contracts.ExperimentalContracts
import
kotlin.contracts.contract
import
kotlin.contracts.contract
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmName
...
@@ -78,7 +76,6 @@ import kotlin.jvm.JvmSynthetic
...
@@ -78,7 +76,6 @@ import kotlin.jvm.JvmSynthetic
*
*
* @see Contact.sendMessage 发送消息
* @see Contact.sendMessage 发送消息
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
interface
Message
{
// must be interface. Don't consider any changes.
interface
Message
{
// must be interface. Don't consider any changes.
/**
/**
* 类型 Key. 由伴生对象实现, 表示一个 [Message] 对象的类型.
* 类型 Key. 由伴生对象实现, 表示一个 [Message] 对象的类型.
...
@@ -205,7 +202,6 @@ inline val Message.content: String
...
@@ -205,7 +202,6 @@ inline val Message.content: String
* - [PlainText] 长度为 0
* - [PlainText] 长度为 0
* - [MessageChain] 所有元素都满足 [isContentEmpty]
* - [MessageChain] 所有元素都满足 [isContentEmpty]
*/
*/
@OptIn
(
ExperimentalContracts
::
class
)
fun
Message
.
isContentEmpty
():
Boolean
{
fun
Message
.
isContentEmpty
():
Boolean
{
contract
{
contract
{
returns
(
false
)
implies
(
this
@
isContentEmpty
is
MessageContent
)
returns
(
false
)
implies
(
this
@
isContentEmpty
is
MessageContent
)
...
@@ -218,7 +214,6 @@ fun Message.isContentEmpty(): Boolean {
...
@@ -218,7 +214,6 @@ fun Message.isContentEmpty(): Boolean {
}
}
}
}
@OptIn
(
ExperimentalContracts
::
class
)
inline
fun
Message
.
isContentNotEmpty
():
Boolean
{
inline
fun
Message
.
isContentNotEmpty
():
Boolean
{
contract
{
contract
{
returns
(
true
)
implies
(
this
@
isContentNotEmpty
is
MessageContent
)
returns
(
true
)
implies
(
this
@
isContentNotEmpty
is
MessageContent
)
...
@@ -226,7 +221,6 @@ inline fun Message.isContentNotEmpty(): Boolean {
...
@@ -226,7 +221,6 @@ inline fun Message.isContentNotEmpty(): Boolean {
return
!
this
.
isContentEmpty
()
return
!
this
.
isContentEmpty
()
}
}
@OptIn
(
ExperimentalContracts
::
class
)
inline
fun
Message
.
isPlain
():
Boolean
{
inline
fun
Message
.
isPlain
():
Boolean
{
contract
{
contract
{
returns
(
true
)
implies
(
this
@
isPlain
is
PlainText
)
returns
(
true
)
implies
(
this
@
isPlain
is
PlainText
)
...
@@ -235,7 +229,6 @@ inline fun Message.isPlain(): Boolean {
...
@@ -235,7 +229,6 @@ inline fun Message.isPlain(): Boolean {
return
this
is
PlainText
return
this
is
PlainText
}
}
@OptIn
(
ExperimentalContracts
::
class
)
inline
fun
Message
.
isNotPlain
():
Boolean
{
inline
fun
Message
.
isNotPlain
():
Boolean
{
contract
{
contract
{
returns
(
false
)
implies
(
this
@
isNotPlain
is
PlainText
)
returns
(
false
)
implies
(
this
@
isNotPlain
is
PlainText
)
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChain.kt
View file @
90c0c5c5
...
@@ -15,7 +15,6 @@
...
@@ -15,7 +15,6 @@
package
net.mamoe.mirai.message.data
package
net.mamoe.mirai.message.data
import
net.mamoe.mirai.JavaFriendlyAPI
import
net.mamoe.mirai.JavaFriendlyAPI
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.PlannedRemoval
import
net.mamoe.mirai.utils.PlannedRemoval
import
kotlin.js.JsName
import
kotlin.js.JsName
...
@@ -173,7 +172,6 @@ inline fun <reified M : Message> MessageChain.anyIsInstance(): Boolean = this.an
...
@@ -173,7 +172,6 @@ inline fun <reified M : Message> MessageChain.anyIsInstance(): Boolean = this.an
/**
/**
* 获取第一个 [M] 类型的 [Message] 实例
* 获取第一个 [M] 类型的 [Message] 实例
*/
*/
@OptIn
(
MiraiExperimentalAPI
::
class
)
@JvmSynthetic
@JvmSynthetic
@Suppress
(
"UNCHECKED_CAST"
)
@Suppress
(
"UNCHECKED_CAST"
)
fun
<
M
:
Message
>
MessageChain
.
firstOrNull
(
key
:
Message
.
Key
<
M
>):
M
?
=
firstOrNullImpl
(
key
)
fun
<
M
:
Message
>
MessageChain
.
firstOrNull
(
key
:
Message
.
Key
<
M
>):
M
?
=
firstOrNullImpl
(
key
)
...
@@ -278,7 +276,6 @@ inline fun messageChainOf(vararg messages: Message): MessageChain = messages.asM
...
@@ -278,7 +276,6 @@ inline fun messageChainOf(vararg messages: Message): MessageChain = messages.asM
@JvmName
(
"newChain"
)
@JvmName
(
"newChain"
)
@JsName
(
"newChain"
)
@JsName
(
"newChain"
)
@Suppress
(
"UNCHECKED_CAST"
)
@Suppress
(
"UNCHECKED_CAST"
)
@OptIn
(
MiraiInternalAPI
::
class
)
fun
Message
.
asMessageChain
():
MessageChain
=
when
(
this
)
{
fun
Message
.
asMessageChain
():
MessageChain
=
when
(
this
)
{
is
MessageChain
->
this
is
MessageChain
->
this
is
CombinedMessage
->
(
this
as
Iterable
<
Message
>).
asMessageChain
()
is
CombinedMessage
->
(
this
as
Iterable
<
Message
>).
asMessageChain
()
...
@@ -409,7 +406,6 @@ inline fun Array<out SingleMessage>.flatten(): Sequence<SingleMessage> = this.as
...
@@ -409,7 +406,6 @@ inline fun Array<out SingleMessage>.flatten(): Sequence<SingleMessage> = this.as
* - 其他: 返回 `sequenceOf(this)`
* - 其他: 返回 `sequenceOf(this)`
*/
*/
fun
Message
.
flatten
():
Sequence
<
SingleMessage
>
{
fun
Message
.
flatten
():
Sequence
<
SingleMessage
>
{
@OptIn
(
MiraiInternalAPI
::
class
)
return
when
(
this
)
{
return
when
(
this
)
{
is
MessageChain
->
this
.
asSequence
()
is
MessageChain
->
this
.
asSequence
()
is
CombinedMessage
->
this
.
asSequence
()
// already constrained single.
is
CombinedMessage
->
this
.
asSequence
()
// already constrained single.
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageChainBuilder.kt
View file @
90c0c5c5
...
@@ -13,7 +13,6 @@
...
@@ -13,7 +13,6 @@
package
net.mamoe.mirai.message.data
package
net.mamoe.mirai.message.data
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmSynthetic
import
kotlin.jvm.JvmSynthetic
...
@@ -48,7 +47,6 @@ inline fun buildMessageChain(initialSize: Int, block: MessageChainBuilder.() ->
...
@@ -48,7 +47,6 @@ inline fun buildMessageChain(initialSize: Int, block: MessageChainBuilder.() ->
* @see buildMessageChain 推荐使用
* @see buildMessageChain 推荐使用
* @see asMessageChain 完成构建
* @see asMessageChain 完成构建
*/
*/
@OptIn
(
MiraiExperimentalAPI
::
class
)
open
class
MessageChainBuilder
private
constructor
(
open
class
MessageChainBuilder
private
constructor
(
private
val
container
:
MutableList
<
SingleMessage
>
private
val
container
:
MutableList
<
SingleMessage
>
)
:
MutableList
<
SingleMessage
>
by
container
,
Appendable
{
)
:
MutableList
<
SingleMessage
>
by
container
,
Appendable
{
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/MessageSource.kt
View file @
90c0c5c5
...
@@ -20,8 +20,6 @@ import net.mamoe.mirai.message.MessageEvent
...
@@ -20,8 +20,6 @@ import net.mamoe.mirai.message.MessageEvent
import
net.mamoe.mirai.message.MessageReceipt
import
net.mamoe.mirai.message.MessageReceipt
import
net.mamoe.mirai.recallIn
import
net.mamoe.mirai.recallIn
import
net.mamoe.mirai.utils.LazyProperty
import
net.mamoe.mirai.utils.LazyProperty
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmMultifileClass
...
@@ -58,7 +56,6 @@ import kotlin.jvm.JvmSynthetic
...
@@ -58,7 +56,6 @@ import kotlin.jvm.JvmSynthetic
* @see OnlineMessageSource 在线消息的 [MessageSource]
* @see OnlineMessageSource 在线消息的 [MessageSource]
* @see OfflineMessageSource 离线消息的 [MessageSource]
* @see OfflineMessageSource 离线消息的 [MessageSource]
*/
*/
@OptIn
(
MiraiExperimentalAPI
::
class
)
sealed
class
MessageSource
:
Message
,
MessageMetadata
,
ConstrainSingle
<
MessageSource
>
{
sealed
class
MessageSource
:
Message
,
MessageMetadata
,
ConstrainSingle
<
MessageSource
>
{
companion
object
Key
:
Message
.
Key
<
MessageSource
>
{
companion
object
Key
:
Message
.
Key
<
MessageSource
>
{
override
val
typeName
:
String
get
()
=
"MessageSource"
override
val
typeName
:
String
get
()
=
"MessageSource"
...
@@ -156,7 +153,6 @@ sealed class MessageSource : Message, MessageMetadata, ConstrainSingle<MessageSo
...
@@ -156,7 +153,6 @@ sealed class MessageSource : Message, MessageMetadata, ConstrainSingle<MessageSo
*
*
* @see OnlineMessageSource.toOffline 转为 [OfflineMessageSource]
* @see OnlineMessageSource.toOffline 转为 [OfflineMessageSource]
*/
*/
@OptIn
(
MiraiExperimentalAPI
::
class
)
sealed
class
OnlineMessageSource
:
MessageSource
()
{
sealed
class
OnlineMessageSource
:
MessageSource
()
{
companion
object
Key
:
Message
.
Key
<
OnlineMessageSource
>
{
companion
object
Key
:
Message
.
Key
<
OnlineMessageSource
>
{
override
val
typeName
:
String
get
()
=
"OnlineMessageSource"
override
val
typeName
:
String
get
()
=
"OnlineMessageSource"
...
@@ -336,7 +332,7 @@ inline fun MessageSource.isAboutFriend(): Boolean {
...
@@ -336,7 +332,7 @@ inline fun MessageSource.isAboutFriend(): Boolean {
* @see QuoteReply
* @see QuoteReply
*/
*/
fun
MessageSource
.
quote
():
QuoteReply
{
fun
MessageSource
.
quote
():
QuoteReply
{
@OptIn
(
MiraiInternalAPI
::
class
)
return
QuoteReply
(
this
)
return
QuoteReply
(
this
)
}
}
...
@@ -345,7 +341,7 @@ fun MessageSource.quote(): QuoteReply {
...
@@ -345,7 +341,7 @@ fun MessageSource.quote(): QuoteReply {
* @see QuoteReply
* @see QuoteReply
*/
*/
fun
MessageChain
.
quote
():
QuoteReply
{
fun
MessageChain
.
quote
():
QuoteReply
{
@OptIn
(
MiraiInternalAPI
::
class
)
return
QuoteReply
(
this
.
source
)
return
QuoteReply
(
this
.
source
)
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/QuoteReply.kt
View file @
90c0c5c5
...
@@ -15,7 +15,6 @@ package net.mamoe.mirai.message.data
...
@@ -15,7 +15,6 @@ package net.mamoe.mirai.message.data
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.Job
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.PlannedRemoval
import
net.mamoe.mirai.utils.PlannedRemoval
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
import
kotlin.coroutines.EmptyCoroutineContext
...
@@ -45,7 +44,6 @@ import kotlin.jvm.JvmSynthetic
...
@@ -45,7 +44,6 @@ import kotlin.jvm.JvmSynthetic
*
*
* @see MessageSource 获取有关消息源的更多信息
* @see MessageSource 获取有关消息源的更多信息
*/
*/
@OptIn
(
MiraiExperimentalAPI
::
class
)
class
QuoteReply
(
val
source
:
MessageSource
)
:
Message
,
MessageMetadata
,
ConstrainSingle
<
QuoteReply
>
{
class
QuoteReply
(
val
source
:
MessageSource
)
:
Message
,
MessageMetadata
,
ConstrainSingle
<
QuoteReply
>
{
companion
object
Key
:
Message
.
Key
<
QuoteReply
>
{
companion
object
Key
:
Message
.
Key
<
QuoteReply
>
{
override
val
typeName
:
String
override
val
typeName
:
String
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/RichMessage.kt
View file @
90c0c5c5
...
@@ -227,5 +227,5 @@ internal class LongMessage internal constructor(content: String, val resId: Stri
...
@@ -227,5 +227,5 @@ internal class LongMessage internal constructor(content: String, val resId: Stri
}
}
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
)
internal
class
ForwardMessageInternal
(
content
:
String
)
:
ServiceMessage
(
35
,
content
)
internal
class
ForwardMessageInternal
(
content
:
String
)
:
ServiceMessage
(
35
,
content
)
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/impl.kt
View file @
90c0c5c5
...
@@ -14,7 +14,6 @@
...
@@ -14,7 +14,6 @@
package
net.mamoe.mirai.message.data
package
net.mamoe.mirai.message.data
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmMultifileClass
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmSynthetic
import
kotlin.jvm.JvmSynthetic
...
@@ -23,9 +22,6 @@ import kotlin.native.concurrent.SharedImmutable
...
@@ -23,9 +22,6 @@ import kotlin.native.concurrent.SharedImmutable
/////////////////////////
/////////////////////////
//// IMPLEMENTATIONS ////
//// IMPLEMENTATIONS ////
/////////////////////////
/////////////////////////
@OptIn
(
MiraiInternalAPI
::
class
)
private
fun
Message
.
hasDuplicationOfConstrain
(
key
:
Message
.
Key
<
*
>):
Boolean
{
private
fun
Message
.
hasDuplicationOfConstrain
(
key
:
Message
.
Key
<
*
>):
Boolean
{
return
when
(
this
)
{
return
when
(
this
)
{
is
SingleMessage
->
(
this
as
?
ConstrainSingle
<
*
>)
?.
key
==
key
is
SingleMessage
->
(
this
as
?
ConstrainSingle
<
*
>)
?.
key
==
key
...
@@ -129,7 +125,6 @@ internal fun Message.followedByImpl(tail: Message): MessageChain {
...
@@ -129,7 +125,6 @@ internal fun Message.followedByImpl(tail: Message): MessageChain {
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
)
@JvmSynthetic
@JvmSynthetic
internal
fun
Sequence
<
SingleMessage
>.
constrainSingleMessages
():
List
<
SingleMessage
>
{
internal
fun
Sequence
<
SingleMessage
>.
constrainSingleMessages
():
List
<
SingleMessage
>
{
val
iterator
=
this
.
iterator
()
val
iterator
=
this
.
iterator
()
...
@@ -169,7 +164,7 @@ internal inline fun constrainSingleMessagesImpl(iterator: () -> SingleMessage?):
...
@@ -169,7 +164,7 @@ internal inline fun constrainSingleMessagesImpl(iterator: () -> SingleMessage?):
}
}
@JvmSynthetic
@JvmSynthetic
@OptIn
(
MiraiExperimentalAPI
::
class
)
internal
fun
Iterable
<
SingleMessage
>.
constrainSingleMessages
():
List
<
SingleMessage
>
{
internal
fun
Iterable
<
SingleMessage
>.
constrainSingleMessages
():
List
<
SingleMessage
>
{
val
iterator
=
this
.
iterator
()
val
iterator
=
this
.
iterator
()
return
constrainSingleMessagesImpl
supplier
@
{
return
constrainSingleMessagesImpl
supplier
@
{
...
@@ -189,7 +184,6 @@ internal inline fun <T> List<T>.indexOfFirst(offset: Int, predicate: (T) -> Bool
...
@@ -189,7 +184,6 @@ internal inline fun <T> List<T>.indexOfFirst(offset: Int, predicate: (T) -> Bool
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
)
@JvmSynthetic
@JvmSynthetic
@Suppress
(
"UNCHECKED_CAST"
,
"DEPRECATION_ERROR"
,
"DEPRECATION"
)
@Suppress
(
"UNCHECKED_CAST"
,
"DEPRECATION_ERROR"
,
"DEPRECATION"
)
internal
fun
<
M
:
Message
>
MessageChain
.
firstOrNullImpl
(
key
:
Message
.
Key
<
M
>):
M
?
=
when
(
key
)
{
internal
fun
<
M
:
Message
>
MessageChain
.
firstOrNullImpl
(
key
:
Message
.
Key
<
M
>):
M
?
=
when
(
key
)
{
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/network/BotNetworkHandler.kt
View file @
90c0c5c5
...
@@ -124,7 +124,7 @@ abstract class BotNetworkHandler : CoroutineScope {
...
@@ -124,7 +124,7 @@ abstract class BotNetworkHandler : CoroutineScope {
}
}
@MiraiInternalAPI
@MiraiInternalAPI
@OptIn
(
MiraiInternalAPI
::
class
)
suspend
fun
BotNetworkHandler
.
closeAndJoin
(
cause
:
Throwable
?
=
null
)
{
suspend
fun
BotNetworkHandler
.
closeAndJoin
(
cause
:
Throwable
?
=
null
)
{
this
.
close
(
cause
)
this
.
close
(
cause
)
this
.
supervisor
.
join
()
this
.
supervisor
.
join
()
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/BotConfiguration.kt
View file @
90c0c5c5
...
@@ -29,7 +29,6 @@ open class BotConfiguration {
...
@@ -29,7 +29,6 @@ open class BotConfiguration {
var
botLoggerSupplier
:
((
Bot
)
->
MiraiLogger
)
=
{
DefaultLogger
(
"Bot(${it.id})"
)
}
var
botLoggerSupplier
:
((
Bot
)
->
MiraiLogger
)
=
{
DefaultLogger
(
"Bot(${it.id})"
)
}
/** 网络层日志构造器 */
/** 网络层日志构造器 */
@OptIn
(
MiraiInternalAPI
::
class
)
var
networkLoggerSupplier
:
((
BotNetworkHandler
)
->
MiraiLogger
)
=
{
DefaultLogger
(
"Network(${it.bot.id})"
)
}
var
networkLoggerSupplier
:
((
BotNetworkHandler
)
->
MiraiLogger
)
=
{
DefaultLogger
(
"Network(${it.bot.id})"
)
}
/** 设备信息覆盖. 默认使用随机的设备信息. */
/** 设备信息覆盖. 默认使用随机的设备信息. */
...
@@ -99,7 +98,6 @@ open class BotConfiguration {
...
@@ -99,7 +98,6 @@ open class BotConfiguration {
/**
/**
* 不显示网络日志
* 不显示网络日志
*/
*/
@OptIn
(
MiraiInternalAPI
::
class
)
@ConfigurationDsl
@ConfigurationDsl
fun
noNetworkLog
()
{
fun
noNetworkLog
()
{
networkLoggerSupplier
=
{
_
:
BotNetworkHandler
->
SilentLogger
}
networkLoggerSupplier
=
{
_
:
BotNetworkHandler
->
SilentLogger
}
...
@@ -137,7 +135,6 @@ open class BotConfiguration {
...
@@ -137,7 +135,6 @@ open class BotConfiguration {
@SinceMirai
(
"1.0.0"
)
@SinceMirai
(
"1.0.0"
)
fun
copy
():
BotConfiguration
{
fun
copy
():
BotConfiguration
{
@OptIn
(
MiraiExperimentalAPI
::
class
)
return
BotConfiguration
().
also
{
new
->
return
BotConfiguration
().
also
{
new
->
new
.
botLoggerSupplier
=
botLoggerSupplier
new
.
botLoggerSupplier
=
botLoggerSupplier
new
.
networkLoggerSupplier
=
networkLoggerSupplier
new
.
networkLoggerSupplier
=
networkLoggerSupplier
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/DeviceInfo.kt
View file @
90c0c5c5
...
@@ -92,7 +92,6 @@ abstract class DeviceInfo {
...
@@ -92,7 +92,6 @@ abstract class DeviceInfo {
}
}
}
}
@OptIn
(
MiraiInternalAPI
::
class
)
@Serializable
@Serializable
class
DeviceInfoData
(
class
DeviceInfoData
(
override
val
display
:
ByteArray
,
override
val
display
:
ByteArray
,
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/internal/DeferredReusableInput.common.kt
View file @
90c0c5c5
package
net.mamoe.mirai.utils.internal
package
net.mamoe.mirai.utils.internal
import
net.mamoe.mirai.utils.FileCacheStrategy
import
net.mamoe.mirai.utils.FileCacheStrategy
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
internal
expect
class
DeferredReusableInput
(
input
:
Any
,
extraArg
:
Any
?)
:
ReusableInput
{
internal
expect
class
DeferredReusableInput
(
input
:
Any
,
extraArg
:
Any
?)
:
ReusableInput
{
val
initialized
:
Boolean
val
initialized
:
Boolean
@OptIn
(
MiraiExperimentalAPI
::
class
)
suspend
fun
init
(
strategy
:
FileCacheStrategy
)
suspend
fun
init
(
strategy
:
FileCacheStrategy
)
}
}
\ No newline at end of file
mirai-core/src/commonTest/kotlin/net/mamoe/mirai/message.data/CombinedMessageTest.kt
View file @
90c0c5c5
package
net.mamoe.mirai.message.data
package
net.mamoe.mirai.message.data
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
@OptIn
(
MiraiInternalAPI
::
class
)
internal
class
CombinedMessageTest
{
internal
class
CombinedMessageTest
{
...
...
mirai-core/src/commonTest/kotlin/net/mamoe/mirai/message.data/ConstrainSingleTest.kt
View file @
90c0c5c5
...
@@ -9,15 +9,12 @@
...
@@ -9,15 +9,12 @@
package
net.mamoe.mirai.message.data
package
net.mamoe.mirai.message.data
import
net.mamoe.mirai.utils.MiraiExperimentalAPI
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
import
kotlin.test.assertSame
import
kotlin.test.assertSame
import
kotlin.test.assertTrue
import
kotlin.test.assertTrue
@OptIn
(
MiraiExperimentalAPI
::
class
)
internal
class
TestConstrainSingleMessage
:
ConstrainSingle
<
TestConstrainSingleMessage
>,
Any
()
{
internal
class
TestConstrainSingleMessage
:
ConstrainSingle
<
TestConstrainSingleMessage
>,
Any
()
{
companion
object
Key
:
Message
.
Key
<
TestConstrainSingleMessage
>
{
companion
object
Key
:
Message
.
Key
<
TestConstrainSingleMessage
>
{
override
val
typeName
:
String
override
val
typeName
:
String
...
@@ -30,10 +27,10 @@ internal class TestConstrainSingleMessage : ConstrainSingle<TestConstrainSingleM
...
@@ -30,10 +27,10 @@ internal class TestConstrainSingleMessage : ConstrainSingle<TestConstrainSingleM
get
()
=
Key
get
()
=
Key
}
}
@OptIn
(
MiraiExperimentalAPI
::
class
)
internal
class
ConstrainSingleTest
{
internal
class
ConstrainSingleTest
{
@OptIn
(
MiraiInternalAPI
::
class
)
@Test
@Test
fun
testCombine
()
{
fun
testCombine
()
{
val
result
=
PlainText
(
"te"
)
+
PlainText
(
"st"
)
val
result
=
PlainText
(
"te"
)
+
PlainText
(
"st"
)
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/FileCacheStrategy.jvm.kt
View file @
90c0c5c5
...
@@ -186,7 +186,6 @@ actual interface FileCacheStrategy {
...
@@ -186,7 +186,6 @@ actual interface FileCacheStrategy {
}
}
}
}
@OptIn
(
ExperimentalContracts
::
class
)
internal
inline
fun
<
I
:
Closeable
,
O
:
Closeable
,
R
>
I
.
withOut
(
output
:
O
,
block
:
I
.(
output
:
O
)
->
R
):
R
{
internal
inline
fun
<
I
:
Closeable
,
O
:
Closeable
,
R
>
I
.
withOut
(
output
:
O
,
block
:
I
.(
output
:
O
)
->
R
):
R
{
contract
{
contract
{
callsInPlace
(
block
,
InvocationKind
.
EXACTLY_ONCE
)
callsInPlace
(
block
,
InvocationKind
.
EXACTLY_ONCE
)
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/LoginSolver.jvm.kt
View file @
90c0c5c5
...
@@ -145,7 +145,7 @@ actual abstract class LoginSolver {
...
@@ -145,7 +145,7 @@ actual abstract class LoginSolver {
actual
companion
object
{
actual
companion
object
{
actual
val
Default
:
LoginSolver
=
actual
val
Default
:
LoginSolver
=
@OptIn
(
MiraiExperimentalAPI
::
class
)
DefaultLoginSolver
({
readLine
()
?:
throw
NoStandardInputForCaptchaException
(
null
)
})
DefaultLoginSolver
({
readLine
()
?:
throw
NoStandardInputForCaptchaException
(
null
)
})
}
}
}
}
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/SystemDeviceInfo.kt
View file @
90c0c5c5
...
@@ -36,7 +36,6 @@ fun File.loadAsDeviceInfo(context: Context = ContextImpl()): DeviceInfo {
...
@@ -36,7 +36,6 @@ fun File.loadAsDeviceInfo(context: Context = ContextImpl()): DeviceInfo {
private
val
JSON
=
Json
(
JsonConfiguration
.
Stable
)
private
val
JSON
=
Json
(
JsonConfiguration
.
Stable
)
@Serializable
@Serializable
@OptIn
(
ExperimentalUnsignedTypes
::
class
,
MiraiInternalAPI
::
class
)
actual
open
class
SystemDeviceInfo
actual
constructor
()
:
DeviceInfo
()
{
actual
open
class
SystemDeviceInfo
actual
constructor
()
:
DeviceInfo
()
{
actual
constructor
(
context
:
Context
)
:
this
()
{
actual
constructor
(
context
:
Context
)
:
this
()
{
this
.
context
=
context
this
.
context
=
context
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/internal/DeferredReusableInput.jvm.kt
View file @
90c0c5c5
...
@@ -15,7 +15,7 @@ internal actual class DeferredReusableInput actual constructor(
...
@@ -15,7 +15,7 @@ internal actual class DeferredReusableInput actual constructor(
)
:
ReusableInput
{
)
:
ReusableInput
{
@OptIn
(
MiraiExperimentalAPI
::
class
)
actual
suspend
fun
init
(
strategy
:
FileCacheStrategy
)
=
withContext
(
Dispatchers
.
IO
)
{
actual
suspend
fun
init
(
strategy
:
FileCacheStrategy
)
=
withContext
(
Dispatchers
.
IO
)
{
if
(
delegate
!=
null
)
{
if
(
delegate
!=
null
)
{
return
@
withContext
return
@
withContext
...
...
mirai-core/src/jvmTest/kotlin/net/mamoe/mirai/event/EventTests.kt
View file @
90c0c5c5
...
@@ -219,7 +219,6 @@ class EventTests {
...
@@ -219,7 +219,6 @@ class EventTests {
*/
*/
fun
resetEventListeners
()
{
fun
resetEventListeners
()
{
for
(
p
in
Listener
.
EventPriority
.
values
())
{
for
(
p
in
Listener
.
EventPriority
.
values
())
{
@OptIn
(
MiraiInternalAPI
::
class
)
GlobalEventListeners
[
p
].
clear
()
GlobalEventListeners
[
p
].
clear
()
}
}
}
}
...
...
mirai-core/src/jvmTest/kotlin/net/mamoe/mirai/event/JvmMethodEventsTest.kt
View file @
90c0c5c5
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
* https://github.com/mamoe/mirai/blob/master/LICENSE
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
*/
@
file
:
Suppress
(
"RedundantSuspendModifier"
,
"unused"
)
@
file
:
Suppress
(
"RedundantSuspendModifier"
,
"unused"
,
"UNUSED_PARAMETER"
)
package
net.mamoe.mirai.event
package
net.mamoe.mirai.event
...
@@ -28,32 +28,38 @@ internal class JvmMethodEventsTest {
...
@@ -28,32 +28,38 @@ internal class JvmMethodEventsTest {
fun
getCalled
()
=
called
.
get
()
fun
getCalled
()
=
called
.
get
()
@Suppress
(
"unused"
)
@EventHandler
@EventHandler
suspend
fun
TestEvent
.
`suspend
receiver
param
Unit`
(
event
:
TestEvent
)
{
suspend
fun
TestEvent
.
`suspend
receiver
param
Unit`
(
event
:
TestEvent
)
{
called
.
getAndIncrement
()
called
.
getAndIncrement
()
}
}
@Suppress
(
"unused"
)
@EventHandler
@EventHandler
suspend
fun
TestEvent
.
`suspend
receiver
Unit`
()
{
suspend
fun
TestEvent
.
`suspend
receiver
Unit`
()
{
called
.
getAndIncrement
()
called
.
getAndIncrement
()
}
}
@Suppress
(
"unused"
)
@EventHandler
@EventHandler
suspend
fun
`suspend
param
Unit`
(
event
:
TestEvent
)
{
suspend
fun
`suspend
param
Unit`
(
event
:
TestEvent
)
{
called
.
getAndIncrement
()
called
.
getAndIncrement
()
}
}
@EventHandler
@EventHandler
@Suppress
(
"unused"
)
fun
TestEvent
.
`receiver
param
Unit`
(
event
:
TestEvent
)
{
fun
TestEvent
.
`receiver
param
Unit`
(
event
:
TestEvent
)
{
called
.
getAndIncrement
()
called
.
getAndIncrement
()
}
}
@EventHandler
@EventHandler
@Suppress
(
"unused"
)
suspend
fun
TestEvent
.
`suspend
receiver
param
LS`
(
event
:
TestEvent
):
ListeningStatus
{
suspend
fun
TestEvent
.
`suspend
receiver
param
LS`
(
event
:
TestEvent
):
ListeningStatus
{
called
.
getAndIncrement
()
called
.
getAndIncrement
()
return
ListeningStatus
.
STOPPED
return
ListeningStatus
.
STOPPED
}
}
@Suppress
(
"unused"
)
@EventHandler
@EventHandler
suspend
fun
TestEvent
.
`suspend
receiver
LS`
():
ListeningStatus
{
suspend
fun
TestEvent
.
`suspend
receiver
LS`
():
ListeningStatus
{
called
.
getAndIncrement
()
called
.
getAndIncrement
()
...
@@ -61,12 +67,14 @@ internal class JvmMethodEventsTest {
...
@@ -61,12 +67,14 @@ internal class JvmMethodEventsTest {
}
}
@EventHandler
@EventHandler
@Suppress
(
"unused"
)
suspend
fun
`suspend
param
LS`
(
event
:
TestEvent
):
ListeningStatus
{
suspend
fun
`suspend
param
LS`
(
event
:
TestEvent
):
ListeningStatus
{
called
.
getAndIncrement
()
called
.
getAndIncrement
()
return
ListeningStatus
.
STOPPED
return
ListeningStatus
.
STOPPED
}
}
@EventHandler
@EventHandler
@Suppress
(
"unused"
)
fun
TestEvent
.
`receiver
param
LS`
(
event
:
TestEvent
):
ListeningStatus
{
fun
TestEvent
.
`receiver
param
LS`
(
event
:
TestEvent
):
ListeningStatus
{
called
.
getAndIncrement
()
called
.
getAndIncrement
()
return
ListeningStatus
.
STOPPED
return
ListeningStatus
.
STOPPED
...
@@ -91,13 +99,15 @@ internal class JvmMethodEventsTest {
...
@@ -91,13 +99,15 @@ internal class JvmMethodEventsTest {
fun
getCalled
()
=
called
.
get
()
fun
getCalled
()
=
called
.
get
()
@EventHandler
(
Listener
.
EventPriority
.
HIGHEST
)
@Suppress
(
"unused"
)
@EventHandler
(
EventPriority
.
HIGHEST
)
private
suspend
fun
TestEvent
.
`suspend
receiver
param
Unit`
(
event
:
TestEvent
)
{
private
suspend
fun
TestEvent
.
`suspend
receiver
param
Unit`
(
event
:
TestEvent
)
{
intercept
()
intercept
()
called
.
getAndIncrement
()
called
.
getAndIncrement
()
}
}
@EventHandler
(
EventPriority
.
MONITOR
)
@EventHandler
(
EventPriority
.
MONITOR
)
@Suppress
(
"unused"
)
private
fun
TestEvent
.
`receiver
param
LS`
(
event
:
TestEvent
):
ListeningStatus
{
private
fun
TestEvent
.
`receiver
param
LS`
(
event
:
TestEvent
):
ListeningStatus
{
called
.
getAndIncrement
()
called
.
getAndIncrement
()
return
ListeningStatus
.
STOPPED
return
ListeningStatus
.
STOPPED
...
...
mirai-core/src/jvmTest/kotlin/net/mamoe/mirai/utils/LockFreeLinkedListTest.kt
View file @
90c0c5c5
...
@@ -20,7 +20,6 @@ import kotlin.test.assertFalse
...
@@ -20,7 +20,6 @@ import kotlin.test.assertFalse
import
kotlin.test.assertTrue
import
kotlin.test.assertTrue
@Suppress
(
"UnusedEquals"
)
@Suppress
(
"UnusedEquals"
)
@OptIn
(
MiraiInternalAPI
::
class
)
@MiraiExperimentalAPI
@MiraiExperimentalAPI
internal
class
LockFreeLinkedListTest
{
internal
class
LockFreeLinkedListTest
{
@Test
@Test
...
@@ -136,7 +135,6 @@ internal class LockFreeLinkedListTest {
...
@@ -136,7 +135,6 @@ internal class LockFreeLinkedListTest {
list
.
size
shouldBeEqualTo
0
list
.
size
shouldBeEqualTo
0
}
}
@OptIn
(
ExperimentalUnsignedTypes
::
class
)
@Test
@Test
fun
withInlineClassElements
()
{
fun
withInlineClassElements
()
{
val
list
=
LockFreeLinkedList
<
UInt
>()
val
list
=
LockFreeLinkedList
<
UInt
>()
...
@@ -264,7 +262,7 @@ internal class LockFreeLinkedListTest {
...
@@ -264,7 +262,7 @@ internal class LockFreeLinkedListTest {
*/
*/
}
}
@OptIn
(
ExperimentalCoroutinesApi
::
class
,
MiraiInternalAPI
::
class
)
@OptIn
(
ExperimentalCoroutinesApi
::
class
)
@MiraiExperimentalAPI
@MiraiExperimentalAPI
internal
suspend
inline
fun
<
E
:
LockFreeLinkedList
<
*
>>
E
.
concurrentDo
(
internal
suspend
inline
fun
<
E
:
LockFreeLinkedList
<
*
>>
E
.
concurrentDo
(
numberOfCoroutines
:
Int
,
numberOfCoroutines
:
Int
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment