Skip to content

Commit 583a123

Browse files
authored
Merge pull request #9 from lz1998/master
MessageRecallEvent GetMsgApi
2 parents 2c02e8b + 5bba5e9 commit 583a123

File tree

8 files changed

+102
-24
lines changed

8 files changed

+102
-24
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ plugins {
2828
}
2929

3030
group = "net.lz1998"
31-
version = "0.0.9"
31+
version = "0.0.10"
3232
java.sourceCompatibility = JavaVersion.VERSION_1_8
3333

3434
configurations {

src/main/kotlin/net/lz1998/mirai/alias/Api.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ typealias BDeleteMsgResp = OnebotApi.DeleteMsgResp
1717

1818
typealias BGetMsgReq = OnebotApi.GetMsgReq
1919
typealias BGetMsgResp = OnebotApi.GetMsgResp
20+
typealias BGetMsgSender = OnebotApi.GetMsgResp.Sender
2021

2122
typealias BGetForwardMsgReq = OnebotApi.GetForwardMsgReq
2223
typealias BGetForwardMsgResp = OnebotApi.GetForwardMsgResp

src/main/kotlin/net/lz1998/mirai/alias/Event.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ typealias BGroupBanNoticeEvent = OnebotEvent.GroupBanNoticeEvent
1212
typealias BFriendAddNoticeEvent = OnebotEvent.FriendAddNoticeEvent
1313
typealias BFriendRequestEvent = OnebotEvent.FriendRequestEvent
1414
typealias BGroupRequestEvent = OnebotEvent.GroupRequestEvent
15+
typealias BGroupRecallNoticeEvent = OnebotEvent.GroupRecallNoticeEvent
16+
typealias BFriendRecallNoticeEvent = OnebotEvent.FriendRecallNoticeEvent
1517

1618
typealias BGroupMessageSender = OnebotEvent.GroupMessageEvent.Sender
1719
typealias BPrivateMessageSender = OnebotEvent.PrivateMessageEvent.Sender

src/main/kotlin/net/lz1998/mirai/entity/WebSocketBotClient.kt

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class WebsocketBotClient(override var botId: Long, override var password: String
9898
bot = Bot(botId, password) {
9999
fileStrBasedDeviceInfo("device/${botId}.json")
100100
loginSolver = MyLoginSolver
101-
noNetworkLog()
101+
// noNetworkLog()
102102
}.alsoLogin()
103103
bot.subscribeAlways<BotEvent> {
104104
onBotEvent(this)
@@ -128,25 +128,26 @@ class WebsocketBotClient(override var botId: Long, override var password: String
128128
respBuilder.botId = botId
129129
respBuilder.ok = true
130130
when (req.frameType) {
131-
BFrameType.SendPrivateMsgReq -> respBuilder.sendPrivateMsgResp = handleSendPrivateMsg(bot, req.sendPrivateMsgReq)
132-
BFrameType.SendGroupMsgReq -> respBuilder.sendGroupMsgResp = handleSendGroupMsg(bot, req.sendGroupMsgReq)
133-
BFrameType.SendMsgReq -> respBuilder.sendMsgResp = handleSendMsgReq(bot, req.sendMsgReq)
134-
BFrameType.DeleteMsgReq -> respBuilder.deleteMsgResp = handleDeleteMsg(bot, req.deleteMsgReq)
135-
BFrameType.SetGroupKickReq -> respBuilder.setGroupKickResp = handleSetGroupKick(bot, req.setGroupKickReq)
136-
BFrameType.SetGroupBanReq -> respBuilder.setGroupBanResp = handleSetGroupBan(bot, req.setGroupBanReq)
137-
BFrameType.SetGroupWholeBanReq -> respBuilder.setGroupWholeBanResp = handleSetGroupWholeBan(bot, req.setGroupWholeBanReq)
138-
BFrameType.SetGroupCardReq -> respBuilder.setGroupCardResp = handleSetGroupCard(bot, req.setGroupCardReq)
139-
BFrameType.SetGroupNameReq -> respBuilder.setGroupNameResp = handleSetGroupName(bot, req.setGroupNameReq)
140-
BFrameType.SetGroupLeaveReq -> respBuilder.setGroupLeaveResp = handleSetGroupLeave(bot, req.setGroupLeaveReq)
141-
BFrameType.SetGroupSpecialTitleReq -> respBuilder.setGroupSpecialTitleResp = handleSetGroupSpecialTitle(bot, req.setGroupSpecialTitleReq)
142-
BFrameType.SetFriendAddRequestReq -> respBuilder.setFriendAddRequestResp = handleSetFriendAddRequest(bot, req.setFriendAddRequestReq)
143-
BFrameType.SetGroupAddRequestReq -> respBuilder.setGroupAddRequestResp = handleSetGroupAddRequest(bot, req.setGroupAddRequestReq)
144-
BFrameType.GetLoginInfoReq -> respBuilder.getLoginInfoResp = handleGetLoginInfo(bot, req.getLoginInfoReq)
145-
BFrameType.GetFriendListReq -> respBuilder.getFriendListResp = handleGetFriendList(bot, req.getFriendListReq)
146-
BFrameType.GetGroupInfoReq -> respBuilder.getGroupInfoResp = handleGetGroupInfo(bot, req.getGroupInfoReq)
147-
BFrameType.GetGroupListReq -> respBuilder.getGroupListResp = handleGetGroupList(bot, req.getGroupListReq)
148-
BFrameType.GetGroupMemberInfoReq -> respBuilder.getGroupMemberInfoResp = handleGetGroupMemberInfo(bot, req.getGroupMemberInfoReq)
149-
BFrameType.GetGroupMemberListReq -> respBuilder.getGroupMemberListResp = handleGetGroupMemberList(bot, req.getGroupMemberListReq)
131+
BFrameType.SendPrivateMsgReq -> {respBuilder.frameType = BFrameType.SendPrivateMsgResp; respBuilder.sendPrivateMsgResp = handleSendPrivateMsg(bot, req.sendPrivateMsgReq)}
132+
BFrameType.SendGroupMsgReq -> {respBuilder.frameType = BFrameType.SendGroupMsgResp; respBuilder.sendGroupMsgResp = handleSendGroupMsg(bot, req.sendGroupMsgReq)}
133+
BFrameType.SendMsgReq -> {respBuilder.frameType = BFrameType.SendMsgResp; respBuilder.sendMsgResp = handleSendMsgReq(bot, req.sendMsgReq)}
134+
BFrameType.DeleteMsgReq -> {respBuilder.frameType = BFrameType.DeleteMsgResp; respBuilder.deleteMsgResp = handleDeleteMsg(bot, req.deleteMsgReq)}
135+
BFrameType.GetMsgReq -> {respBuilder.frameType = BFrameType.GetMsgResp; respBuilder.getMsgResp = handleGetMsg(bot, req.getMsgReq)}
136+
BFrameType.SetGroupKickReq -> {respBuilder.frameType = BFrameType.SetGroupKickResp; respBuilder.setGroupKickResp = handleSetGroupKick(bot, req.setGroupKickReq)}
137+
BFrameType.SetGroupBanReq -> {respBuilder.frameType = BFrameType.SetGroupBanResp; respBuilder.setGroupBanResp = handleSetGroupBan(bot, req.setGroupBanReq)}
138+
BFrameType.SetGroupWholeBanReq -> {respBuilder.frameType = BFrameType.SetGroupWholeBanResp; respBuilder.setGroupWholeBanResp = handleSetGroupWholeBan(bot, req.setGroupWholeBanReq)}
139+
BFrameType.SetGroupCardReq -> {respBuilder.frameType = BFrameType.SetGroupCardResp; respBuilder.setGroupCardResp = handleSetGroupCard(bot, req.setGroupCardReq)}
140+
BFrameType.SetGroupNameReq -> {respBuilder.frameType = BFrameType.SetGroupNameResp; respBuilder.setGroupNameResp = handleSetGroupName(bot, req.setGroupNameReq)}
141+
BFrameType.SetGroupLeaveReq -> {respBuilder.frameType = BFrameType.SetGroupLeaveResp; respBuilder.setGroupLeaveResp = handleSetGroupLeave(bot, req.setGroupLeaveReq)}
142+
BFrameType.SetGroupSpecialTitleReq -> {respBuilder.frameType = BFrameType.SetGroupSpecialTitleResp; respBuilder.setGroupSpecialTitleResp = handleSetGroupSpecialTitle(bot, req.setGroupSpecialTitleReq)}
143+
BFrameType.SetFriendAddRequestReq -> {respBuilder.frameType = BFrameType.SetFriendAddRequestResp; respBuilder.setFriendAddRequestResp = handleSetFriendAddRequest(bot, req.setFriendAddRequestReq)}
144+
BFrameType.SetGroupAddRequestReq -> {respBuilder.frameType = BFrameType.SetGroupAddRequestResp; respBuilder.setGroupAddRequestResp = handleSetGroupAddRequest(bot, req.setGroupAddRequestReq)}
145+
BFrameType.GetLoginInfoReq -> {respBuilder.frameType = BFrameType.GetLoginInfoResp; respBuilder.getLoginInfoResp = handleGetLoginInfo(bot, req.getLoginInfoReq)}
146+
BFrameType.GetFriendListReq -> {respBuilder.frameType = BFrameType.GetFriendListResp; respBuilder.getFriendListResp = handleGetFriendList(bot, req.getFriendListReq)}
147+
BFrameType.GetGroupInfoReq -> {respBuilder.frameType = BFrameType.GetGroupInfoResp; respBuilder.getGroupInfoResp = handleGetGroupInfo(bot, req.getGroupInfoReq)}
148+
BFrameType.GetGroupListReq -> {respBuilder.frameType = BFrameType.GetGroupListResp; respBuilder.getGroupListResp = handleGetGroupList(bot, req.getGroupListReq)}
149+
BFrameType.GetGroupMemberInfoReq -> {respBuilder.frameType = BFrameType.GetGroupMemberInfoResp; respBuilder.getGroupMemberInfoResp = handleGetGroupMemberInfo(bot, req.getGroupMemberInfoReq)}
150+
BFrameType.GetGroupMemberListReq -> {respBuilder.frameType = BFrameType.GetGroupMemberListResp; respBuilder.getGroupMemberListResp = handleGetGroupMemberList(bot, req.getGroupMemberListReq)}
150151
else -> respBuilder.ok = false
151152
}
152153
return respBuilder.build()

src/main/kotlin/net/lz1998/mirai/ext/Bot.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import net.mamoe.mirai.Bot
55
import net.mamoe.mirai.event.events.BotInvitedJoinGroupRequestEvent
66
import net.mamoe.mirai.event.events.MemberJoinRequestEvent
77
import net.mamoe.mirai.event.events.NewFriendRequestEvent
8-
import net.mamoe.mirai.message.data.MessageSource
8+
import net.mamoe.mirai.message.data.OnlineMessageSource
99

1010
// 消息记录,用于撤回
11-
val messageLru = LRUMap<Int, MessageSource>(128, 2048)
11+
val messageLru = LRUMap<Int, OnlineMessageSource>(128, 2048)
1212
val Bot.messageSourceLru
1313
get() = messageLru
1414

src/main/kotlin/net/lz1998/mirai/utils/ApiHandler.kt

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import net.lz1998.mirai.ext.friendRequestLru
66
import net.lz1998.mirai.ext.groupRequestLru
77
import net.lz1998.mirai.ext.messageSourceLru
88
import net.mamoe.mirai.Bot
9+
import net.mamoe.mirai.contact.Friend
10+
import net.mamoe.mirai.contact.Member
911
import net.mamoe.mirai.contact.MemberPermission
1012
import net.mamoe.mirai.getFriendOrNull
1113
import net.mamoe.mirai.getGroupOrNull
@@ -52,6 +54,50 @@ suspend fun handleDeleteMsg(bot: Bot, req: BDeleteMsgReq): BDeleteMsgResp? {
5254
return BDeleteMsgResp.newBuilder().build()
5355
}
5456

57+
suspend fun handleGetMsg(bot: Bot, req: BGetMsgReq): BGetMsgResp? {
58+
val messageSource = bot.messageSourceLru[req.messageId] ?: return null
59+
var messageType = "unknown"
60+
61+
val sender: BGetMsgSender? = when (messageSource.sender) {
62+
is Bot -> {
63+
messageType = "self"
64+
BGetMsgSender.newBuilder()
65+
.setUserId(bot.id)
66+
.build()
67+
}
68+
is Friend -> {
69+
messageType = "private"
70+
val friend: Friend = messageSource.sender as Friend
71+
BGetMsgSender.newBuilder()
72+
.setUserId(friend.id)
73+
.setNickname(friend.nick)
74+
.build()
75+
}
76+
is Member -> {
77+
messageType = "group"
78+
val member: Member = messageSource.sender as Member
79+
BGetMsgSender.newBuilder()
80+
.setUserId(member.id)
81+
.setNickname(member.nick)
82+
.setCard(member.nameCard)
83+
.setRole(member.permission.name)
84+
.setTitle(member.specialTitle)
85+
.build()
86+
}
87+
else -> null
88+
}
89+
90+
return BGetMsgResp.newBuilder()
91+
.setTime(messageSource.time)
92+
.setMessageType(messageType)
93+
.setMessageId(messageSource.id)
94+
.setRealId(messageSource.internalId) // 不知道是什么?
95+
.setSender(sender)
96+
.addAllMessage(messageSource.originalMessage.toOnebotMessage())
97+
.setRawMessage(messageSource.originalMessage.toRawMessage())
98+
.build()
99+
}
100+
55101
suspend fun handleSetGroupKick(bot: Bot, req: BSetGroupKickReq): BSetGroupKickResp? {
56102
val group = bot.getGroupOrNull(req.groupId) ?: return null
57103
val member = group.getOrNull(req.userId) ?: return null

src/main/kotlin/net/lz1998/mirai/utils/EventConverter.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ suspend fun BotEvent.toFrame(): BFrame? = when (this) {
1515
is BotInvitedJoinGroupRequestEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
1616
is NewFriendRequestEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
1717
is FriendAddEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
18+
is MessageRecallEvent.GroupRecall -> this.toProtoMessage().toProtoFrame(this.bot.id)
19+
is MessageRecallEvent.FriendRecall -> this.toProtoMessage().toProtoFrame(this.bot.id)
1820
else -> null
1921
}
2022

@@ -185,13 +187,39 @@ fun FriendAddEvent.toProtoMessage(): BFriendAddNoticeEvent {
185187
.build()
186188
}
187189

190+
fun MessageRecallEvent.GroupRecall.toProtoMessage(): BGroupRecallNoticeEvent {
191+
return BGroupRecallNoticeEvent.newBuilder()
192+
.setTime(System.currentTimeMillis())
193+
.setSelfId(bot.id)
194+
.setPostType("notice")
195+
.setNoticeType("group_recall")
196+
.setGroupId(this.group.id)
197+
.setUserId(this.authorId)
198+
.setOperatorId(this.operator?.id ?: 0)
199+
.setMessageId(this.messageId)
200+
.build()
201+
}
202+
203+
fun MessageRecallEvent.FriendRecall.toProtoMessage(): BFriendRecallNoticeEvent {
204+
return BFriendRecallNoticeEvent.newBuilder()
205+
.setTime(System.currentTimeMillis())
206+
.setSelfId(bot.id)
207+
.setPostType("notice")
208+
.setNoticeType("friend_recall")
209+
.setUserId(this.authorId)
210+
.setMessageId(this.messageId)
211+
.build()
212+
}
213+
188214
fun BGroupMessageEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.GroupMessageEvent).setGroupMessageEvent(this).build()
189215
fun BPrivateMessageEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.PrivateMessageEvent).setPrivateMessageEvent(this).build()
190216
fun BGroupIncreaseNoticeEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.GroupIncreaseNoticeEvent).setGroupIncreaseNoticeEvent(this).build()
191217
fun BGroupDecreaseNoticeEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.GroupDecreaseNoticeEvent).setGroupDecreaseNoticeEvent(this).build()
192218
fun BGroupRequestEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.GroupRequestEvent).setGroupRequestEvent(this).build()
193219
fun BFriendRequestEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.FriendRequestEvent).setFriendRequestEvent(this).build()
194220
fun BFriendAddNoticeEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.FriendAddNoticeEvent).setFriendAddNoticeEvent(this).build()
221+
fun BGroupRecallNoticeEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.GroupRecallNoticeEvent).setGroupRecallNoticeEvent(this).build()
222+
fun BFriendRecallNoticeEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.FriendRecallNoticeEvent).setFriendRecallNoticeEvent(this).build()
195223

196224

197225

0 commit comments

Comments
 (0)