This commit is contained in:
whitechi73 2024-01-18 09:49:56 +08:00
parent b9cfe73eae
commit 160d1a11ac
4 changed files with 30 additions and 14 deletions

View File

@ -31,10 +31,6 @@ import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine import kotlin.coroutines.suspendCoroutine
internal object MsgSvc: BaseSvc() { internal object MsgSvc: BaseSvc() {
fun uploadForwardMsg(): Result<String> {
return Result.failure(Exception("Not implemented"))
}
suspend fun prepareTempChatFromGroup( suspend fun prepareTempChatFromGroup(
groupId: String, groupId: String,
peerId: String peerId: String

View File

@ -9,16 +9,17 @@ internal object SendGroupMessage: IActionHandler() {
override suspend fun internalHandle(session: ActionSession): String { override suspend fun internalHandle(session: ActionSession): String {
val groupId = session.getString("group_id") val groupId = session.getString("group_id")
val retryCnt = session.getIntOrNull("retry_cnt") val retryCnt = session.getIntOrNull("retry_cnt")
val recallDuration = session.getLongOrNull("recall_duration")
return if (session.isString("message")) { return if (session.isString("message")) {
val autoEscape = session.getBooleanOrDefault("auto_escape", false) val autoEscape = session.getBooleanOrDefault("auto_escape", false)
val message = session.getString("message") val message = session.getString("message")
SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, message, autoEscape, echo = session.echo, retryCnt = retryCnt ?: 3) SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, message, autoEscape, echo = session.echo, retryCnt = retryCnt ?: 3, recallDuration = recallDuration)
} else if (session.isObject("message")) { } else if (session.isObject("message")) {
val message = session.getObject("message") val message = session.getObject("message")
SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, listOf( message ).jsonArray, session.echo, retryCnt = retryCnt ?: 3) SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, listOf( message ).jsonArray, session.echo, retryCnt = retryCnt ?: 3, recallDuration = recallDuration)
} else { } else {
val message = session.getArray("message") val message = session.getArray("message")
SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, message, session.echo, retryCnt = retryCnt ?: 3) SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, message, session.echo, retryCnt = retryCnt ?: 3, recallDuration = recallDuration)
} }
} }

View File

