This commit is contained in:
ikechan8370 2023-11-13 22:45:15 +08:00
commit 2f264ee9e4
5 changed files with 47 additions and 23 deletions

View File

@ -110,8 +110,8 @@ fun LabFragment() {
}
Function(
title = "拦截QQ无用",
desc = "测试阶段,可能导致网络异常",
title = "拦截QQ无用",
desc = "测试阶段,可能导致网络异常或掉线",
descColor = it,
isSwitch = ShamrockConfig.isInjectPacket(ctx)
) {

View File

@ -5,6 +5,7 @@ import com.tencent.qqnt.kernel.nativeinterface.MsgRecord
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonElement
import moe.fuqiuluo.qqinterface.servlet.MsgSvc
import moe.fuqiuluo.qqinterface.servlet.msg.convert.MessageConvert
import moe.fuqiuluo.shamrock.helper.MessageHelper
import moe.fuqiuluo.shamrock.helper.db.MessageDB
@ -53,23 +54,46 @@ internal object GetHistoryMsg: IActionHandler() {
return logic(result.msg ?: "获取历史消息失败", echo = echo)
}
val msgList = result.data!!.map { msg ->
val msgHash = MessageHelper.generateMsgIdHash(msg.chatType, msg.msgId)
MessageDetail(
time = msg.msgTime.toInt(),
msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType),
msgId = msgHash,
realId = msg.msgSeq.toInt(),
sender = MessageSender(
msg.senderUin, msg.sendNickName, "unknown", 0, msg.senderUid
),
message = MessageConvert.convertMessageRecordToMsgSegment(msg).map {
it.toJson()
},
peerId = msg.peerUin,
groupId = if (msg.chatType == MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0,
targetId = if (msg.chatType != MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0
)
val msgList = ArrayList<MessageDetail>().apply {
addAll(result.data!!.map { msg ->
val msgHash = MessageHelper.generateMsgIdHash(msg.chatType, msg.msgId)
MessageDetail(
time = msg.msgTime.toInt(),
msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType),
msgId = msgHash,
realId = msg.msgSeq.toInt(),
sender = MessageSender(
msg.senderUin, msg.sendNickName, "unknown", 0, msg.senderUid
),
message = MessageConvert.convertMessageRecordToMsgSegment(msg).map {
it.toJson()
},
peerId = msg.peerUin,
groupId = if (msg.chatType == MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0,
targetId = if (msg.chatType != MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0
)
})
if (startMsgId != 0L) {
val msg = MsgSvc.getMsgByQMsgId(chatType, peerId, startMsgId).onFailure {
return logic("Obtain msg failed, please check your msg_id.", echo)
}.getOrThrow()
val seq = msg.clientSeq.toInt()
add(MessageDetail(
time = msg.msgTime.toInt(),
msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType),
msgId = MessageHelper.generateMsgIdHash(msg.chatType, msg.msgId),
realId = seq,
sender = MessageSender(
msg.senderUin, msg.sendNickName, "unknown", 0, msg.senderUid
),
message = MessageConvert.convertMessageRecordToMsgSegment(msg).map {
it.toJson()
},
peerId = msg.peerUin,
groupId = if (msg.chatType == MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0,
targetId = if (msg.chatType != MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0
))
}
}
return ok(data = GetHistoryMsgResult(msgList), echo = echo)

View File

@ -15,8 +15,8 @@ internal object SetGroupUnique: IActionHandler() {
}
suspend operator fun invoke(groupId: String, userId: String, unique: String, echo: JsonElement = EmptyJsonString): String {
if (!GroupSvc.isAdmin(groupId)) {
return error("you are not admin", echo)
if (!GroupSvc.isOwner(groupId)) {
return error("you are not owner", echo)
}
GroupSvc.setGroupUniqueTitle(groupId, userId, unique)
return ok("成功", echo)

View File

@ -36,7 +36,7 @@ import java.util.concurrent.TimeUnit
fun Routing.otherAction() {
if (ShamrockConfig.allowShell()) {
getOrPost("/shell") {
post("/shell") {
val runtime = Runtime.getRuntime()
val dir = fetchOrThrow("dir")
val out = StringBuilder()

View File

@ -113,7 +113,7 @@ internal class HookWrapperCodec: IAction {
from.putWupBuffer(merge.toByteArray())
} else if (from.appId != MAGIC_APP_ID) {
if (from.serviceCmd in IgnoredCmd && ShamrockConfig.isInjectPacket()) {
from.serviceCmd = "ShamrockInjectedCmd"
from.serviceCmd = "ShamrockInjectedCmd_${from.serviceCmd}"
from.putWupBuffer(EMPTY_BYTE_ARRAY)
} else {
pushOnReceive(from)