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
4d77951a
Commit
4d77951a
authored
Feb 11, 2020
by
Him188
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Redesign event structure
parent
a322ce73
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
280 additions
and
93 deletions
+280
-93
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
...moe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
+2
-2
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt
...ndroid/network/protocol/packet/chat/receive/MessageSvc.kt
+4
-4
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/ActiveEvents.kt
...nMain/kotlin/net.mamoe.mirai/event/events/ActiveEvents.kt
+53
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/MuteEvent.kt
...mmonMain/kotlin/net.mamoe.mirai/event/events/MuteEvent.kt
+0
-84
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/PassiveEvents.kt
...Main/kotlin/net.mamoe.mirai/event/events/PassiveEvents.kt
+155
-0
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/types.kt
...c/commonMain/kotlin/net.mamoe.mirai/event/events/types.kt
+63
-0
mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
...rai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
+3
-3
No files found.
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/QQAndroidBotNetworkHandler.kt
View file @
4d77951a
...
@@ -24,7 +24,7 @@ import net.mamoe.mirai.contact.MemberPermission
...
@@ -24,7 +24,7 @@ import net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.data.MultiPacket
import
net.mamoe.mirai.data.MultiPacket
import
net.mamoe.mirai.data.Packet
import
net.mamoe.mirai.data.Packet
import
net.mamoe.mirai.event.*
import
net.mamoe.mirai.event.*
import
net.mamoe.mirai.event.events.ForceOfflineEvent
import
net.mamoe.mirai.event.events.
Bot
ForceOfflineEvent
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.network.BotNetworkHandler
import
net.mamoe.mirai.qqandroid.GroupImpl
import
net.mamoe.mirai.qqandroid.GroupImpl
import
net.mamoe.mirai.qqandroid.MemberImpl
import
net.mamoe.mirai.qqandroid.MemberImpl
...
@@ -119,7 +119,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
...
@@ -119,7 +119,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
@UseExperimental
(
MiraiExperimentalAPI
::
class
,
ExperimentalTime
::
class
)
@UseExperimental
(
MiraiExperimentalAPI
::
class
,
ExperimentalTime
::
class
)
override
suspend
fun
init
():
Unit
=
coroutineScope
{
override
suspend
fun
init
():
Unit
=
coroutineScope
{
this
@QQAndroidBotNetworkHandler
.
subscribeAlways
<
ForceOfflineEvent
>
{
this
@QQAndroidBotNetworkHandler
.
subscribeAlways
<
Bot
ForceOfflineEvent
>
{
if
(
this
@QQAndroidBotNetworkHandler
.
bot
==
this
.
bot
)
{
if
(
this
@QQAndroidBotNetworkHandler
.
bot
==
this
.
bot
)
{
this
.
bot
.
logger
.
error
(
"被挤下线"
)
this
.
bot
.
logger
.
error
(
"被挤下线"
)
close
()
close
()
...
...
mirai-core-qqandroid/src/commonMain/kotlin/net/mamoe/mirai/qqandroid/network/protocol/packet/chat/receive/MessageSvc.kt
View file @
4d77951a
...
@@ -11,10 +11,10 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive
...
@@ -11,10 +11,10 @@ package net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.discardExact
import
kotlinx.io.core.discardExact
import
net.mamoe.mirai.event.events.ForceOfflineEvent
import
net.mamoe.mirai.data.MultiPacket
import
net.mamoe.mirai.data.MultiPacket
import
net.mamoe.mirai.data.Packet
import
net.mamoe.mirai.data.Packet
import
net.mamoe.mirai.event.BroadcastControllable
import
net.mamoe.mirai.event.BroadcastControllable
import
net.mamoe.mirai.event.events.BotForceOfflineEvent
import
net.mamoe.mirai.message.FriendMessage
import
net.mamoe.mirai.message.FriendMessage
import
net.mamoe.mirai.message.data.MessageChain
import
net.mamoe.mirai.message.data.MessageChain
import
net.mamoe.mirai.qqandroid.QQAndroidBot
import
net.mamoe.mirai.qqandroid.QQAndroidBot
...
@@ -178,10 +178,10 @@ internal class MessageSvc {
...
@@ -178,10 +178,10 @@ internal class MessageSvc {
/**
/**
* 被挤下线
* 被挤下线
*/
*/
internal
object
PushForceOffline
:
OutgoingPacketFactory
<
ForceOfflineEvent
>(
"MessageSvc.PushForceOffline"
)
{
internal
object
PushForceOffline
:
OutgoingPacketFactory
<
Bot
ForceOfflineEvent
>(
"MessageSvc.PushForceOffline"
)
{
override
suspend
fun
ByteReadPacket
.
decode
(
bot
:
QQAndroidBot
):
ForceOfflineEvent
{
override
suspend
fun
ByteReadPacket
.
decode
(
bot
:
QQAndroidBot
):
Bot
ForceOfflineEvent
{
val
struct
=
this
.
decodeUniPacket
(
RequestPushForceOffline
.
serializer
())
val
struct
=
this
.
decodeUniPacket
(
RequestPushForceOffline
.
serializer
())
return
ForceOfflineEvent
(
bot
,
title
=
struct
.
title
?:
""
,
tips
=
struct
.
tips
?:
""
)
return
Bot
ForceOfflineEvent
(
bot
,
title
=
struct
.
title
?:
""
,
tips
=
struct
.
tips
?:
""
)
}
}
}
}
...
...
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/
ReceiveFriendAddRequestEvent
.kt
→
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/
ActiveEvents
.kt
View file @
4d77951a
...
@@ -9,29 +9,45 @@
...
@@ -9,29 +9,45 @@
package
net.mamoe.mirai.event.events
package
net.mamoe.mirai.event.events
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.data.EventPacket
import
net.mamoe.mirai.utils.getValue
import
net.mamoe.mirai.utils.unsafeWeakRef
/**
import
kotlin.jvm.JvmOverloads
* [Bot] 登录完成, 好友列表, 群组列表初始化完成
*/
data class
BotLoginSucceedEvent
(
override
val
bot
:
Bot
)
:
BotActiveEvent
()
/**
* [Bot] 主动离线.
*/
data class
BotOfflineEvent
(
override
val
bot
:
Bot
)
:
BotActiveEvent
()
// region 好友
/**
* [Bot] 删除一个好友
*/
class
BotRemoveFriendEvent
(
override
val
friend
:
QQ
)
:
FriendEvent
,
BotActiveEvent
()
// endregion
// region 群
/**
* 机器人踢出某个群员
*/
class
BotKickMemberEvent
(
override
val
member
:
Member
)
:
GroupMemberEvent
,
BotActiveEvent
()
/**
/**
*
陌生人请求添加机器人账号为好友
*
机器人禁言某个群成员
*/
*/
class
ReceiveFriendAddRequestEvent
(
class
BotMuteMemberEvent
(
override
val
member
:
Member
)
:
GroupMemberEvent
,
BotActiveEvent
()
_qq
:
QQ
,
/**
/**
* 验证消息
* 机器人取消禁言某个群成员
*/
*/
val
message
:
String
class
BotUnmuteMemberEvent
(
override
val
member
:
Member
)
:
GroupMemberEvent
,
BotActiveEvent
()
)
:
EventPacket
{
val
qq
:
QQ
by
_qq
.
unsafeWeakRef
()
// endregion
\ No newline at end of file
/**
* 同意这个请求
*
* @param remark 备注名, 不设置则需为 `null`
*/
@JvmOverloads
suspend
fun
approve
(
remark
:
String
?
=
null
):
Unit
=
qq
.
bot
.
approveFriendAddRequest
(
qq
.
id
,
remark
)
}
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/MuteEvent.kt
deleted
100644 → 0
View file @
a322ce73
/*
* Copyright 2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
package
net.mamoe.mirai.event.events
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.data.EventPacket
// region mute
/**
* 某群成员被禁言事件
*/
@Suppress
(
"unused"
,
"MemberVisibilityCanBePrivate"
)
class
MemberMuteEvent
(
val
member
:
Member
,
override
val
durationSeconds
:
Int
,
override
val
operator
:
Member
)
:
MuteEvent
()
{
override
val
group
:
Group
get
()
=
operator
.
group
override
fun
toString
():
String
=
"MemberMuteEvent(member=${member.id}, group=${group.id}, operator=${operator.id}, duration=${durationSeconds}s"
}
/**
* 机器人被禁言事件
*/
class
BeingMutedEvent
(
override
val
durationSeconds
:
Int
,
override
val
operator
:
Member
)
:
MuteEvent
()
{
override
val
group
:
Group
get
()
=
operator
.
group
override
fun
toString
():
String
=
"BeingMutedEvent(group=${group.id}, operator=${operator.id}, duration=${durationSeconds}s"
}
sealed
class
MuteEvent
:
EventOfMute
()
{
abstract
override
val
operator
:
Member
abstract
override
val
group
:
Group
abstract
val
durationSeconds
:
Int
}
// endregion
// region unmute
/**
* 某群成员被解除禁言事件
*/
@Suppress
(
"unused"
)
class
MemberUnmuteEvent
(
val
member
:
Member
,
override
val
operator
:
Member
)
:
UnmuteEvent
()
{
override
val
group
:
Group
get
()
=
operator
.
group
override
fun
toString
():
String
=
"MemberUnmuteEvent(member=${member.id}, group=${group.id}, operator=${operator.id}"
}
/**
* 机器人被解除禁言事件
*/
@Suppress
(
"SpellCheckingInspection"
)
class
BeingUnmutedEvent
(
override
val
operator
:
Member
)
:
UnmuteEvent
()
{
override
val
group
:
Group
get
()
=
operator
.
group
override
fun
toString
():
String
=
"BeingUnmutedEvent(group=${group.id}, operator=${operator.id}"
}
sealed
class
UnmuteEvent
:
EventOfMute
()
{
abstract
override
val
operator
:
Member
abstract
override
val
group
:
Group
}
// endregion
abstract
class
EventOfMute
:
EventPacket
{
abstract
val
operator
:
Member
abstract
val
group
:
Group
}
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/
Bot
Events.kt
→
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/
Passive
Events.kt
View file @
4d77951a
...
@@ -14,55 +14,36 @@ import net.mamoe.mirai.contact.Group
...
@@ -14,55 +14,36 @@ import net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.data.Packet
import
net.mamoe.mirai.data.Packet
import
net.mamoe.mirai.event.Event
/**
// region Bot 在线状态
* 有关一个 [Bot] 的事件
*/
interface
BotEvent
:
Event
{
val
bot
:
Bot
}
/**
* [Bot] 登录完成, 好友列表, 群组列表初始化完成
*/
data class
BotLoginSucceedEvent
(
override
val
bot
:
Bot
)
:
BotEvent
/**
* [Bot] 离线.
*/
data class
BotOfflineEvent
(
override
val
bot
:
Bot
)
:
BotEvent
/**
/**
* 被挤下线
* 被挤下线
*/
*/
data class
ForceOfflineEvent
(
data class
Bot
ForceOfflineEvent
(
override
val
bot
:
Bot
,
override
val
bot
:
Bot
,
val
title
:
String
,
val
title
:
String
,
val
tips
:
String
val
tips
:
String
)
:
BotEvent
,
Packet
)
:
BotPassiveEvent
,
Packet
// endregion
// region 群
/**
/**
*
有关群的事件
*
Bot 在群里的权限被改变. 操作人一定是群主
*/
*/
interface
GroupEvent
:
BotEvent
{
val
group
:
Group
override
val
bot
:
Bot
get
()
=
group
.
bot
}
data class
AddGroupEvent
(
override
val
group
:
Group
)
:
BotEvent
,
GroupEvent
data class
RemoveGroupEvent
(
override
val
group
:
Group
)
:
BotEvent
,
GroupEvent
data class
BotGroupPermissionChangeEvent
(
data class
BotGroupPermissionChangeEvent
(
override
val
group
:
Group
,
override
val
group
:
Group
,
val
origin
:
MemberPermission
,
val
origin
:
MemberPermission
,
val
new
:
MemberPermission
val
new
:
MemberPermission
)
:
BotEvent
,
GroupEvent
)
:
Bot
Passive
Event
,
GroupEvent
// region 群设置
interface
GroupSettingChangeEvent
<
T
>
:
GroupEvent
{
/**
* 群设置改变
*/
interface
GroupSettingChangeEvent
<
T
>
:
GroupEvent
,
BotPassiveEvent
{
val
operator
:
Member
val
operator
:
Member
val
origin
:
T
val
origin
:
T
val
new
:
T
val
new
:
T
...
@@ -71,48 +52,53 @@ interface GroupSettingChangeEvent<T> : GroupEvent {
...
@@ -71,48 +52,53 @@ interface GroupSettingChangeEvent<T> : GroupEvent {
get
()
=
operator
.
group
get
()
=
operator
.
group
}
}
/**
* 群名改变
*/
data class
GroupNameChangeEvent
(
data class
GroupNameChangeEvent
(
override
val
operator
:
Member
,
override
val
operator
:
Member
,
override
val
origin
:
String
,
override
val
origin
:
String
,
override
val
new
:
String
override
val
new
:
String
)
:
BotEvent
,
GroupSettingChangeEvent
<
String
>
)
:
GroupSettingChangeEvent
<
String
>,
BotPassiveEvent
/**
/**
* 群 "全员禁言" 功能
开启
* 群 "全员禁言" 功能
状态改变
*/
*/
data class
GroupMuteAllEvent
(
data class
GroupMuteAllEvent
(
override
val
operator
:
Member
,
override
val
operator
:
Member
,
override
val
origin
:
Boolean
,
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
override
val
new
:
Boolean
)
:
BotEvent
,
GroupSettingChangeEvent
<
Boolean
>
)
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
/**
* 群 "坦白说" 功能状态改变
*/
data class
GroupConfessTalkEvent
(
data class
GroupConfessTalkEvent
(
override
val
operator
:
Member
,
override
val
operator
:
Member
,
override
val
origin
:
Boolean
,
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
override
val
new
:
Boolean
)
:
BotEvent
,
GroupSettingChangeEvent
<
Boolean
>
)
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
// endregion
/**
* 有关群成员的事件
// region 群成员
*/
interface
GroupMemberEvent
:
GroupEvent
{
// region 成员变更
val
member
:
Member
override
val
group
:
Group
get
()
=
member
.
group
}
/**
/**
* 成员加入群的事件
* 成员加入群的事件
*/
*/
data class
MemberJoinEvent
(
override
val
member
:
Member
)
:
BotEvent
,
GroupMember
Event
data class
MemberJoinEvent
(
override
val
member
:
Member
)
:
GroupMemberEvent
,
BotPassive
Event
/**
/**
* 成员离开群的事件
* 成员离开群的事件
*/
*/
sealed
class
MemberLeftEvent
:
BotEvent
,
GroupMember
Event
{
sealed
class
MemberLeftEvent
:
GroupMemberEvent
,
BotPassive
Event
{
/**
/**
* 成员被踢出群
* 成员被踢出群. 成员不可能是机器人自己.
*
* @see BotKickMemberEvent 机器人踢出一个人
*/
*/
data class
Kick
(
override
val
member
:
Member
,
val
operator
:
Member
)
:
MemberLeftEvent
()
data class
Kick
(
override
val
member
:
Member
,
val
operator
:
Member
)
:
MemberLeftEvent
()
...
@@ -122,11 +108,48 @@ sealed class MemberLeftEvent : BotEvent, GroupMemberEvent {
...
@@ -122,11 +108,48 @@ sealed class MemberLeftEvent : BotEvent, GroupMemberEvent {
data class
Quit
(
override
val
member
:
Member
)
:
MemberLeftEvent
()
data class
Quit
(
override
val
member
:
Member
)
:
MemberLeftEvent
()
}
}
// endregion
// region 成员权限
/**
* 成员权限改变的事件. 成员不可能是机器人自己.
*/
data class
MemberPermissionChangeEvent
(
data class
MemberPermissionChangeEvent
(
override
val
bot
:
Bot
,
override
val
bot
:
Bot
,
override
val
member
:
Member
,
override
val
member
:
Member
,
val
origin
:
MemberPermission
,
val
origin
:
MemberPermission
,
val
new
:
MemberPermission
val
new
:
MemberPermission
)
:
BotEvent
,
GroupMemberEvent
)
:
GroupMemberEvent
,
BotPassiveEvent
// endregion
// region 禁言
/**
* 群成员被禁言事件. 操作人和被禁言的成员都不可能是机器人本人
*
* @see BotMuteMemberEvent 机器人禁言一个人
*/
data class
MemberMuteEvent
(
override
val
member
:
Member
,
val
operator
:
Member
,
val
durationSeconds
:
Int
)
:
GroupMemberEvent
,
BotPassiveEvent
{
override
fun
toString
():
String
=
"MemberMuteEvent(member=${member.id}, group=${group.id}, operator=${operator.id}, duration=${durationSeconds}s"
}
/**
* 群成员被取消禁言事件. 操作人和被禁言的成员都不可能是机器人本人
*
* @see BotUnmuteMemberEvent 机器人取消禁言某个人
*/
data class
MemberUnmuteEvent
(
override
val
member
:
Member
,
val
operator
:
Member
)
:
GroupMemberEvent
,
BotPassiveEvent
// endregion
// endregion
// endregion
\ No newline at end of file
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/
FriendStatusChanged
.kt
→
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/events/
types
.kt
View file @
4d77951a
...
@@ -9,11 +9,55 @@
...
@@ -9,11 +9,55 @@
package
net.mamoe.mirai.event.events
package
net.mamoe.mirai.event.events
import
net.mamoe.mirai.Bot
import
net.mamoe.mirai.contact.Group
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.contact.QQ
import
net.mamoe.mirai.
data.EventPacke
t
import
net.mamoe.mirai.
event.AbstractCancellableEven
t
import
net.mamoe.mirai.
data.OnlineStatus
import
net.mamoe.mirai.
event.Event
data class
FriendStatusChanged
(
/**
val
qq
:
QQ
,
* 有关一个 [Bot] 的事件
val
status
:
OnlineStatus
*/
)
:
EventPacket
interface
BotEvent
:
Event
{
val
bot
:
Bot
}
/**
* [Bot] 被动接收的事件. 这些事件可能与机器人有关
*/
interface
BotPassiveEvent
:
BotEvent
/**
* 由 [Bot] 主动发起的动作的事件
*/
abstract
class
BotActiveEvent
:
BotEvent
,
AbstractCancellableEvent
()
/**
* 有关群的事件
*/
interface
GroupEvent
:
BotEvent
{
val
group
:
Group
override
val
bot
:
Bot
get
()
=
group
.
bot
}
/**
* 有关群成员的事件
*/
interface
GroupMemberEvent
:
GroupEvent
{
val
member
:
Member
override
val
group
:
Group
get
()
=
member
.
group
}
/**
* 有关群的事件
*/
interface
FriendEvent
:
BotEvent
{
val
friend
:
QQ
override
val
bot
:
Bot
get
()
=
friend
.
bot
}
\ No newline at end of file
mirai-demos/mirai-demo-gentleman/src/main/kotlin/demo/gentleman/Main.kt
View file @
4d77951a
...
@@ -21,7 +21,7 @@ import net.mamoe.mirai.alsoLogin
...
@@ -21,7 +21,7 @@ import net.mamoe.mirai.alsoLogin
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.event.Event
import
net.mamoe.mirai.event.Event
import
net.mamoe.mirai.event.events.
ReceiveFriendAddReques
tEvent
import
net.mamoe.mirai.event.events.
Bo
tEvent
import
net.mamoe.mirai.event.subscribeAlways
import
net.mamoe.mirai.event.subscribeAlways
import
net.mamoe.mirai.event.subscribeGroupMessages
import
net.mamoe.mirai.event.subscribeGroupMessages
import
net.mamoe.mirai.event.subscribeMessages
import
net.mamoe.mirai.event.subscribeMessages
...
@@ -54,8 +54,8 @@ suspend fun main() {
...
@@ -54,8 +54,8 @@ suspend fun main() {
}
}
// 全局范围订阅事件, 不受 bot 实例影响
// 全局范围订阅事件, 不受 bot 实例影响
GlobalScope
.
subscribeAlways
<
ReceiveFriendAddReques
tEvent
>
{
GlobalScope
.
subscribeAlways
<
Bo
tEvent
>
{
it
.
approve
()
}
}
// 订阅来自这个 bot 的群消息事件
// 订阅来自这个 bot 的群消息事件
...
...
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