mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-09 19:50:27 +08:00
Ensure info accessibility
This commit is contained in:
parent
999ce68cec
commit
fda644d248
@ -325,7 +325,7 @@ internal class GroupImpl(
|
||||
@UseExperimental(MiraiExperimentalAPI::class)
|
||||
override lateinit var botPermission: MemberPermission
|
||||
|
||||
override val members: ContactList<Member> = ContactList(members.asSequence().mapNotNull {
|
||||
override val members: ContactList<Member> = ContactList(members.mapNotNull {
|
||||
if (it.uin == bot.uin) {
|
||||
botPermission = it.permission
|
||||
null
|
||||
|
@ -24,7 +24,7 @@ import net.mamoe.mirai.event.events.BotEvent
|
||||
import net.mamoe.mirai.message.data.Image
|
||||
import net.mamoe.mirai.qqandroid.network.QQAndroidBotNetworkHandler
|
||||
import net.mamoe.mirai.qqandroid.network.QQAndroidClient
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.QQAndroidGroupInfo
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.GroupInfoImpl
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.TroopManagement
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.list.FriendList
|
||||
import net.mamoe.mirai.utils.*
|
||||
@ -92,11 +92,7 @@ internal abstract class QQAndroidBotBase constructor(
|
||||
TroopManagement.GetGroupInfo(
|
||||
client = bot.client,
|
||||
groupCode = id
|
||||
).sendAndExpect<QQAndroidGroupInfo>().apply {
|
||||
if (this.delegate.groupUin == null) {
|
||||
this.delegate.groupUin = Group.calculateGroupUinByGroupCode(id)
|
||||
}
|
||||
}
|
||||
).sendAndExpect<GroupInfoImpl>()
|
||||
}
|
||||
|
||||
override suspend fun queryGroupMemberList(groupUin: Long, groupCode: Long, ownerId: Long): Sequence<MemberInfo> = network.run {
|
||||
@ -110,8 +106,7 @@ internal abstract class QQAndroidBotBase constructor(
|
||||
nextUin = nextUin
|
||||
).sendAndExpect<FriendList.GetTroopMemberList.Response>(timeoutMillis = 3000)
|
||||
sequence += data.members.asSequence().map { troopMemberInfo ->
|
||||
MemberInfoImpl(troopMemberInfo.apply {
|
||||
}, ownerId)
|
||||
MemberInfoImpl(troopMemberInfo, ownerId)
|
||||
}
|
||||
nextUin = data.nextUin
|
||||
if (nextUin == 0L) {
|
||||
|
@ -30,6 +30,7 @@ import net.mamoe.mirai.qqandroid.QQImpl
|
||||
import net.mamoe.mirai.qqandroid.event.PacketReceivedEvent
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.data.proto.MsgSvc
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.*
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.GroupInfoImpl
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvc
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.list.FriendList
|
||||
import net.mamoe.mirai.qqandroid.network.protocol.packet.login.Heartbeat
|
||||
@ -174,7 +175,23 @@ internal class QQAndroidBotNetworkHandler(bot: QQAndroidBot) : BotNetworkHandler
|
||||
bot = bot,
|
||||
coroutineContext = bot.coroutineContext,
|
||||
id = troopNum.groupCode,
|
||||
groupInfo = bot.queryGroupInfo(troopNum.groupCode),
|
||||
groupInfo = bot.queryGroupInfo(troopNum.groupCode).apply {
|
||||
this as GroupInfoImpl
|
||||
|
||||
if (this.delegate.groupName == null) {
|
||||
this.delegate.groupName = troopNum.groupName
|
||||
}
|
||||
|
||||
if (this.delegate.groupMemo == null) {
|
||||
this.delegate.groupMemo = troopNum.groupMemo
|
||||
}
|
||||
|
||||
if (this.delegate.groupUin == null) {
|
||||
this.delegate.groupUin = troopNum.groupUin
|
||||
}
|
||||
|
||||
this.delegate.groupCode = troopNum.groupCode
|
||||
},
|
||||
members = bot.queryGroupMemberList(troopNum.groupUin, troopNum.groupCode, troopNum.dwGroupOwnerUin)
|
||||
)
|
||||
)
|
||||
|
@ -180,8 +180,8 @@ class Oidb0x88d : ProtoBuf {
|
||||
@SerialId(12) val groupDefaultPage: Int? = null,
|
||||
@SerialId(13) val groupInfoSeq: Int? = null,
|
||||
@SerialId(14) val groupRoamingTime: Int? = null,
|
||||
@SerialId(15) val groupName: String? = null,
|
||||
@SerialId(16) val groupMemo: String? = null,
|
||||
@SerialId(15) var groupName: String? = null,
|
||||
@SerialId(16) var groupMemo: String? = null,
|
||||
@SerialId(17) val ingGroupFingerMemo: String? = null,
|
||||
@SerialId(18) val ingGroupClassText: String? = null,
|
||||
@SerialId(19) val groupAllianceCode: List<Int>? = null,
|
||||
@ -254,7 +254,7 @@ class Oidb0x88d : ProtoBuf {
|
||||
@SerialId(86) val isAllowConfGroupMemberNick: Int? = null,
|
||||
@SerialId(87) val isAllowConfGroupMemberAtAll: Int? = null,
|
||||
@SerialId(88) val isAllowConfGroupMemberModifyGroupName: Int? = null,
|
||||
@SerialId(89) val ingLongGroupName: ByteArray? = null,
|
||||
@SerialId(89) val longGroupName: String? = null,
|
||||
@SerialId(90) val cmduinJoinRealMsgSeq: Int? = null,
|
||||
@SerialId(91) val isGroupFreeze: Int? = null,
|
||||
@SerialId(92) val msgLimitFrequency: Int? = null,
|
||||
@ -265,7 +265,8 @@ class Oidb0x88d : ProtoBuf {
|
||||
@SerialId(97) val isAllowHlGuildBinary: Int? = null,
|
||||
@SerialId(98) val cmduinRingtoneId: Int? = null,
|
||||
@SerialId(99) val groupFlagext4: Int? = null,
|
||||
@SerialId(100) val groupFreezeReason: Int? = null
|
||||
@SerialId(100) val groupFreezeReason: Int? = null,
|
||||
@SerialId(101) var groupCode: Long? = null // mirai 添加
|
||||
) : ProtoBuf
|
||||
|
||||
@Serializable
|
||||
|
@ -31,14 +31,14 @@ import net.mamoe.mirai.utils.daysToSeconds
|
||||
import net.mamoe.mirai.utils.io.encodeToString
|
||||
import net.mamoe.mirai.data.GroupInfo as MiraiGroupInfo
|
||||
|
||||
internal inline class QQAndroidGroupInfo(
|
||||
internal inline class GroupInfoImpl(
|
||||
internal val delegate: Oidb0x88d.GroupInfo
|
||||
) : MiraiGroupInfo, Packet {
|
||||
override val uin: Long get() = delegate.groupUin ?: error("cannot find groupUin")
|
||||
override val owner: Long get() = delegate.groupOwner ?: error("cannot find groupOwner")
|
||||
override val groupCode: Long get() = Group.calculateGroupCodeByGroupUin(uin)
|
||||
override val memo: String get() = delegate.groupMemo ?: error("cannot find groupMemo")
|
||||
override val name: String get() = delegate.groupName ?: error("cannot find groupName")
|
||||
override val name: String get() = delegate.groupName ?: delegate.longGroupName ?: error("cannot find groupName")
|
||||
override val allowMemberInvite get() = delegate.groupFlagExt?.and(0x000000c0) != 0
|
||||
override val allowAnonymousChat get() = delegate.groupFlagExt?.and(0x40000000) == 0
|
||||
override val autoApprove get() = delegate.groupFlagext3?.and(0x00100000) == 0
|
||||
@ -86,7 +86,7 @@ internal class TroopManagement {
|
||||
}
|
||||
|
||||
|
||||
internal object GetGroupInfo : OutgoingPacketFactory<QQAndroidGroupInfo>("OidbSvc.0x88d_7") {
|
||||
internal object GetGroupInfo : OutgoingPacketFactory<GroupInfoImpl>("OidbSvc.0x88d_7") {
|
||||
operator fun invoke(
|
||||
client: QQAndroidClient,
|
||||
groupCode: Long
|
||||
@ -117,7 +117,12 @@ internal class TroopManagement {
|
||||
createSourceFlag = 0,
|
||||
noCodeFingerOpenFlag = 0,
|
||||
ingGroupQuestion = "",
|
||||
ingGroupAnswer = ""
|
||||
ingGroupAnswer = "",
|
||||
groupName = "",
|
||||
longGroupName = "",
|
||||
groupMemo = "",
|
||||
groupUin = 0,
|
||||
groupOwner = 0
|
||||
),
|
||||
groupCode = groupCode
|
||||
)
|
||||
@ -128,9 +133,9 @@ internal class TroopManagement {
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): QQAndroidGroupInfo {
|
||||
override suspend fun ByteReadPacket.decode(bot: QQAndroidBot): GroupInfoImpl {
|
||||
with(this.readBytes().loadAs(OidbSso.OIDBSSOPkg.serializer()).bodybuffer.loadAs(Oidb0x88d.RspBody.serializer()).stzrspgroupinfo!![0].stgroupinfo!!) {
|
||||
return QQAndroidGroupInfo(this)
|
||||
return GroupInfoImpl(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -133,6 +133,15 @@ internal class MessageSvc {
|
||||
val messages = resp.uinPairMsgs.asSequence().filterNot { it.msg == null }.flatMap { it.msg!!.asSequence() }.mapNotNull {
|
||||
when (it.msgHead.msgType) {
|
||||
33 -> {
|
||||
if (it.msgHead.authUin == bot.uin) {
|
||||
val group = bot.getGroupByUinOrNull(it.msgHead.fromUin)
|
||||
if (group == null) {
|
||||
TODO("查询群信息, 添加群")
|
||||
}
|
||||
}
|
||||
|
||||
TODO("为 group 添加一个 fun Member() 来构造 member")
|
||||
// bot.getGroupByUin(it.msgHead.fromUin).members.delegate.addLast()
|
||||
println("GroupUin" + it.msgHead.fromUin + "新群员" + it.msgHead.authUin + " 出现了[" + it.msgHead.authNick + "] 添加刷新")
|
||||
null
|
||||
}
|
||||
|
@ -21,17 +21,17 @@ interface GroupInfo {
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
val name: String
|
||||
val name: String // 不一定能获取到
|
||||
|
||||
/**
|
||||
* 群主
|
||||
*/
|
||||
val owner: Long
|
||||
val owner: Long // 不一定能获取到
|
||||
|
||||
/**
|
||||
* 入群公告
|
||||
*/
|
||||
val memo: String
|
||||
val memo: String // 不一定能获取到
|
||||
|
||||
/**
|
||||
* 允许群员邀请其他人加入群
|
||||
|
Loading…
Reference in New Issue
Block a user