Skip to content

Commit 209b2b7

Browse files
Support decode the join request by member invite (#882)
* Support detect official bot, fix #439 * Fix wrong command name and add missed value * Adapt to changed invite event * Internal MessageData * Fix build * Fix wording * Support decode the join request by member invite * Fix shadow warning * Fix build * Adapt to MemberJoinEvent broadcast logic when accepted * Downgrade blockingBridge version to 1.7.2 for passing build * Fix binary compatibility * Reformat code * Update api Co-authored-by: Him188 <[email protected]>
1 parent c77f94c commit 209b2b7

File tree

4 files changed

+78
-6
lines changed

4 files changed

+78
-6
lines changed

binary-compatibility-validator/api/binary-compatibility-validator.api

+11-3
Original file line numberDiff line numberDiff line change
@@ -2704,7 +2704,10 @@ public final class net/mamoe/mirai/event/events/MemberJoinEvent$Retrieve : net/m
27042704
}
27052705

27062706
public final class net/mamoe/mirai/event/events/MemberJoinRequestEvent : net/mamoe/mirai/event/AbstractEvent, net/mamoe/mirai/event/events/BotEvent, net/mamoe/mirai/internal/network/Packet {
2707-
public fun <init> (Lnet/mamoe/mirai/Bot;JLjava/lang/String;JJLjava/lang/String;Ljava/lang/String;)V
2707+
public static final field Companion Lnet/mamoe/mirai/event/events/MemberJoinRequestEvent$Companion;
2708+
public synthetic fun <init> (Lnet/mamoe/mirai/Bot;JLjava/lang/String;JJLjava/lang/String;Ljava/lang/String;)V
2709+
public fun <init> (Lnet/mamoe/mirai/Bot;JLjava/lang/String;JJLjava/lang/String;Ljava/lang/String;Ljava/lang/Long;)V
2710+
public synthetic fun <init> (Lnet/mamoe/mirai/Bot;JLjava/lang/String;JJLjava/lang/String;Ljava/lang/String;Ljava/lang/Long;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
27082711
public final fun accept ()Lkotlin/Unit;
27092712
public final fun accept (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
27102713
public final fun component1 ()Lnet/mamoe/mirai/Bot;
@@ -2714,8 +2717,11 @@ public final class net/mamoe/mirai/event/events/MemberJoinRequestEvent : net/mam
27142717
public final fun component5 ()J
27152718
public final fun component6 ()Ljava/lang/String;
27162719
public final fun component7 ()Ljava/lang/String;
2717-
public final fun copy (Lnet/mamoe/mirai/Bot;JLjava/lang/String;JJLjava/lang/String;Ljava/lang/String;)Lnet/mamoe/mirai/event/events/MemberJoinRequestEvent;
2718-
public static synthetic fun copy$default (Lnet/mamoe/mirai/event/events/MemberJoinRequestEvent;Lnet/mamoe/mirai/Bot;JLjava/lang/String;JJLjava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lnet/mamoe/mirai/event/events/MemberJoinRequestEvent;
2720+
public final fun component8 ()Ljava/lang/Long;
2721+
public final synthetic fun copy (Lnet/mamoe/mirai/Bot;JLjava/lang/String;JJLjava/lang/String;Ljava/lang/String;)Lnet/mamoe/mirai/event/events/MemberJoinRequestEvent;
2722+
public final fun copy (Lnet/mamoe/mirai/Bot;JLjava/lang/String;JJLjava/lang/String;Ljava/lang/String;Ljava/lang/Long;)Lnet/mamoe/mirai/event/events/MemberJoinRequestEvent;
2723+
public static final synthetic fun copy$default (Lnet/mamoe/mirai/event/events/MemberJoinRequestEvent;Lnet/mamoe/mirai/Bot;JLjava/lang/String;JJLjava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lnet/mamoe/mirai/event/events/MemberJoinRequestEvent;
2724+
public static synthetic fun copy$default (Lnet/mamoe/mirai/event/events/MemberJoinRequestEvent;Lnet/mamoe/mirai/Bot;JLjava/lang/String;JJLjava/lang/String;Ljava/lang/String;Ljava/lang/Long;ILjava/lang/Object;)Lnet/mamoe/mirai/event/events/MemberJoinRequestEvent;
27192725
public fun equals (Ljava/lang/Object;)Z
27202726
public fun getBot ()Lnet/mamoe/mirai/Bot;
27212727
public final fun getEventId ()J
@@ -2724,6 +2730,8 @@ public final class net/mamoe/mirai/event/events/MemberJoinRequestEvent : net/mam
27242730
public final fun getGroup ()Lnet/mamoe/mirai/contact/Group;
27252731
public final fun getGroupId ()J
27262732
public final fun getGroupName ()Ljava/lang/String;
2733+
public final fun getInvitor ()Lnet/mamoe/mirai/contact/NormalMember;
2734+
public final fun getInvitorId ()Ljava/lang/Long;
27272735
public final fun getMessage ()Ljava/lang/String;
27282736
public fun hashCode ()I
27292737
public final fun ignore (Z)Lkotlin/Unit;

mirai-core-api/src/commonMain/kotlin/event/events/group.kt

+54-1
Original file line numberDiff line numberDiff line change
@@ -365,13 +365,22 @@ public data class MemberJoinRequestEvent @MiraiInternalApi constructor(
365365
/**
366366
* 申请人昵称
367367
*/
368-
val fromNick: String
368+
val fromNick: String,
369+
/**
370+
* 邀请人 id(如果是邀请入群)
371+
*/
372+
val invitorId: Long? = null
369373
) : BotEvent, Packet, AbstractEvent() {
370374
/**
371375
* 相关群. 若在事件发生后机器人退出这个群, [group] 为 `null`.
372376
*/
373377
public val group: Group? get() = this.bot.getGroup(groupId)
374378

379+
/**
380+
* 邀请入群的成员. 若在事件发生时机器人或该成员退群, [invitor] 为 `null`.
381+
*/
382+
public val invitor: NormalMember? by lazy { invitorId?.let { group?.get(it) } }
383+
375384
@JvmField
376385
@PublishedApi
377386
internal val responded: AtomicBoolean = AtomicBoolean(false)
@@ -395,6 +404,50 @@ public data class MemberJoinRequestEvent @MiraiInternalApi constructor(
395404
*/
396405
@JvmBlockingBridge
397406
public suspend fun ignore(blackList: Boolean = false): Unit = Mirai.ignoreMemberJoinRequest(this, blackList)
407+
408+
@Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN)
409+
public constructor(
410+
bot: Bot, eventId: Long, message: String,
411+
fromId: Long, groupId: Long, groupName: String, fromNick: String
412+
) : this(bot, eventId, message, fromId, groupId, groupName, fromNick, null)
413+
414+
@Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN)
415+
public fun copy(
416+
bot: Bot, eventId: Long, message: String,
417+
fromId: Long, groupId: Long, groupName: String, fromNick: String
418+
): MemberJoinRequestEvent = copy(
419+
bot = bot, eventId = eventId, message = message, fromId = fromId,
420+
groupId = groupId, groupName = groupName, fromNick = fromNick, invitorId = null
421+
)
422+
423+
internal companion object {
424+
@Deprecated("For binary compatibility", level = DeprecationLevel.HIDDEN)
425+
@JvmStatic
426+
@JvmName("copy\$default") // avoid being mangled
427+
fun `copy$default`(
428+
var0: MemberJoinRequestEvent, var1: Bot, var2: Long, var4: String, var5: Long, var7: Long,
429+
var9: String, var10: String, var11: Int, @Suppress("UNUSED_PARAMETER") var12: Any
430+
): MemberJoinRequestEvent {
431+
var bot = var1
432+
var eventId = var2
433+
var message = var4
434+
var fromId = var5
435+
var groupId = var7
436+
var groupName = var9
437+
var fromNick = var10
438+
if (var11 and 1 != 0) bot = var0.bot
439+
if (var11 and 2 != 0) eventId = var0.eventId
440+
if (var11 and 4 != 0) message = var0.message
441+
if (var11 and 8 != 0) fromId = var0.fromId
442+
if (var11 and 16 != 0) groupId = var0.groupId
443+
if (var11 and 32 != 0) groupName = var0.groupName
444+
if (var11 and 64 != 0) fromNick = var0.fromNick
445+
return var0.copy(
446+
bot = bot, eventId = eventId, message = message,
447+
fromId = fromId, groupId = groupId, groupName = groupName, fromNick = fromNick
448+
)
449+
}
450+
}
398451
}
399452

400453
// endregion

mirai-core/src/commonMain/kotlin/MiraiImpl.kt

+5-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,11 @@ internal open class MiraiImpl : IMirai, LowLevelApiAccessor {
181181
)
182182

183183
event.group?.getMember(event.fromId)?.let { member ->
184-
MemberJoinEvent.Active(member).broadcast()
184+
if (event.invitor != null) {
185+
MemberJoinEvent.Invite(member, event.invitor!!).broadcast()
186+
} else {
187+
MemberJoinEvent.Active(member).broadcast()
188+
}
185189
}
186190
}
187191

mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/NewContact.kt

+8-1
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,19 @@ internal class NewContact {
166166
)
167167
}
168168
2 -> {
169-
// 被邀请入群
169+
// Bot 被邀请入群
170170
BotInvitedJoinGroupRequestEvent(
171171
bot, struct.msgSeq, actionUin,
172172
groupCode, groupName, actionUinNick
173173
)
174174
}
175+
22 -> {
176+
// 成员邀请入群
177+
MemberJoinRequestEvent(
178+
bot, struct.msgSeq, msgAdditional,
179+
struct.reqUin, groupCode, groupName, reqUinNick, actionUin
180+
)
181+
}
175182
else -> throw contextualBugReportException(
176183
"parse SystemMsgNewGroup, subType=1",
177184
this._miraiContentToString(),

0 commit comments

Comments
 (0)