/
event.kt
128 lines (125 loc) · 5.66 KB
/
event.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
* 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.api.http.adapter.internal.convertor
import net.mamoe.mirai.api.http.adapter.internal.dto.*
import net.mamoe.mirai.api.http.command.CommandExecutedEvent
import net.mamoe.mirai.api.http.util.GroupHonor
import net.mamoe.mirai.contact.Friend
import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.utils.MiraiExperimentalApi
// TODO: 切换为 跳表 或利用函数重载去掉冗长的 when 语句
@OptIn(MiraiExperimentalApi::class)
internal suspend fun BotEvent.convertBotEvent() = when (this) {
is BotOnlineEvent -> BotOnlineEventDTO(bot.id)
is BotOfflineEvent.Active -> BotOfflineEventActiveDTO(bot.id)
is BotOfflineEvent.Force -> BotOfflineEventForceDTO(bot.id, title, message)
is BotOfflineEvent.Dropped -> BotOfflineEventDroppedDTO(bot.id)
is BotReloginEvent -> BotReloginEventDTO(bot.id)
is MessageRecallEvent.GroupRecall -> GroupRecallEventDTO(
authorId,
messageIds.firstOrNull() ?: 0,
messageTime.toLong() and 0xFFFFFFFF,
GroupDTO(group),
operator?.let(::MemberDTO)
)
is MessageRecallEvent.FriendRecall -> FriendRecallEventDTO(
authorId,
messageIds.firstOrNull() ?: 0,
messageTime.toLong() and 0xFFFF,
operatorId
)
is BotGroupPermissionChangeEvent -> BotGroupPermissionChangeEventDTO(origin, new, GroupDTO(group))
is BotMuteEvent -> BotMuteEventDTO(durationSeconds, MemberDTO(operator))
is BotUnmuteEvent -> BotUnmuteEventDTO(MemberDTO(operator))
is BotJoinGroupEvent.Active -> BotJoinGroupEventDTO(GroupDTO(group))
is BotJoinGroupEvent.Invite -> BotJoinGroupEventDTO(GroupDTO(group), MemberDTO(invitor))
is BotJoinGroupEvent.Retrieve -> BotJoinGroupEventDTO(GroupDTO(group))
is BotLeaveEvent.Active -> BotLeaveEventActiveDTO(GroupDTO(group))
is BotLeaveEvent.Kick -> BotLeaveEventKickDTO(GroupDTO(group), MemberDTO(operator))
is GroupNameChangeEvent -> GroupNameChangeEventDTO(
origin,
new,
GroupDTO(group),
operator?.let(::MemberDTO)
)
is GroupEntranceAnnouncementChangeEvent -> GroupEntranceAnnouncementChangeEventDTO(
origin,
new,
GroupDTO(group),
operator?.let(::MemberDTO)
)
is GroupMuteAllEvent -> GroupMuteAllEventDTO(origin, new, GroupDTO(group), operator?.let(::MemberDTO))
is GroupAllowAnonymousChatEvent -> GroupAllowAnonymousChatEventDTO(
origin,
new,
GroupDTO(group),
operator?.let(::MemberDTO)
)
is GroupAllowConfessTalkEvent -> GroupAllowConfessTalkEventDTO(
origin,
new,
GroupDTO(group),
isByBot
)
is GroupAllowMemberInviteEvent -> GroupAllowMemberInviteEventDTO(
origin,
new,
GroupDTO(group),
operator?.let(::MemberDTO)
)
is MemberJoinEvent.Active -> MemberJoinEventDTO(MemberDTO(member))
is MemberJoinEvent.Invite -> MemberJoinEventDTO(MemberDTO(member), MemberDTO(invitor))
is MemberJoinEvent.Retrieve -> MemberJoinEventDTO(MemberDTO(member))
is MemberLeaveEvent.Kick -> MemberLeaveEventKickDTO(MemberDTO(member), operator?.let(::MemberDTO))
is MemberLeaveEvent.Quit -> MemberLeaveEventQuitDTO(MemberDTO(member))
is MemberCardChangeEvent -> MemberCardChangeEventDTO(origin, new, MemberDTO(member))
is MemberSpecialTitleChangeEvent -> MemberSpecialTitleChangeEventDTO(origin, new, MemberDTO(member))
is MemberPermissionChangeEvent -> MemberPermissionChangeEventDTO(origin, new, MemberDTO(member))
is MemberMuteEvent -> MemberMuteEventDTO(durationSeconds, MemberDTO(member), operator?.let(::MemberDTO))
is MemberUnmuteEvent -> MemberUnmuteEventDTO(MemberDTO(member), operator?.let(::MemberDTO))
is NewFriendRequestEvent -> NewFriendRequestEventDTO(
eventId,
message,
fromId,
fromGroupId,
fromNick
)
is MemberJoinRequestEvent -> MemberJoinRequestEventDTO(
eventId,
message,
fromId,
groupId,
groupName,
fromNick
)
is BotInvitedJoinGroupRequestEvent -> BotInvitedJoinGroupRequestEventDTO(
eventId,
"",
invitorId,
groupId,
groupName,
invitorNick
)
is NudgeEvent -> NudgeEventDTO(from.id, target.id, ComplexSubjectDTO(subject), action, suffix)
is FriendInputStatusChangedEvent -> FriendInputStatusChangedEventDTO(QQDTO(friend), inputting)
is FriendNickChangedEvent -> FriendNickChangedEventDTO(QQDTO(friend), from, to)
is MemberHonorChangeEvent.Achieve -> MemberHonorChangeEventDTO(MemberDTO(member), "achieve", GroupHonor[honorType])
is MemberHonorChangeEvent.Lose -> MemberHonorChangeEventDTO(MemberDTO(member), "lose", GroupHonor[honorType])
is OtherClientOnlineEvent -> OtherClientOnlineEventDTO(OtherClientDTO(client))
is OtherClientOfflineEvent -> OtherClientOfflineEventDTO(OtherClientDTO(client))
is CommandExecutedEvent -> CommandExecutedEventDTO(
command.primaryName,
friend = if (sender.user != null && sender.user is Friend) { QQDTO(sender.user as Friend) } else { null },
member = if (sender.user != null && sender.user is Member) { MemberDTO(sender.user as Member) } else { null },
args = args.toDTO { it != UnknownMessageDTO }
)
else -> IgnoreEventDTO
}