Skip to content

Commit d5ba111

Browse files
authored
Merge pull request #6 from lz1998/master
group/friend request/notice
2 parents 0ea6d8e + 0ae68e4 commit d5ba111

File tree

5 files changed

+100
-8
lines changed

5 files changed

+100
-8
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.8"
31+
version = "0.0.9"
3232
java.sourceCompatibility = JavaVersion.VERSION_1_8
3333

3434
configurations {

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,14 @@ import kotlinx.coroutines.launch
66
import kotlinx.coroutines.withContext
77
import net.lz1998.mirai.alias.BFrame
88
import net.lz1998.mirai.alias.BFrameType
9-
import net.lz1998.mirai.ext.fileStrBasedDeviceInfo
10-
import net.lz1998.mirai.ext.friendRequestLru
11-
import net.lz1998.mirai.ext.groupRequestLru
12-
import net.lz1998.mirai.ext.messageSourceLru
9+
import net.lz1998.mirai.ext.*
1310
import net.lz1998.mirai.service.MyLoginSolver
1411
import net.lz1998.mirai.utils.*
1512
import net.lz1998.mirai.utils.toFrame
1613
import net.mamoe.mirai.Bot
1714
import net.mamoe.mirai.alsoLogin
1815
import net.mamoe.mirai.event.events.BotEvent
16+
import net.mamoe.mirai.event.events.BotInvitedJoinGroupRequestEvent
1917
import net.mamoe.mirai.event.events.MemberJoinRequestEvent
2018
import net.mamoe.mirai.event.events.NewFriendRequestEvent
2119
import net.mamoe.mirai.event.subscribeAlways
@@ -112,6 +110,9 @@ class WebsocketBotClient(override var botId: Long, override var password: String
112110
bot.subscribeAlways<MemberJoinRequestEvent> {
113111
bot.groupRequestLru.put(it.eventId, it)
114112
}
113+
bot.subscribeAlways<BotInvitedJoinGroupRequestEvent> {
114+
bot.botInvitedGroupRequestLru.put(it.eventId, it)
115+
}
115116
bot.subscribeAlways<NewFriendRequestEvent> {
116117
bot.friendRequestLru.put(it.eventId, it)
117118
}

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,27 @@ package net.lz1998.mirai.ext
22

33
import com.fasterxml.jackson.databind.util.LRUMap
44
import net.mamoe.mirai.Bot
5+
import net.mamoe.mirai.event.events.BotInvitedJoinGroupRequestEvent
56
import net.mamoe.mirai.event.events.MemberJoinRequestEvent
67
import net.mamoe.mirai.event.events.NewFriendRequestEvent
78
import net.mamoe.mirai.message.data.MessageSource
89

10+
// 消息记录,用于撤回
911
val messageLru = LRUMap<Int, MessageSource>(128, 2048)
1012
val Bot.messageSourceLru
1113
get() = messageLru
1214

13-
15+
// 别人加群请求
1416
val memberJoinRequestEventLru = LRUMap<Long, MemberJoinRequestEvent>(16, 128)
1517
val Bot.groupRequestLru
1618
get() = memberJoinRequestEventLru
1719

20+
// 机器人自己被邀请进群请求
21+
val botInvitedJoinGroupRequestEventLru = LRUMap<Long, BotInvitedJoinGroupRequestEvent>(8, 32)
22+
val Bot.botInvitedGroupRequestLru
23+
get() = botInvitedJoinGroupRequestEventLru
24+
25+
// 添加好友请求
1826
val newFriendRequestEventLru = LRUMap<Long, NewFriendRequestEvent>(16, 128)
1927
val Bot.friendRequestLru
2028
get() = newFriendRequestEventLru

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.lz1998.mirai.utils
22

33
import net.lz1998.mirai.alias.*
4+
import net.lz1998.mirai.ext.botInvitedGroupRequestLru
45
import net.lz1998.mirai.ext.friendRequestLru
56
import net.lz1998.mirai.ext.groupRequestLru
67
import net.lz1998.mirai.ext.messageSourceLru
@@ -113,8 +114,12 @@ suspend fun handleSetFriendAddRequest(bot: Bot, req: BSetFriendAddRequestReq): B
113114
suspend fun handleSetGroupAddRequest(bot: Bot, req: BSetGroupAddRequestReq): BSetGroupAddRequestResp? {
114115
val approve = req.approve
115116
val flag = req.flag
116-
val request = bot.groupRequestLru[flag.toLongOrNull()] ?: return null
117-
if (approve) request.accept() else request.reject()
117+
bot.groupRequestLru[flag.toLongOrNull()]?.let {
118+
if (approve) it.accept() else it.reject()
119+
}
120+
bot.botInvitedGroupRequestLru[flag.toLongOrNull()]?.let {
121+
if (approve) it.accept() else it.ignore()
122+
}
118123
return BSetGroupAddRequestResp.newBuilder().build()
119124
}
120125

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

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ suspend fun BotEvent.toFrame(): BFrame? = when (this) {
99
is GroupMessageEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
1010
is FriendMessageEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
1111
is MemberJoinEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
12+
is BotJoinGroupEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
1213
is MemberLeaveEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
14+
is MemberJoinRequestEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
15+
is BotInvitedJoinGroupRequestEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
16+
is NewFriendRequestEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
17+
is FriendAddEvent -> this.toProtoMessage().toProtoFrame(this.bot.id)
1318
else -> null
1419
}
1520

@@ -86,6 +91,27 @@ fun MemberJoinEvent.toProtoMessage(): BGroupIncreaseNoticeEvent {
8691
.build()
8792
}
8893

94+
fun BotJoinGroupEvent.toProtoMessage(): BGroupIncreaseNoticeEvent {
95+
val subType = when (this) {
96+
is BotJoinGroupEvent.Invite -> "invite"
97+
else -> "approve"
98+
}
99+
val operatorId = when (this) {
100+
is BotJoinGroupEvent.Invite -> this.invitor.id
101+
else -> 0L
102+
}
103+
return BGroupIncreaseNoticeEvent.newBuilder()
104+
.setTime(System.currentTimeMillis())
105+
.setSelfId(bot.id)
106+
.setPostType("notice")
107+
.setNoticeType("group_increase")
108+
.setSubType(subType)
109+
.setGroupId(this.group.id)
110+
.setOperatorId(operatorId)
111+
.setUserId(bot.id)
112+
.build()
113+
}
114+
89115
fun MemberLeaveEvent.toProtoMessage(): BGroupDecreaseNoticeEvent {
90116
val operatorId: Long
91117
val subType = when (this) {
@@ -110,10 +136,62 @@ fun MemberLeaveEvent.toProtoMessage(): BGroupDecreaseNoticeEvent {
110136
.build()
111137
}
112138

139+
fun MemberJoinRequestEvent.toProtoMessage(): BGroupRequestEvent {
140+
return BGroupRequestEvent.newBuilder()
141+
.setTime(System.currentTimeMillis())
142+
.setSelfId(bot.id)
143+
.setPostType("request")
144+
.setRequestType("group")
145+
.setSubType("add")
146+
.setGroupId(this.groupId)
147+
.setUserId(this.fromId)
148+
.setComment(this.message)
149+
.setFlag(this.eventId.toString())
150+
.build()
151+
}
152+
153+
fun BotInvitedJoinGroupRequestEvent.toProtoMessage(): BGroupRequestEvent {
154+
return BGroupRequestEvent.newBuilder()
155+
.setTime(System.currentTimeMillis())
156+
.setSelfId(bot.id)
157+
.setPostType("request")
158+
.setRequestType("group")
159+
.setSubType("invite")
160+
.setGroupId(this.groupId)
161+
.setUserId(this.invitorId)
162+
.setFlag(this.eventId.toString())
163+
.build()
164+
}
165+
166+
fun NewFriendRequestEvent.toProtoMessage(): BFriendRequestEvent {
167+
return BFriendRequestEvent.newBuilder()
168+
.setTime(System.currentTimeMillis())
169+
.setSelfId(bot.id)
170+
.setPostType("request")
171+
.setRequestType("friend")
172+
.setUserId(this.fromId)
173+
.setComment(this.message)
174+
.setFlag(this.eventId.toString())
175+
.build()
176+
}
177+
178+
fun FriendAddEvent.toProtoMessage(): BFriendAddNoticeEvent {
179+
return BFriendAddNoticeEvent.newBuilder()
180+
.setTime(System.currentTimeMillis())
181+
.setSelfId(bot.id)
182+
.setPostType("notice")
183+
.setNoticeType("friend_add")
184+
.setUserId(this.friend.id)
185+
.build()
186+
}
187+
113188
fun BGroupMessageEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.GroupMessageEvent).setGroupMessageEvent(this).build()
114189
fun BPrivateMessageEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.PrivateMessageEvent).setPrivateMessageEvent(this).build()
115190
fun BGroupIncreaseNoticeEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.GroupIncreaseNoticeEvent).setGroupIncreaseNoticeEvent(this).build()
116191
fun BGroupDecreaseNoticeEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.GroupDecreaseNoticeEvent).setGroupDecreaseNoticeEvent(this).build()
192+
fun BGroupRequestEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.GroupRequestEvent).setGroupRequestEvent(this).build()
193+
fun BFriendRequestEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.FriendRequestEvent).setFriendRequestEvent(this).build()
194+
fun BFriendAddNoticeEvent.toProtoFrame(botId: Long): BFrame = BFrame.newBuilder().setBotId(botId).setFrameType(BFrameType.FriendAddNoticeEvent).setFriendAddNoticeEvent(this).build()
117195

118196

119197

0 commit comments

Comments
 (0)