3 Commits

Author SHA1 Message Date
4dc83fdeba Shamrock: add real_id for long msg
Signed-off-by: 白池 <whitechi73@outlook.com>
2024-02-28 00:03:47 +08:00
541422a43e Shamrock: fix #260
Signed-off-by: 白池 <whitechi73@outlook.com>
2024-02-27 22:35:31 +08:00
cb7bf00e17 Shamrock: Automatically remove group forward messages
Signed-off-by: 白池 <whitechi73@outlook.com>
2024-02-27 22:25:38 +08:00
8 changed files with 26 additions and 5 deletions

View File

@ -983,6 +983,7 @@ internal object GroupSvc: BaseSvc() {
operatorTime = obj["add_digest_time"].asLong,
messageId = 0,
messageSeq = msgSeq,
realId = msgSeq,
messageContent = obj["msg_content"] ?: EmptyJsonArray
)
val mapping = MessageHelper.getMsgMappingBySeq(MsgConstant.KCHATTYPEGROUP, groupId.toString(), msgSeq)

View File

@ -98,7 +98,7 @@ internal object MsgSvc : BaseSvc() {
}
continuation.invokeOnCancellation {
continuation.resume(null)
} // 貌似不会被取消,写了也没什么鸟用啊?
}
}
}
@ -298,6 +298,7 @@ internal object MsgSvc : BaseSvc() {
msgType = MessageHelper.obtainDetailTypeByMsgType(chatType),
msgId = 0, // MessageHelper.generateMsgIdHash(chatType, msg.content!!.msgViaRandom), msgViaRandom 为空
msgSeq = msg.contentHead!!.msgSeq ?: 0,
realId = msg.contentHead!!.msgSeq ?: 0,
sender = MessageSender(
msg.msgHead?.peer ?: 0,
msg.msgHead?.responseGrp?.memberCard?.ifEmpty { msg.msgHead?.forward?.friendName }

View File

@ -18,6 +18,8 @@ import moe.fuqiuluo.shamrock.helper.db.MessageDB
import moe.fuqiuluo.shamrock.tools.asJsonObject
import moe.fuqiuluo.shamrock.tools.asString
import moe.fuqiuluo.shamrock.tools.hex2ByteArray
import moe.fuqiuluo.shamrock.utils.PlatformUtils
import moe.fuqiuluo.shamrock.utils.PlatformUtils.QQ_9_0_8_VER
internal typealias IMsgElementConverter = suspend (Int, String, String, MsgElement) -> MessageSegment
@ -167,6 +169,11 @@ internal object NtMsgElementConverter {
val originalUrl = image.originImageUrl ?: ""
LogCenter.log({ "receive image: $image" }, Level.DEBUG)
var storeId = 0
if (PlatformUtils.getQQVersionCode() > QQ_9_0_8_VER) {
storeId = image.storeID
}
return MessageSegment(
type = "image",
data = hashMapOf(
@ -192,6 +199,7 @@ internal object NtMsgElementConverter {
sha = "",
fileSize = image.fileSize.toULong(),
peer = peerId,
storeId = storeId
)
MsgConstant.KCHATTYPEGUILD -> RichProtoSvc.getGuildPicDownUrl(

View File

@ -296,7 +296,12 @@ internal object NtV2RichMediaSvc: BaseSvc() {
contact = contact,
message = ArrayList(messages),
uniseq = uniseq.qqMsgId
) { _, _ -> }
) { _, _ ->
val kernelService = NTServiceFetcher.kernelService
val sessionService = kernelService.wrapperSession
val msgService = sessionService.msgService
msgService.deleteMsg(contact, arrayListOf(uniseq.qqMsgId), null)
}
it.invokeOnCancellation {
RichMediaUploadHandler.removeListener(uniseq.qqMsgId)
}

View File

@ -208,9 +208,10 @@ internal object RichProtoSvc: BaseSvc() {
sha: String = "",
fileSize: ULong = 0uL,
width: UInt = 0u,
height: UInt = 0u
height: UInt = 0u,
storeId: Int = 0
): String {
val isNtServer = originalUrl.startsWith("/download")
val isNtServer = storeId == 1 || originalUrl.startsWith("/download")
val domain = if (isNtServer) MULTIMEDIA_DOMAIN else C2C_PIC
if (originalUrl.isNotEmpty()) {
if (fileId.isNotEmpty()) getNtPicRKey(
@ -238,7 +239,7 @@ internal object RichProtoSvc: BaseSvc() {
}
return "https://$domain$originalUrl"
}
return "https://$domain/offpic_new/0/123-0-${md5}/0?term=2"
return "https://$domain/offpic_new/0/0-0-${md5}/0?term=2"
}
suspend fun getGuildPicDownUrl(

View File

@ -70,6 +70,7 @@ internal object GetHistoryMsg : IActionHandler() {
msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType),
msgId = msgHash,
msgSeq = msg.msgSeq,
realId = msg.msgSeq,
sender = MessageSender(
msg.senderUin, msg.sendNickName, "unknown", 0, msg.senderUid, msg.senderUid
),
@ -92,6 +93,7 @@ internal object GetHistoryMsg : IActionHandler() {
msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType),
msgId = MessageHelper.generateMsgIdHash(msg.chatType, msg.msgId),
msgSeq = msg.msgSeq,
realId = msg.msgSeq,
sender = MessageSender(
msg.senderUin, msg.sendNickName
.ifEmpty { msg.sendMemberName }

View File

@ -30,6 +30,7 @@ internal object GetMsg: IActionHandler() {
msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType),
msgId = msgHash,
msgSeq = msg.msgSeq,
realId = msg.msgSeq,
sender = MessageSender(
msg.senderUin, msg.sendNickName
.ifEmpty { msg.sendMemberName }

View File

@ -21,6 +21,7 @@ internal data class MessageDetail(
@SerialName("message_type") val msgType: String,
@SerialName("message_id") val msgId: Int,
@SerialName("message_seq") val msgSeq: Long,
@SerialName("real_id") val realId: Long,
@SerialName("sender") val sender: MessageSender,
@SerialName("message") val message: List<Map<String, JsonElement>>,
@SerialName("group_id") val groupId: Long = 0,
@ -48,5 +49,6 @@ internal data class EssenceMessage(
@SerialName("operator_time") val operatorTime: Long,
@SerialName("message_id") var messageId: Int,
@SerialName("message_seq") val messageSeq: Int,
@SerialName("real_id") val realId: Int,
@SerialName("message_content") val messageContent: JsonElement,
)