mirror of
https://github.com/whitechi73/OpenShamrock.git
synced 2024-08-14 13:12:17 +08:00
Shamrock
: _get_group_notice
This commit is contained in:
parent
b23620b5ef
commit
45d6421153
@ -40,11 +40,15 @@ import moe.fuqiuluo.shamrock.helper.Level
|
|||||||
import moe.fuqiuluo.shamrock.helper.LogCenter
|
import moe.fuqiuluo.shamrock.helper.LogCenter
|
||||||
import moe.fuqiuluo.shamrock.helper.MessageHelper
|
import moe.fuqiuluo.shamrock.helper.MessageHelper
|
||||||
import moe.fuqiuluo.shamrock.remote.service.data.EssenceMessage
|
import moe.fuqiuluo.shamrock.remote.service.data.EssenceMessage
|
||||||
|
import moe.fuqiuluo.shamrock.remote.service.data.GroupAnnouncement
|
||||||
|
import moe.fuqiuluo.shamrock.remote.service.data.GroupAnnouncementMessage
|
||||||
|
import moe.fuqiuluo.shamrock.remote.service.data.GroupAnnouncementMessageImage
|
||||||
import moe.fuqiuluo.shamrock.tools.EmptyJsonArray
|
import moe.fuqiuluo.shamrock.tools.EmptyJsonArray
|
||||||
import moe.fuqiuluo.shamrock.tools.GlobalClient
|
import moe.fuqiuluo.shamrock.tools.GlobalClient
|
||||||
import moe.fuqiuluo.shamrock.tools.asInt
|
import moe.fuqiuluo.shamrock.tools.asInt
|
||||||
import moe.fuqiuluo.shamrock.tools.asJsonArrayOrNull
|
import moe.fuqiuluo.shamrock.tools.asJsonArrayOrNull
|
||||||
import moe.fuqiuluo.shamrock.tools.asJsonObject
|
import moe.fuqiuluo.shamrock.tools.asJsonObject
|
||||||
|
import moe.fuqiuluo.shamrock.tools.asJsonObjectOrNull
|
||||||
import moe.fuqiuluo.shamrock.tools.asLong
|
import moe.fuqiuluo.shamrock.tools.asLong
|
||||||
import moe.fuqiuluo.shamrock.tools.asString
|
import moe.fuqiuluo.shamrock.tools.asString
|
||||||
import moe.fuqiuluo.shamrock.tools.asStringOrNull
|
import moe.fuqiuluo.shamrock.tools.asStringOrNull
|
||||||
@ -751,7 +755,6 @@ internal object GroupSvc: BaseSvc() {
|
|||||||
header("Cookie", cookie)
|
header("Cookie", cookie)
|
||||||
}
|
}
|
||||||
val body = Json.decodeFromStream<JsonElement>(response.body())
|
val body = Json.decodeFromStream<JsonElement>(response.body())
|
||||||
LogCenter.log(body.toString(), Level.WARN)
|
|
||||||
if (body.jsonObject["retcode"].asInt == 0) {
|
if (body.jsonObject["retcode"].asInt == 0) {
|
||||||
val data = body.jsonObject["data"].asJsonObject
|
val data = body.jsonObject["data"].asJsonObject
|
||||||
val list = data["msg_list"].asJsonArrayOrNull
|
val list = data["msg_list"].asJsonArrayOrNull
|
||||||
@ -780,6 +783,39 @@ internal object GroupSvc: BaseSvc() {
|
|||||||
} else {
|
} else {
|
||||||
return Result.failure(Exception(body.jsonObject["retmsg"].asStringOrNull))
|
return Result.failure(Exception(body.jsonObject["retmsg"].asStringOrNull))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
|
suspend fun getGroupAnnouncements(groupId: Long): Result<List<GroupAnnouncement>>{
|
||||||
|
val cookie = TicketSvc.getCookie("qun.qq.com")
|
||||||
|
val bkn = TicketSvc.getBkn(TicketSvc.getRealSkey(TicketSvc.getUin()))
|
||||||
|
val url = "https://web.qun.qq.com/cgi-bin/announce/get_t_list?bkn=${bkn}&qid=${groupId}&ft=23&s=-1&n=20"
|
||||||
|
val response = GlobalClient.get(url) {
|
||||||
|
header("Cookie", cookie)
|
||||||
|
}
|
||||||
|
val body = Json.decodeFromStream<JsonElement>(response.body())
|
||||||
|
if (body.jsonObject["ec"].asInt == 0) {
|
||||||
|
val list = body.jsonObject["feeds"].asJsonArrayOrNull
|
||||||
|
?: return Result.success(ArrayList())
|
||||||
|
return Result.success(list.map {
|
||||||
|
val obj = it.jsonObject
|
||||||
|
GroupAnnouncement(
|
||||||
|
senderId = obj["u"].asLong,
|
||||||
|
publishTime = obj["pubt"].asLong,
|
||||||
|
message = GroupAnnouncementMessage(
|
||||||
|
text = obj["msg"].asJsonObject["text"].asString,
|
||||||
|
images = obj["msg"].asJsonObject["pics"].asJsonArrayOrNull?.map {
|
||||||
|
GroupAnnouncementMessageImage(
|
||||||
|
id = it.jsonObject["id"].asString,
|
||||||
|
width = it.jsonObject["w"].asString,
|
||||||
|
height = it.jsonObject["h"].asString,
|
||||||
|
)
|
||||||
|
} ?: ArrayList()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
return Result.failure(Exception(body.jsonObject["em"].asStringOrNull))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -31,7 +31,7 @@ internal object ActionManager {
|
|||||||
// GroupActions
|
// GroupActions
|
||||||
ModifyTroopName, LeaveTroop, KickTroopMember, BanTroopMember, SetGroupWholeBan, SetGroupAdmin,
|
ModifyTroopName, LeaveTroop, KickTroopMember, BanTroopMember, SetGroupWholeBan, SetGroupAdmin,
|
||||||
ModifyTroopMemberName, SetGroupUnique, GetTroopHonor, GroupPoke, SetEssenceMessage, DeleteEssenceMessage,
|
ModifyTroopMemberName, SetGroupUnique, GetTroopHonor, GroupPoke, SetEssenceMessage, DeleteEssenceMessage,
|
||||||
GetGroupSystemMsg, GetProhibitedMemberList, GetEssenceMessageList,
|
GetGroupSystemMsg, GetProhibitedMemberList, GetEssenceMessageList, GetGroupNotice,
|
||||||
|
|
||||||
// MSG ACTIONS
|
// MSG ACTIONS
|
||||||
SendMessage, DeleteMessage, GetMsg, GetForwardMsg, SendGroupForwardMsg, SendGroupMessage, SendPrivateMessage,
|
SendMessage, DeleteMessage, GetMsg, GetForwardMsg, SendGroupForwardMsg, SendGroupMessage, SendPrivateMessage,
|
||||||
|
@ -28,6 +28,6 @@ internal object GetEssenceMessageList: IActionHandler() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override val alias: Array<String> = arrayOf("delete_essence_message")
|
override val alias: Array<String> = arrayOf("get_essence_message_list")
|
||||||
override fun path(): String = "delete_essence_msg"
|
override fun path(): String = "get_essence_msg_list"
|
||||||
}
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package moe.fuqiuluo.shamrock.remote.action.handlers
|
||||||
|
|
||||||
|
import com.tencent.qqnt.kernel.nativeinterface.MsgConstant
|
||||||
|
import kotlinx.serialization.json.JsonElement
|
||||||
|
import moe.fuqiuluo.qqinterface.servlet.GroupSvc
|
||||||
|
import moe.fuqiuluo.qqinterface.servlet.MsgSvc
|
||||||
|
import moe.fuqiuluo.shamrock.remote.action.ActionSession
|
||||||
|
import moe.fuqiuluo.shamrock.remote.action.IActionHandler
|
||||||
|
import moe.fuqiuluo.shamrock.tools.EmptyJsonString
|
||||||
|
|
||||||
|
internal object GetGroupNotice: IActionHandler() {
|
||||||
|
override suspend fun internalHandle(session: ActionSession): String {
|
||||||
|
val groupId = session.getLong("group_id")
|
||||||
|
return invoke(groupId, session.echo)
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend operator fun invoke(groupId: Long, echo: JsonElement = EmptyJsonString): String {
|
||||||
|
val announcements = GroupSvc.getGroupAnnouncements(groupId)
|
||||||
|
if (announcements.isSuccess) {
|
||||||
|
return ok(announcements.getOrNull(), echo)
|
||||||
|
}
|
||||||
|
return logic(announcements.exceptionOrNull()?.message ?: "", echo)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override val alias: Array<String> = arrayOf("get_group_notice")
|
||||||
|
override fun path(): String = "_get_group_notice"
|
||||||
|
}
|
@ -128,4 +128,9 @@ fun Routing.troopAction() {
|
|||||||
call.respondText(GetGroupSystemMsg(), ContentType.Application.Json)
|
call.respondText(GetGroupSystemMsg(), ContentType.Application.Json)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getOrPost("/_get_group_notice") {
|
||||||
|
val groupId = fetchOrThrow("group_id").toLong()
|
||||||
|
call.respondText(GetGroupNotice(groupId), ContentType.Application.Json)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
package moe.fuqiuluo.shamrock.remote.service.data
|
||||||
|
|
||||||
|
import kotlinx.serialization.SerialName
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
internal data class GroupAnnouncement (
|
||||||
|
@SerialName("sender_id") val senderId: Long = 0,
|
||||||
|
@SerialName("publish_time") val publishTime: Long,
|
||||||
|
@SerialName("message") val message: GroupAnnouncementMessage,
|
||||||
|
)
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
internal data class GroupAnnouncementMessage (
|
||||||
|
@SerialName("text") val text: String,
|
||||||
|
@SerialName("images") val images: List<GroupAnnouncementMessageImage>,
|
||||||
|
)
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
internal data class GroupAnnouncementMessageImage (
|
||||||
|
@SerialName("height") val height: String,
|
||||||
|
@SerialName("width") val width: String,
|
||||||
|
@SerialName("id") val id: String,
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user