@ -1,6 +1,10 @@
package moe.fuqiuluo.shamrock.remote.action.handlers package moe.fuqiuluo.shamrock.remote.action.handlers
import com.tencent.qqnt.kernel.nativeinterface.MsgConstant import com.tencent.qqnt.kernel.nativeinterface.MsgConstant
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import moe.fuqiuluo.shamrock.remote.action.ActionSession import moe.fuqiuluo.shamrock.remote.action.ActionSession
import moe.fuqiuluo.shamrock.remote.action.IActionHandler import moe.fuqiuluo.shamrock.remote.action.IActionHandler
import moe.fuqiuluo.shamrock.helper.MessageHelper import moe.fuqiuluo.shamrock.helper.MessageHelper
@ -46,16 +50,17 @@ internal object SendMessage: IActionHandler() {
else -> error("unknown chat type: $chatType") else -> error("unknown chat type: $chatType")
} }
val retryCnt = session.getIntOrNull("retry_cnt") val retryCnt = session.getIntOrNull("retry_cnt")
val recallDuration = session.getLongOrNull("recall_duration")
return if (session.isString("message")) { return if (session.isString("message")) {
val autoEscape = session.getBooleanOrDefault("auto_escape", false) val autoEscape = session.getBooleanOrDefault("auto_escape", false)
val message = session.getString("message") val message = session.getString("message")
invoke(chatType, peerId, message, autoEscape, echo = session.echo, fromId = fromId, retryCnt = retryCnt ?: 3) invoke(chatType, peerId, message, autoEscape, echo = session.echo, fromId = fromId, retryCnt = retryCnt ?: 3, recallDuration = recallDuration)
} else if (session.isArray("message")) { } else if (session.isArray("message")) {
val message = session.getArray("message") val message = session.getArray("message")
invoke(chatType, peerId, message, session.echo, fromId = fromId, retryCnt ?: 3) invoke(chatType, peerId, message, session.echo, fromId = fromId, retryCnt ?: 3, recallDuration = recallDuration)
} else { } else {
val message = session.getObject("message") val message = session.getObject("message")
invoke(chatType, peerId, listOf( message ).jsonArray, session.echo, fromId = fromId, retryCnt ?: 3) invoke(chatType, peerId, listOf( message ).jsonArray, session.echo, fromId = fromId, retryCnt ?: 3, recallDuration = recallDuration)
} }
} catch (e: ParamsException) { } catch (e: ParamsException) {
return noParam(e.message!!, session.echo) return noParam(e.message!!, session.echo)
@ -72,6 +77,7 @@ internal object SendMessage: IActionHandler() {
autoEscape: Boolean, autoEscape: Boolean,
fromId: String = peerId, fromId: String = peerId,
retryCnt: Int, retryCnt: Int,
recallDuration: Long?,
echo: JsonElement = EmptyJsonString echo: JsonElement = EmptyJsonString
): String { ): String {
//if (!ContactHelper.checkContactAvailable(chatType, peerId)) { //if (!ContactHelper.checkContactAvailable(chatType, peerId)) {
@ -102,6 +108,7 @@ internal object SendMessage: IActionHandler() {
if (pair.first <= 0) { if (pair.first <= 0) {
return logic("send message failed", echo = echo) return logic("send message failed", echo = echo)
} }
recallDuration?.let { autoRecall(pair.second, it) }
return ok(MessageResult( return ok(MessageResult(
msgId = pair.second, msgId = pair.second,
time = (pair.first * 0.001).toLong() time = (pair.first * 0.001).toLong()
@ -110,7 +117,7 @@ internal object SendMessage: IActionHandler() {
// 消息段格式消息 // 消息段格式消息
suspend operator fun invoke( suspend operator fun invoke(
chatType: Int, peerId: String, message: JsonArray, echo: JsonElement = EmptyJsonString, fromId: String = peerId, retryCnt: Int chatType: Int, peerId: String, message: JsonArray, echo: JsonElement = EmptyJsonString, fromId: String = peerId, retryCnt: Int, recallDuration: Long?,
): String { ): String {
//if (!ContactHelper.checkContactAvailable(chatType, peerId)) { //if (!ContactHelper.checkContactAvailable(chatType, peerId)) {
// return logic("contact is not found", echo = echo) // return logic("contact is not found", echo = echo)
@ -123,12 +130,20 @@ internal object SendMessage: IActionHandler() {
if (pair.first <= 0) { if (pair.first <= 0) {
return logic("send message failed", echo = echo) return logic("send message failed", echo = echo)
} }
recallDuration?.let { autoRecall(pair.second, it) }
return ok(MessageResult( return ok(MessageResult(
msgId = pair.second, msgId = pair.second,
time = (pair.first * 0.001).toLong() time = (pair.first * 0.001).toLong()
), echo) ), echo)
} }
private fun autoRecall(msgHash: Int, duration: Long) {
GlobalScope.launch(Dispatchers.Default) {
delay(duration)
MsgSvc.recallMsg(msgHash)
}
}
override val requiredParams: Array<String> = arrayOf("message") override val requiredParams: Array<String> = arrayOf("message")
override fun path(): String = "send_message" override fun path(): String = "send_message"

View File

@ -11,6 +11,7 @@ internal object SendPrivateMessage: IActionHandler() {
val groupId = session.getStringOrNull("group_id") val groupId = session.getStringOrNull("group_id")
val chatType = if (groupId == null) MsgConstant.KCHATTYPEC2C else MsgConstant.KCHATTYPETEMPC2CFROMGROUP val chatType = if (groupId == null) MsgConstant.KCHATTYPEC2C else MsgConstant.KCHATTYPETEMPC2CFROMGROUP
val retryCnt = session.getIntOrNull("retry_cnt") val retryCnt = session.getIntOrNull("retry_cnt")
val recallDuration = session.getLongOrNull("recall_duration")
return if (session.isString("message")) { return if (session.isString("message")) {
val autoEscape = session.getBooleanOrDefault("auto_escape", false) val autoEscape = session.getBooleanOrDefault("auto_escape", false)
val message = session.getString("message") val message = session.getString("message")
@ -21,7 +22,8 @@ internal object SendPrivateMessage: IActionHandler() {
autoEscape = autoEscape, autoEscape = autoEscape,
echo = session.echo, echo = session.echo,
fromId = groupId ?: userId, fromId = groupId ?: userId,
retryCnt = retryCnt ?: 3 retryCnt = retryCnt ?: 3,
recallDuration = recallDuration
) )
} else if (session.isArray("message")) { } else if (session.isArray("message")) {
val message = session.getArray("message") val message = session.getArray("message")
@ -31,7 +33,8 @@ internal object SendPrivateMessage: IActionHandler() {
message = message, message = message,
echo = session.echo, echo = session.echo,
fromId = groupId ?: userId, fromId = groupId ?: userId,
retryCnt = retryCnt ?: 3 retryCnt = retryCnt ?: 3,
recallDuration = recallDuration
) )
} else { } else {
val message = session.getObject("message") val message = session.getObject("message")
@ -41,7 +44,8 @@ internal object SendPrivateMessage: IActionHandler() {
message = listOf( message ).jsonArray, message = listOf( message ).jsonArray,
echo = session.echo, echo = session.echo,
fromId = groupId ?: userId, fromId = groupId ?: userId,
retryCnt = retryCnt ?: 3 retryCnt = retryCnt ?: 3,
recallDuration = recallDuration
) )
} }
} }