mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-09 02:10:10 +08:00
[core] 修复群公告查询已阅读人员列表只能获取前 50 个的问题 (#2530)
This commit is contained in:
parent
28b1032acd
commit
c016b822e7
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user