mirror of
https://github.com/mamoe/mirai.git
synced 2025-02-09 04:42:02 +08:00
[core] Avoid deserialization error on sending group announcement, helps #2069.
Note this can not actually solve the problem that announcement had failed to send.
This commit is contained in:
parent
85d81efc4a
commit
648681a2ee
@ -32,6 +32,7 @@ import net.mamoe.mirai.internal.contact.announcement.AnnouncementProtocol.getRaw
|
|||||||
import net.mamoe.mirai.internal.contact.announcement.AnnouncementProtocol.sendGroupAnnouncement
|
import net.mamoe.mirai.internal.contact.announcement.AnnouncementProtocol.sendGroupAnnouncement
|
||||||
import net.mamoe.mirai.internal.contact.announcement.AnnouncementProtocol.toAnnouncement
|
import net.mamoe.mirai.internal.contact.announcement.AnnouncementProtocol.toAnnouncement
|
||||||
import net.mamoe.mirai.internal.contact.announcement.AnnouncementProtocol.toGroupAnnouncement
|
import net.mamoe.mirai.internal.contact.announcement.AnnouncementProtocol.toGroupAnnouncement
|
||||||
|
import net.mamoe.mirai.internal.message.contextualBugReportException
|
||||||
import net.mamoe.mirai.internal.network.client
|
import net.mamoe.mirai.internal.network.client
|
||||||
import net.mamoe.mirai.internal.network.components.HttpClientProvider
|
import net.mamoe.mirai.internal.network.components.HttpClientProvider
|
||||||
import net.mamoe.mirai.internal.network.highway.ChannelKind
|
import net.mamoe.mirai.internal.network.highway.ChannelKind
|
||||||
@ -187,7 +188,7 @@ internal object AnnouncementProtocol {
|
|||||||
data class SendGroupAnnouncementResp(
|
data class SendGroupAnnouncementResp(
|
||||||
@SerialName("ec") override val errorCode: Int = 0,
|
@SerialName("ec") override val errorCode: Int = 0,
|
||||||
@SerialName("em") override val errorMessage: String? = null,
|
@SerialName("em") override val errorMessage: String? = null,
|
||||||
@SerialName("new_fid") val fid: String,
|
@SerialName("new_fid") val fid: String? = null,
|
||||||
) : CheckableResponseA(), JsonStruct
|
) : CheckableResponseA(), JsonStruct
|
||||||
|
|
||||||
suspend fun QQAndroidBot.sendGroupAnnouncement(
|
suspend fun QQAndroidBot.sendGroupAnnouncement(
|
||||||
@ -195,7 +196,7 @@ internal object AnnouncementProtocol {
|
|||||||
announcement: GroupAnnouncement,
|
announcement: GroupAnnouncement,
|
||||||
image: AnnouncementImage?,
|
image: AnnouncementImage?,
|
||||||
): String {
|
): String {
|
||||||
return bot.components[HttpClientProvider].getHttpClient().post {
|
val body = bot.components[HttpClientProvider].getHttpClient().post {
|
||||||
url(
|
url(
|
||||||
"https://web.qun.qq.com/cgi-bin/announce/add_qun_" + if (announcement.type == 20) {
|
"https://web.qun.qq.com/cgi-bin/announce/add_qun_" + if (announcement.type == 20) {
|
||||||
"instruction"
|
"instruction"
|
||||||
@ -226,7 +227,14 @@ internal object AnnouncementProtocol {
|
|||||||
cookie("p_uin", "o$id")
|
cookie("p_uin", "o$id")
|
||||||
cookie("skey", sKey)
|
cookie("skey", sKey)
|
||||||
cookie("p_skey", psKey("qun.qq.com"))
|
cookie("p_skey", psKey("qun.qq.com"))
|
||||||
}.bodyAsText().loadSafelyAs(SendGroupAnnouncementResp.serializer()).check().fid
|
}.bodyAsText()
|
||||||
|
|
||||||
|
val resp = body.loadSafelyAs(SendGroupAnnouncementResp.serializer()).check() // check: deserialization errors
|
||||||
|
resp.check() // check: server response
|
||||||
|
resp.fid?.let { return it }
|
||||||
|
// '{"ec":1,"em":"no login [errcode:1:0]","ltsm":1653791033,"srv_code":0}'
|
||||||
|
|
||||||
|
throw contextualBugReportException("No fid found, but this should have be handled before.", forDebug = body)
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun QQAndroidBot.getRawGroupAnnouncements(
|
suspend fun QQAndroidBot.getRawGroupAnnouncements(
|
||||||
|
Loading…
Reference in New Issue
Block a user