Commit f4cb72b2 authored by Him188's avatar Him188

Add MemberJoinPacket

parent 6a294c0c
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS")
@file:Suppress("EXPERIMENTAL_UNSIGNED_LITERALS", "EXPERIMENTAL_API_USAGE", "unused", "MemberVisibilityCanBePrivate")
package net.mamoe.mirai.network.protocol.tim.packet.event
import kotlinx.io.core.ByteReadPacket
import kotlinx.io.core.readUInt
import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.event.events.BotEvent
import net.mamoe.mirai.contact.MemberPermission
import net.mamoe.mirai.contact.internal.MemberImpl
import net.mamoe.mirai.event.Event
import net.mamoe.mirai.getGroup
import net.mamoe.mirai.getQQ
import net.mamoe.mirai.network.BotNetworkHandler
import net.mamoe.mirai.network.protocol.tim.packet.Packet
import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.io.discardExact
//群有新成员加入
......@@ -20,18 +27,51 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
* 新成员加入. 此时这个人还没被添加到群列表
*/
internal class MemberJoinEventPacket(
val member: Member
val member: Member,
val inviter: Member?
) : Packet
class MemberJoinEvent : BotEvent() {
/**
* 成员加入前的事件. 群的成员列表中还没有这个人
*/
data class PreMemberJoinEvent(val member: Member, private val _inviter: Member?) : Event() {
val group: Group get() = member.group
val inviter: Member get() = _inviter ?: error("The new member is not a invitee")
val isInvitee: Boolean get() = _inviter != null
}
/**
* 成员加入后的事件. 群的成员列表中已经有这个人
*/
data class PostMemberJoinEvent(val member: Member, private val _inviter: Member?) : Event() {
val group: Group get() = member.group
val inviter: Member get() = _inviter ?: error("The new member is not a invitee")
val isInvitee: Boolean get() = _inviter != null
}
@UseExperimental(MiraiInternalAPI::class)
internal object MemberJoinPacketHandler : KnownEventParserAndHandler<MemberJoinEventPacket>(0x0021u) {
override suspend fun ByteReadPacket.parse(bot: Bot, identity: EventPacketIdentity): MemberJoinEventPacket {
//由 1040400290 邀请的新成员加入
//00 00 00 08 00 0A 00 04 01 00 00
// 00 32 DC FC C8
// 01 2D 5C 53 A6
// 03 3E 03 3F A2
// 06 B4 B4 BD A8 D5 DF
// 00 30 44 31 43 37 36 30 41 43 33 42 46 37 32 39 38 36 41 42 43 44 33 37 41 37 46 30 35 35 46 37 32 39 46 31 31 36 36 37 42 35 45 33 37 43 37 46 44 37
discardExact(11) //00 00 00 08 00 0A 00 04 01 00 00
discardExact(1) // 00
val group = bot.getGroup(readUInt())
discardExact(1) // 01
val member = MemberImpl(bot.getQQ(readUInt()), group, MemberPermission.MEMBER)
TODO()
return if (readByte().toInt() == 0x03) {
MemberJoinEventPacket(member, null)
} else {
MemberJoinEventPacket(member, group.getMember(readUInt()))
}
}
override suspend fun BotNetworkHandler<*>.handlePacket(packet: MemberJoinEventPacket) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment