1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-04-09 02:10:10 +08:00

[core] 修复群公告查询已阅读人员列表只能获取前 50 个的问题 ()

This commit is contained in:
cssxsh 2023-03-21 22:45:42 +08:00 committed by GitHub
parent 28b1032acd
commit c016b822e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -148,8 +148,27 @@ internal abstract class CommonAnnouncementsImpl(
override suspend fun members(fid: String, confirmed: Boolean): List<NormalMember> {
group.checkBotPermission(MemberPermission.ADMINISTRATOR) { "Only administrator have permission see announcement confirmed detail" }
val detail = bot.getReadDetail(groupId = group.id, fid = fid, read = confirmed)
return detail.users.mapNotNull { user -> group[user.uin] }
val flow = flow<NormalMember> {
var offset = 0
while (true) {
val detail = bot.getReadDetail(
groupId = group.id,
fid = fid,
read = confirmed,
offset = offset,
limit = 50
)
if (detail.users.isEmpty()) break
for (user in detail.users) {
val member = group[user.uin] ?: continue
emit(member)
}
offset += detail.users.size
val target = if (confirmed) detail.readTotal else detail.unreadTotal
if (offset == target) break
}
}
return flow.toList()
}
override suspend fun remind(fid: String) {
@ -318,12 +337,18 @@ internal object AnnouncementProtocol {
private fun <T> CgiData.loadData(serializer: KSerializer<T>): T =
defaultJson.decodeFromJsonElement(serializer, this.data)
suspend fun QQAndroidBot.getReadDetail(groupId: Long, fid: String, read: Boolean): GroupAnnouncementReadDetail {
suspend fun QQAndroidBot.getReadDetail(
groupId: Long,
fid: String,
read: Boolean,
offset: Int,
limit: Int
): GroupAnnouncementReadDetail {
val cgi = bot.components[HttpClientProvider].getHttpClient().post {
url("https://qun.qq.com/cgi-bin/qunapp/announce_unread")
parameter("gc", groupId)
parameter("start", 0)
parameter("num", 3000)
parameter("start", offset)
parameter("num", limit)
parameter("feed_id", fid)
parameter("type", if (read) 1 else 0)
parameter("bkn", client.wLoginSigInfo.bkn)