@@ -148,8 +148,27 @@ internal abstract class CommonAnnouncementsImpl(
148
148
149
149
override suspend fun members (fid : String , confirmed : Boolean ): List <NormalMember > {
150
150
group.checkBotPermission(MemberPermission .ADMINISTRATOR ) { " Only administrator have permission see announcement confirmed detail" }
151
- val detail = bot.getReadDetail(groupId = group.id, fid = fid, read = confirmed)
152
- return detail.users.mapNotNull { user -> group[user.uin] }
151
+ val flow = flow<NormalMember > {
152
+ var offset = 0
153
+ while (true ) {
154
+ val detail = bot.getReadDetail(
155
+ groupId = group.id,
156
+ fid = fid,
157
+ read = confirmed,
158
+ offset = offset,
159
+ limit = 50
160
+ )
161
+ if (detail.users.isEmpty()) break
162
+ for (user in detail.users) {
163
+ val member = group[user.uin] ? : continue
164
+ emit(member)
165
+ }
166
+ offset + = detail.users.size
167
+ val target = if (confirmed) detail.readTotal else detail.unreadTotal
168
+ if (offset == target) break
169
+ }
170
+ }
171
+ return flow.toList()
153
172
}
154
173
155
174
override suspend fun remind (fid : String ) {
@@ -318,12 +337,18 @@ internal object AnnouncementProtocol {
318
337
private fun <T > CgiData.loadData (serializer : KSerializer <T >): T =
319
338
defaultJson.decodeFromJsonElement(serializer, this .data)
320
339
321
- suspend fun QQAndroidBot.getReadDetail (groupId : Long , fid : String , read : Boolean ): GroupAnnouncementReadDetail {
340
+ suspend fun QQAndroidBot.getReadDetail (
341
+ groupId : Long ,
342
+ fid : String ,
343
+ read : Boolean ,
344
+ offset : Int ,
345
+ limit : Int
346
+ ): GroupAnnouncementReadDetail {
322
347
val cgi = bot.components[HttpClientProvider ].getHttpClient().post {
323
348
url(" https://qun.qq.com/cgi-bin/qunapp/announce_unread" )
324
349
parameter(" gc" , groupId)
325
- parameter(" start" , 0 )
326
- parameter(" num" , 3000 )
350
+ parameter(" start" , offset )
351
+ parameter(" num" , limit )
327
352
parameter(" feed_id" , fid)
328
353
parameter(" type" , if (read) 1 else 0 )
329
354
parameter(" bkn" , client.wLoginSigInfo.bkn)
0 commit comments