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
import
net.mamoe.mirai.data.MultiPacket
import
net.mamoe.mirai.data.Packet
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.qqandroid.GroupImpl
import
net.mamoe.mirai.qqandroid.MemberImpl
...
...
@@ -119,7 +119,7 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
@UseExperimental
(
MiraiExperimentalAPI
::
class
,
ExperimentalTime
::
class
)
override
suspend
fun
init
():
Unit
=
coroutineScope
{
this
@QQAndroidBotNetworkHandler
.
subscribeAlways
<
ForceOfflineEvent
>
{
this
@QQAndroidBotNetworkHandler
.
subscribeAlways
<
Bot
ForceOfflineEvent
>
{
if
(
this
@QQAndroidBotNetworkHandler
.
bot
==
this
.
bot
)
{
this
.
bot
.
logger
.
error
(
"被挤下线"
)
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
import
kotlinx.io.core.ByteReadPacket
import
kotlinx.io.core.discardExact
import
net.mamoe.mirai.event.events.ForceOfflineEvent
import
net.mamoe.mirai.data.MultiPacket
import
net.mamoe.mirai.data.Packet
import
net.mamoe.mirai.event.BroadcastControllable
import
net.mamoe.mirai.event.events.BotForceOfflineEvent
import
net.mamoe.mirai.message.FriendMessage
import
net.mamoe.mirai.message.data.MessageChain
import
net.mamoe.mirai.qqandroid.QQAndroidBot
...
...
@@ -178,10 +178,10 @@ internal class MessageSvc {
/**
* 被挤下线
*/
internal
object
PushForceOffline
:
OutgoingPacketFactory
<
ForceOfflineEvent
>(
"MessageSvc.PushForceOffline"
)
{
override
suspend
fun
ByteReadPacket
.
decode
(
bot
:
QQAndroidBot
):
ForceOfflineEvent
{
internal
object
PushForceOffline
:
OutgoingPacketFactory
<
Bot
ForceOfflineEvent
>(
"MessageSvc.PushForceOffline"
)
{
override
suspend
fun
ByteReadPacket
.
decode
(
bot
:
QQAndroidBot
):
Bot
ForceOfflineEvent
{
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 @@
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.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
(
_qq
:
QQ
,
/**
* 验证消息
*/
val
message
:
String
)
:
EventPacket
{
val
qq
:
QQ
by
_qq
.
unsafeWeakRef
()
/**
* 同意这个请求
*
* @param remark 备注名, 不设置则需为 `null`
*/
@JvmOverloads
suspend
fun
approve
(
remark
:
String
?
=
null
):
Unit
=
qq
.
bot
.
approveFriendAddRequest
(
qq
.
id
,
remark
)
}
class
BotMuteMemberEvent
(
override
val
member
:
Member
)
:
GroupMemberEvent
,
BotActiveEvent
()
/**
* 机器人取消禁言某个群成员
*/
class
BotUnmuteMemberEvent
(
override
val
member
:
Member
)
:
GroupMemberEvent
,
BotActiveEvent
()
// endregion
\ No newline at end of file
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
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.MemberPermission
import
net.mamoe.mirai.data.Packet
import
net.mamoe.mirai.event.Event
/**
* 有关一个 [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
// region Bot 在线状态
/**
* 被挤下线
*/
data class
ForceOfflineEvent
(
data class
Bot
ForceOfflineEvent
(
override
val
bot
:
Bot
,
val
title
:
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
(
override
val
group
:
Group
,
val
origin
:
MemberPermission
,
val
new
:
MemberPermission
)
:
BotEvent
,
GroupEvent
)
:
Bot
Passive
Event
,
GroupEvent
// region 群设置
interface
GroupSettingChangeEvent
<
T
>
:
GroupEvent
{
/**
* 群设置改变
*/
interface
GroupSettingChangeEvent
<
T
>
:
GroupEvent
,
BotPassiveEvent
{
val
operator
:
Member
val
origin
:
T
val
new
:
T
...
...
@@ -71,48 +52,53 @@ interface GroupSettingChangeEvent<T> : GroupEvent {
get
()
=
operator
.
group
}
/**
* 群名改变
*/
data class
GroupNameChangeEvent
(
override
val
operator
:
Member
,
override
val
origin
:
String
,
override
val
new
:
String
)
:
BotEvent
,
GroupSettingChangeEvent
<
String
>
)
:
GroupSettingChangeEvent
<
String
>,
BotPassiveEvent
/**
* 群 "全员禁言" 功能
开启
* 群 "全员禁言" 功能
状态改变
*/
data class
GroupMuteAllEvent
(
override
val
operator
:
Member
,
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
)
:
BotEvent
,
GroupSettingChangeEvent
<
Boolean
>
)
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
/**
* 群 "坦白说" 功能状态改变
*/
data class
GroupConfessTalkEvent
(
override
val
operator
:
Member
,
override
val
origin
:
Boolean
,
override
val
new
:
Boolean
)
:
BotEvent
,
GroupSettingChangeEvent
<
Boolean
>
)
:
GroupSettingChangeEvent
<
Boolean
>,
BotPassiveEvent
// endregion
/**
* 有关群成员的事件
*/
interface
GroupMemberEvent
:
GroupEvent
{
val
member
:
Member
override
val
group
:
Group
get
()
=
member
.
group
}
// region 群成员
// region 成员变更
/**
* 成员加入群的事件
*/
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
()
...
...
@@ -122,11 +108,48 @@ sealed class MemberLeftEvent : BotEvent, GroupMemberEvent {
data class
Quit
(
override
val
member
:
Member
)
:
MemberLeftEvent
()
}
// endregion
// region 成员权限
/**
* 成员权限改变的事件. 成员不可能是机器人自己.
*/
data class
MemberPermissionChangeEvent
(
override
val
bot
:
Bot
,
override
val
member
:
Member
,
val
origin
:
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 @@
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.
data.EventPacke
t
import
net.mamoe.mirai.
data.OnlineStatus
import
net.mamoe.mirai.
event.AbstractCancellableEven
t
import
net.mamoe.mirai.
event.Event
data class
FriendStatusChanged
(
val
qq
:
QQ
,
val
status
:
OnlineStatus
)
:
EventPacket
/**
* 有关一个 [Bot] 的事件
*/
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
import
net.mamoe.mirai.contact.Member
import
net.mamoe.mirai.contact.MemberPermission
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.subscribeGroupMessages
import
net.mamoe.mirai.event.subscribeMessages
...
...
@@ -54,8 +54,8 @@ suspend fun main() {
}
// 全局范围订阅事件, 不受 bot 实例影响
GlobalScope
.
subscribeAlways
<
ReceiveFriendAddReques
tEvent
>
{
it
.
approve
()
GlobalScope
.
subscribeAlways
<
Bo
tEvent
>
{
}
// 订阅来自这个 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