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
be7c5376
Commit
be7c5376
authored
Jan 31, 2020
by
jiahua.liu
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
221a4fe9
357e7d77
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
110 additions
and
53 deletions
+110
-53
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
...androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
+18
-0
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
...roidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
+1
-1
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/utils/Context.kt
...oidMain/kotlin/net/mamoe/mirai/qqandroid/utils/Context.kt
+0
-3
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/BotFactory.kt
...commonMain/kotlin/net/mamoe/mirai/qqandroid/BotFactory.kt
+8
-0
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
...mmonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
+1
-1
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
...moe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
+3
-1
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt
...tlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt
+0
-1
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/DeviceInfo.kt
...Main/kotlin/net/mamoe/mirai/qqandroid/utils/DeviceInfo.kt
+1
-0
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/SystemDeviceInfo.kt
...otlin/net/mamoe/mirai/qqandroid/utils/SystemDeviceInfo.kt
+2
-0
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
...src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
+30
-0
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
.../jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
+5
-2
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/utils/SystemDeviceInfo.kt
...otlin/net/mamoe/mirai/qqandroid/utils/SystemDeviceInfo.kt
+2
-5
mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/TIMPC.kt
...impc/src/commonMain/kotlin/net.mamoe.mirai.timpc/TIMPC.kt
+9
-1
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/Context.kt
...e/src/androidMain/kotlin/net/mamoe/mirai/utils/Context.kt
+3
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotAccount.kt
...-core/src/commonMain/kotlin/net.mamoe.mirai/BotAccount.kt
+3
-1
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotFactory.kt
...-core/src/commonMain/kotlin/net.mamoe.mirai/BotFactory.kt
+6
-15
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt
...onMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt
+2
-2
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/Context.kt
...re/src/commonMain/kotlin/net.mamoe.mirai/utils/Context.kt
+1
-1
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/BotFactoryJvm.kt
...-core/src/jvmMain/kotlin/net/mamoe/mirai/BotFactoryJvm.kt
+10
-19
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/Context.kt
...-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/Context.kt
+5
-0
No files found.
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
0 → 100644
View file @
be7c5376
package
net.mamoe.mirai.qqandroid
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.BotFactory
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.Context
import
net.mamoe.mirai.utils.MiraiInternalAPI
/**
* QQ for Android
*/
actual
object
QQAndroid
:
BotFactory
{
@UseExperimental
(
MiraiInternalAPI
::
class
)
override
fun
Bot
(
context
:
Context
,
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
):
Bot
{
return
QQAndroidBot
(
context
,
BotAccount
(
qq
,
password
),
configuration
)
}
}
\ No newline at end of file
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
View file @
be7c5376
package
net.mamoe.mirai.qqandroid
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.qqandroid.utils.Context
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.Context
internal
actual
class
QQAndroidBot
actual
constructor
(
context
:
Context
,
...
...
mirai-core-qqandroid/src/androidMain/kotlin/net/mamoe/mirai/qqandroid/utils/Context.kt
deleted
100644 → 0
View file @
221a4fe9
package
net.mamoe.mirai.qqandroid.utils
actual
typealias
Context
=
android
.
content
.
Context
\ No newline at end of file
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/BotFactory.kt
0 → 100644
View file @
be7c5376
package
net.mamoe.mirai.qqandroid
import
net.mamoe.mirai.BotFactory
/**
* QQ for Android
*/
expect
object
QQAndroid
:
BotFactory
\ No newline at end of file
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
View file @
be7c5376
...
...
@@ -8,9 +8,9 @@ import net.mamoe.mirai.data.ImageLink
import
net.mamoe.mirai.message.data.Image
import
net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler
import
net.mamoe.mirai.qqandroid.network.QQAndroidClient
import
net.mamoe.mirai.qqandroid.utils.Context
import
net.mamoe.mirai.qqandroid.utils.ImageIdQQA
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.Context
import
net.mamoe.mirai.utils.LockFreeLinkedList
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
kotlin.coroutines.CoroutineContext
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
View file @
be7c5376
...
...
@@ -404,7 +404,9 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
}
override
fun
dispose
(
cause
:
Throwable
?)
{
channel
.
close
()
if
(
::
channel
.
isInitialized
)
{
channel
.
close
()
}
super
.
dispose
(
cause
)
}
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidClient.kt
View file @
be7c5376
...
...
@@ -11,7 +11,6 @@ import net.mamoe.mirai.qqandroid.QQAndroidBot
import
net.mamoe.mirai.qqandroid.network.protocol.packet.EMPTY_BYTE_ARRAY
import
net.mamoe.mirai.qqandroid.network.protocol.packet.PacketLogger
import
net.mamoe.mirai.qqandroid.network.protocol.packet.Tlv
import
net.mamoe.mirai.qqandroid.utils.Context
import
net.mamoe.mirai.qqandroid.utils.DeviceInfo
import
net.mamoe.mirai.qqandroid.utils.NetworkType
import
net.mamoe.mirai.qqandroid.utils.SystemDeviceInfo
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/DeviceInfo.kt
View file @
be7c5376
...
...
@@ -3,6 +3,7 @@ package net.mamoe.mirai.qqandroid.utils
import
kotlinx.serialization.SerialId
import
kotlinx.serialization.Serializable
import
net.mamoe.mirai.qqandroid.io.serialization.ProtoBufWithNullableSupport
import
net.mamoe.mirai.utils.Context
import
net.mamoe.mirai.utils.cryptor.contentToString
import
net.mamoe.mirai.utils.getValue
import
net.mamoe.mirai.utils.unsafeWeakRef
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/utils/SystemDeviceInfo.kt
View file @
be7c5376
package
net.mamoe.mirai.qqandroid.utils
import
net.mamoe.mirai.utils.Context
/**
* System default values
*/
...
...
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroid.kt
0 → 100644
View file @
be7c5376
@
file
:
Suppress
(
"FunctionName"
)
package
net.mamoe.mirai.qqandroid
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.BotFactory
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.Context
import
net.mamoe.mirai.utils.MiraiInternalAPI
/**
* QQ for Android
*/
@UseExperimental
(
MiraiInternalAPI
::
class
)
actual
object
QQAndroid
:
BotFactory
{
override
fun
Bot
(
context
:
Context
,
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
):
Bot
{
return
QQAndroidBot
(
context
,
BotAccount
(
qq
,
password
),
configuration
)
}
fun
Bot
(
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
=
BotConfiguration
.
Default
):
Bot
=
QQAndroidBot
(
BotAccount
(
qq
,
password
),
configuration
)
}
/**
* 使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
inline
fun
QQAndroid
.
Bot
(
qq
:
Long
,
password
:
String
,
configuration
:
(
BotConfiguration
.()
->
Unit
)):
Bot
=
this
.
Bot
(
qq
,
password
,
BotConfiguration
().
apply
(
configuration
))
\ No newline at end of file
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/QQAndroidBot.kt
View file @
be7c5376
package
net.mamoe.mirai.qqandroid
import
net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.qqandroid.utils.Context
import
net.mamoe.mirai.qqandroid.utils.ContextImpl
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.Context
import
net.mamoe.mirai.utils.ContextImpl
import
net.mamoe.mirai.utils.MiraiInternalAPI
@UseExperimental
(
MiraiInternalAPI
::
class
)
@Suppress
(
"FunctionName"
)
internal
fun
QQAndroidBot
(
account
:
BotAccount
,
configuration
:
BotConfiguration
):
QQAndroidBot
=
QQAndroidBot
(
ContextImpl
(),
account
,
configuration
)
@UseExperimental
(
MiraiInternalAPI
::
class
)
internal
actual
class
QQAndroidBot
actual
constructor
(
context
:
Context
,
account
:
BotAccount
,
...
...
mirai-core-qqandroid/src/jvmMain/kotlin/net/mamoe/mirai/qqandroid/utils/SystemDeviceInfo.kt
View file @
be7c5376
package
net.mamoe.mirai.qqandroid.utils
import
kotlinx.io.core.toByteArray
import
net.mamoe.mirai.utils.Context
import
net.mamoe.mirai.utils.localIpAddress
actual
class
SystemDeviceInfo
actual
constructor
(
context
:
Context
)
:
DeviceInfo
(
context
)
{
...
...
@@ -39,8 +40,4 @@ actual class SystemDeviceInfo actual constructor(context: Context) : DeviceInfo(
override
val
codename
:
ByteArray
get
()
=
"REL"
.
toByteArray
()
override
val
sdk
:
Int
get
()
=
29
}
}
actual
abstract
class
Context
open
class
ContextImpl
:
Context
()
\ No newline at end of file
}
\ No newline at end of file
mirai-core-timpc/src/commonMain/kotlin/net.mamoe.mirai.timpc/TIMPC.kt
View file @
be7c5376
...
...
@@ -7,13 +7,21 @@ import net.mamoe.mirai.BotAccount
import
net.mamoe.mirai.BotFactory
import
net.mamoe.mirai.timpc.TIMPC.Bot
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.Context
import
net.mamoe.mirai.utils.MiraiInternalAPI
/**
* TIM PC 协议的 [Bot] 构造器.
*/
@UseExperimental
(
MiraiInternalAPI
::
class
)
object
TIMPC
:
BotFactory
{
/**
* 使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
override
fun
Bot
(
account
:
BotAccount
,
configuration
:
BotConfiguration
):
Bot
=
TIMPCBot
(
account
,
configuration
)
override
fun
Bot
(
context
:
Context
,
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
):
Bot
=
TIMPCBot
(
BotAccount
(
qq
,
password
),
configuration
)
/**
* 使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
fun
Bot
(
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
=
BotConfiguration
.
Default
):
Bot
=
TIMPCBot
(
BotAccount
(
qq
,
password
),
configuration
)
}
\ No newline at end of file
mirai-core/src/androidMain/kotlin/net/mamoe/mirai/utils/Context.kt
0 → 100644
View file @
be7c5376
package
net.mamoe.mirai.utils
actual
typealias
Context
=
android
.
content
.
Context
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotAccount.kt
View file @
be7c5376
...
...
@@ -3,9 +3,11 @@
package
net.mamoe.mirai
import
kotlinx.io.core.toByteArray
import
net.mamoe.mirai.utils.MiraiInternalAPI
import
net.mamoe.mirai.utils.md5
import
kotlin.annotation.AnnotationTarget.*
@MiraiInternalAPI
data class
BotAccount
(
/**
* **注意**: 在 Android 协议, 总是使用 `QQAndroidClient.uin` 或 [Bot.uin], 而不要使用 [BotAccount.id]. 将来 [BotAccount.id] 可能会变为 [String]
...
...
@@ -23,4 +25,4 @@ data class BotAccount(
@Retention
(
AnnotationRetention
.
SOURCE
)
@Target
(
CLASS
,
TYPEALIAS
,
FUNCTION
,
PROPERTY
,
FIELD
,
CONSTRUCTOR
)
@Experimental
(
level
=
Experimental
.
Level
.
WARNING
)
annotation
class
RawAccountIdUse
\ No newline at end of file
internal
annotation
class
RawAccountIdUse
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/BotFactory.kt
View file @
be7c5376
...
...
@@ -3,6 +3,9 @@
package
net.mamoe.mirai
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.Context
import
kotlin.jvm.JvmName
import
kotlin.jvm.JvmOverloads
/**
* 构造 [Bot] 的工厂.
...
...
@@ -15,23 +18,11 @@ interface BotFactory {
/**
* 使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
fun
Bot
(
account
:
BotAccount
,
configuration
:
BotConfiguration
=
BotConfiguration
.
Default
):
Bot
/**
* 使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
fun
Bot
(
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
=
BotConfiguration
.
Default
):
Bot
=
this
.
Bot
(
BotAccount
(
qq
,
password
),
configuration
)
fun
Bot
(
context
:
Context
,
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
=
BotConfiguration
.
Default
):
Bot
}
/**
* 使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
inline
fun
BotFactory
.
Bot
(
account
:
BotAccount
,
configuration
:
(
BotConfiguration
.()
->
Unit
)):
Bot
=
this
.
Bot
(
account
,
BotConfiguration
().
apply
(
configuration
))
/**
* 使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
inline
fun
BotFactory
.
Bot
(
qq
:
Long
,
password
:
String
,
configuration
:
(
BotConfiguration
.()
->
Unit
)):
Bot
=
this
.
Bot
(
qq
,
password
,
BotConfiguration
().
apply
(
configuration
))
\ No newline at end of file
inline
fun
BotFactory
.
Bot
(
context
:
Context
,
qq
:
Long
,
password
:
String
,
configuration
:
(
BotConfiguration
.()
->
Unit
)):
Bot
=
this
.
Bot
(
context
,
qq
,
password
,
BotConfiguration
().
apply
(
configuration
))
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/MessageSubscribers.kt
View file @
be7c5376
...
...
@@ -518,7 +518,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* [replier] 的 `it` 将会是去掉用来判断的后缀并删除前后空格后的字符串.
* 如当消息为 " 123456 test" 时
* ```kotlin
* "test" ends
w
ithReply {
* "test" ends
W
ithReply {
* println(it) // it 为 "123456"
* }
* ```
...
...
@@ -526,7 +526,7 @@ class MessageSubscribersBuilder<T : MessagePacket<*, *>>(
* @param replier 若返回 [Message] 则直接发送; 若返回 [Unit] 则不回复; 其他情况则 [Any.toString] 后回复
*/
@MessageDsl
inline
infix
fun
String
.
ends
w
ithReply
(
crossinline
replier
:
@MessageDsl
suspend
T
.(
String
)
->
Any
?):
Listener
<
T
>
{
inline
infix
fun
String
.
ends
W
ithReply
(
crossinline
replier
:
@MessageDsl
suspend
T
.(
String
)
->
Any
?):
Listener
<
T
>
{
val
toCheck
=
this
.
trimEnd
()
return
content
({
it
.
trim
().
endsWith
(
toCheck
)
},
{
@Suppress
(
"DSL_SCOPE_VIOLATION_WARNING"
)
...
...
mirai-core
-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid
/utils/Context.kt
→
mirai-core
/src/commonMain/kotlin/net.mamoe.mirai
/utils/Context.kt
View file @
be7c5376
package
net.mamoe.mirai.
qqandroid.
utils
package
net.mamoe.mirai.utils
/**
* On Android, typealias to `android.content.Context`
...
...
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/BotFactoryJvm.kt
View file @
be7c5376
...
...
@@ -3,14 +3,17 @@
package
net.mamoe.mirai
import
net.mamoe.mirai.utils.BotConfiguration
import
net.mamoe.mirai.utils.Context
// Do not use ServiceLoader. Probably not working on MPP
@PublishedApi
internal
val
factory
:
BotFactory
=
run
{
try
{
runCatching
{
Class
.
forName
(
"net.mamoe.mirai.timpc.TIMPC"
).
kotlin
.
objectInstance
as
BotFactory
}
catch
(
ignored
:
Exception
)
{
null
}.
getOrElse
{
runCatching
{
Class
.
forName
(
"net.mamoe.mirai.qqandroid.QQAndroid"
).
kotlin
.
objectInstance
as
BotFactory
}.
getOrNull
()
}
}
?:
error
(
"""
...
...
@@ -24,23 +27,11 @@ internal val factory: BotFactory = run {
/**
* 加载现有协议的 [BotFactory], 并使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
fun
Bot
(
account
:
BotAccount
,
configuration
:
BotConfiguration
=
BotConfiguration
.
Default
):
Bot
=
factory
.
Bot
(
account
,
configuration
)
fun
Bot
(
context
:
Context
,
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
=
BotConfiguration
.
Default
):
Bot
=
factory
.
Bot
(
context
,
qq
,
password
,
configuration
)
/**
* 加载现有协议的 [BotFactory], 并使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
fun
Bot
(
qq
:
Long
,
password
:
String
,
configuration
:
BotConfiguration
=
BotConfiguration
.
Default
):
Bot
=
factory
.
Bot
(
qq
,
password
,
configuration
)
/**
* 加载现有协议的 [BotFactory], 并使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
inline
fun
Bot
(
account
:
BotAccount
,
configuration
:
(
BotConfiguration
.()
->
Unit
)):
Bot
=
factory
.
Bot
(
account
,
configuration
)
/**
* 加载现有协议的 [BotFactory], 并使用指定的 [配置][configuration] 构造 [Bot] 实例
*/
inline
fun
Bot
(
qq
:
Long
,
password
:
String
,
configuration
:
(
BotConfiguration
.()
->
Unit
)):
Bot
=
factory
.
Bot
(
qq
,
password
,
configuration
)
\ No newline at end of file
inline
fun
Bot
(
context
:
Context
,
qq
:
Long
,
password
:
String
,
configuration
:
(
BotConfiguration
.()
->
Unit
)):
Bot
=
factory
.
Bot
(
context
,
qq
,
password
,
configuration
)
\ No newline at end of file
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai/utils/Context.kt
0 → 100644
View file @
be7c5376
package
net.mamoe.mirai.utils
actual
abstract
class
Context
open
class
ContextImpl
:
Context
()
\ No newline at end of file
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