2 Commits

Author SHA1 Message Date
ba7058a838 add retryCnt 2024-01-14 16:24:37 +08:00
0858395e60 add retryCnt 2024-01-14 15:49:44 +08:00
7 changed files with 83 additions and 55 deletions

View File

@ -24,31 +24,33 @@ internal object SendForwardMessage : IActionHandler() {
MessageHelper.obtainMessageTypeByDetailType(it)
} ?: run {
if (session.has("user_id")) {
MsgConstant.KCHATTYPEC2C
if (session.has("group_id")) {
MsgConstant.KCHATTYPETEMPC2CFROMGROUP
} else {
MsgConstant.KCHATTYPEC2C
}
} else if (session.has("group_id")) {
MsgConstant.KCHATTYPEGROUP
} else {
return noParam("detail_type/message_type", session.echo)
}
}
val peerId = when (chatType) {
MsgConstant.KCHATTYPEGROUP -> session.getStringOrNull("group_id") ?: return noParam(
"group_id",
session.echo
)
MsgConstant.KCHATTYPEC2C -> session.getStringOrNull("user_id") ?: return noParam(
"user_id",
session.echo
)
val peerId = when(chatType) {
MsgConstant.KCHATTYPEGROUP -> session.getStringOrNull("group_id") ?: return noParam("group_id", session.echo)
MsgConstant.KCHATTYPEC2C, MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> session.getStringOrNull("user_id") ?: return noParam("user_id", session.echo)
else -> error("unknown chat type: $chatType")
}
if (session.isArray("messages")) {
val messages = session.getArray("messages")
invoke(chatType, peerId, messages, echo = session.echo)
val fromId = when(chatType) {
MsgConstant.KCHATTYPEGROUP, MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> session.getStringOrNull("group_id") ?: return noParam("group_id", session.echo)
MsgConstant.KCHATTYPEC2C -> session.getStringOrNull("user_id") ?: return noParam("user_id", session.echo)
else -> error("unknown chat type: $chatType")
}
return if (session.isArray("messages")) {
val messages = session.getArray("messages")
invoke(chatType, peerId, messages, fromId, echo = session.echo)
} else {
logic("未知格式合并转发消息", session.echo)
}
return logic("未知格式合并转发消息", session.echo)
} catch (e: ParamsException) {
return noParam(e.message!!, session.echo)
} catch (e: Throwable) {
@ -60,6 +62,7 @@ internal object SendForwardMessage : IActionHandler() {
chatType: Int,
peerId: String,
messages: JsonArray,
fromId: String = peerId,
echo: JsonElement = EmptyJsonString
): String {
kotlin.runCatching {
@ -148,7 +151,7 @@ internal object SendForwardMessage : IActionHandler() {
}.filterNotNull()
val from = MessageHelper.generateContact(MsgConstant.KCHATTYPEC2C, selfUin)
val to = MessageHelper.generateContact(chatType, peerId)
val to = MessageHelper.generateContact(chatType, peerId, fromId)
val uniseq = MessageHelper.generateMsgId(chatType)
msgService.multiForwardMsg(ArrayList<MultiMsgInfo>().apply {

View File

@ -9,7 +9,7 @@ internal object SendGroupForwardMessage: IActionHandler() {
val groupId = session.getString("group_id")
return if (session.isArray("messages")) {
val messages = session.getArray("messages")
SendForwardMessage(MsgConstant.KCHATTYPEGROUP, groupId, messages, session.echo)
SendForwardMessage(MsgConstant.KCHATTYPEGROUP, groupId, messages, echo = session.echo)
} else {
logic("未知格式合并转发消息", session.echo)
}

View File

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

View File

@ -20,11 +20,15 @@ internal object SendMessage: IActionHandler() {
override suspend fun internalHandle(session: ActionSession): String {
val detailType = session.getStringOrNull("detail_type") ?: session.getStringOrNull("message_type")
try {
var chatType = detailType?.let {
val chatType = detailType?.let {
MessageHelper.obtainMessageTypeByDetailType(it)
} ?: run {
if (session.has("user_id")) {
MsgConstant.KCHATTYPEC2C
if (session.has("group_id")) {
MsgConstant.KCHATTYPETEMPC2CFROMGROUP
} else {
MsgConstant.KCHATTYPEC2C
}
} else if (session.has("group_id")) {
MsgConstant.KCHATTYPEGROUP
} else {
@ -33,27 +37,25 @@ internal object SendMessage: IActionHandler() {
}
val peerId = when(chatType) {
MsgConstant.KCHATTYPEGROUP -> session.getStringOrNull("group_id") ?: return noParam("group_id", session.echo)
MsgConstant.KCHATTYPEC2C, MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> session.getStringOrNull("user_id") ?: return noParam("user_id", session.echo)
else -> error("unknown chat type: $chatType")
}
val fromId = when(chatType) {
MsgConstant.KCHATTYPEGROUP, MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> session.getStringOrNull("group_id") ?: return noParam("group_id", session.echo)
MsgConstant.KCHATTYPEC2C -> session.getStringOrNull("user_id") ?: return noParam("user_id", session.echo)
else -> error("unknown chat type: $chatType")
}
var fromId = peerId
if (chatType == MsgConstant.KCHATTYPEC2C) {
val groupId = session.getStringOrNull("group_id")
if (groupId != null) {
chatType = MsgConstant.KCHATTYPETEMPC2CFROMGROUP
fromId = groupId
}
}
val retryCnt = session.getIntOrNull("retry_cnt")
return if (session.isString("message")) {
val autoEscape = session.getBooleanOrDefault("auto_escape", false)
val message = session.getString("message")
invoke(chatType, peerId, message, autoEscape, echo = session.echo, fromId = fromId)
invoke(chatType, peerId, message, autoEscape, echo = session.echo, fromId = fromId, retryCnt = retryCnt ?: 3)
} else if (session.isArray("message")) {
val message = session.getArray("message")
invoke(chatType, peerId, message, session.echo, fromId = fromId)
invoke(chatType, peerId, message, session.echo, fromId = fromId, retryCnt ?: 3)
} else {
val message = session.getObject("message")
invoke(chatType, peerId, listOf( message ).jsonArray, session.echo, fromId = fromId)
invoke(chatType, peerId, listOf( message ).jsonArray, session.echo, fromId = fromId, retryCnt ?: 3)
}
} catch (e: ParamsException) {
return noParam(e.message!!, session.echo)
@ -69,6 +71,7 @@ internal object SendMessage: IActionHandler() {
message: String,
autoEscape: Boolean,
fromId: String = peerId,
retryCnt: Int,
echo: JsonElement = EmptyJsonString
): String {
//if (!ContactHelper.checkContactAvailable(chatType, peerId)) {
@ -89,7 +92,7 @@ internal object SendMessage: IActionHandler() {
LogCenter.log("CQ码不合法", Level.WARN)
return logic("CQCode is illegal", echo)
} else {
MsgSvc.sendToAio(chatType, peerId, msg, fromId = fromId)
MsgSvc.sendToAio(chatType, peerId, msg, fromId = fromId, retryCnt)
}
}
if (result.isFailure) {
@ -107,12 +110,12 @@ internal object SendMessage: IActionHandler() {
// 消息段格式消息
suspend operator fun invoke(
chatType: Int, peerId: String, message: JsonArray, echo: JsonElement = EmptyJsonString, fromId: String = peerId
chatType: Int, peerId: String, message: JsonArray, echo: JsonElement = EmptyJsonString, fromId: String = peerId, retryCnt: Int
): String {
//if (!ContactHelper.checkContactAvailable(chatType, peerId)) {
// return logic("contact is not found", echo = echo)
//}
val result = MsgSvc.sendToAio(chatType, peerId, message, fromId = fromId)
val result = MsgSvc.sendToAio(chatType, peerId, message, fromId = fromId, retryCnt)
if (result.isFailure) {
return logic(result.exceptionOrNull()?.message ?: "", echo)
}

View File

@ -9,7 +9,7 @@ internal object SendPrivateForwardMessage : IActionHandler() {
val userId = session.getString("user_id")
return if (session.isArray("messages")) {
val messages = session.getArray("messages")
SendForwardMessage(MsgConstant.KCHATTYPEC2C, userId, messages, session.echo)
SendForwardMessage(MsgConstant.KCHATTYPEC2C, userId, messages, echo = session.echo)
} else {
logic("未知格式合并转发消息", session.echo)
}

View File

@ -10,6 +10,7 @@ internal object SendPrivateMessage: IActionHandler() {
val userId = session.getString("user_id")
val groupId = session.getStringOrNull("group_id")
val chatType = if (groupId == null) MsgConstant.KCHATTYPEC2C else MsgConstant.KCHATTYPETEMPC2CFROMGROUP
val retryCnt = session.getIntOrNull("retry_cnt")
return if (session.isString("message")) {
val autoEscape = session.getBooleanOrDefault("auto_escape", false)
val message = session.getString("message")
@ -19,7 +20,8 @@ internal object SendPrivateMessage: IActionHandler() {
message = message,
autoEscape = autoEscape,
echo = session.echo,
fromId = groupId ?: userId
fromId = groupId ?: userId,
retryCnt = retryCnt ?: 3
)
} else if (session.isArray("message")) {
val message = session.getArray("message")
@ -28,7 +30,8 @@ internal object SendPrivateMessage: IActionHandler() {
peerId = userId,
message = message,
echo = session.echo,
fromId = groupId ?: userId
fromId = groupId ?: userId,
retryCnt = retryCnt ?: 3
)
} else {
val message = session.getObject("message")
@ -37,7 +40,8 @@ internal object SendPrivateMessage: IActionHandler() {
peerId = userId,
message = listOf( message ).jsonArray,
echo = session.echo,
fromId = groupId ?: userId
fromId = groupId ?: userId,
retryCnt = retryCnt ?: 3
)
}
}

View File

@ -113,6 +113,7 @@ fun Routing.messageAction() {
get {
val msgType = fetchGetOrThrow("message_type")
val message = fetchGetOrThrow("message")
val retryCnt = fetchGetOrNull("retry_cnt")?.toInt() ?: 3
val autoEscape = fetchGetOrNull("auto_escape")?.toBooleanStrict() ?: false
val chatType = MessageHelper.obtainMessageTypeByDetailType(msgType)
@ -124,12 +125,14 @@ fun Routing.messageAction() {
peerId = if (chatType == MsgConstant.KCHATTYPEC2C) userId!! else groupId!!,
message = message,
autoEscape = autoEscape,
fromId = groupId ?: userId ?: ""
fromId = groupId ?: userId ?: "",
retryCnt = retryCnt
), ContentType.Application.Json)
}
post {
val msgType = fetchPostOrThrow("message_type")
val chatType = MessageHelper.obtainMessageTypeByDetailType(msgType)
val retryCnt = fetchPostOrNull("retry_cnt")?.toInt() ?: 3
val userId = fetchPostOrNull("user_id")
val groupId = fetchPostOrNull("group_id")
@ -141,14 +144,16 @@ fun Routing.messageAction() {
chatType = chatType,
peerId = peerId,
message = listOf(fetchPostJsonObject("message")).jsonArray,
fromId = groupId ?: userId ?: ""
fromId = groupId ?: userId ?: "",
retryCnt = retryCnt
)
} else {
SendMessage(
chatType = chatType,
peerId = peerId,
message = fetchPostJsonArray("message"),
fromId = groupId ?: userId ?: ""
fromId = groupId ?: userId ?: "",
retryCnt = retryCnt
)
}
} else {
@ -159,7 +164,8 @@ fun Routing.messageAction() {
peerId = peerId,
message = fetchPostOrThrow("message"),
autoEscape = autoEscape,
fromId = groupId ?: userId ?: ""
fromId = groupId ?: userId ?: "",
retryCnt = retryCnt
)
}, ContentType.Application.Json)
}
@ -169,34 +175,38 @@ fun Routing.messageAction() {
get {
val groupId = fetchGetOrThrow("group_id")
val message = fetchGetOrThrow("message")
val retryCnt = fetchGetOrNull("retry_cnt")?.toInt() ?: 3
val autoEscape = fetchGetOrNull("auto_escape")?.toBooleanStrict() ?: false
call.respondText(SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, message, autoEscape))
call.respondText(SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, message, autoEscape, retryCnt = retryCnt))
}
post {
val groupId = fetchPostOrThrow("group_id")
val retryCnt = fetchPostOrNull("retry_cnt")?.toInt() ?: 3
val autoEscape = fetchPostOrNull("auto_escape")?.toBooleanStrict() ?: false
val result = if (isJsonData()) {
if (isJsonString("message")) {
SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, fetchPostJsonString("message"), autoEscape)
SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, fetchPostJsonString("message"), autoEscape, retryCnt = retryCnt)
} else {
if (isJsonObject("message")) {
SendMessage(
chatType = MsgConstant.KCHATTYPEGROUP,
peerId = groupId,
message = listOf(fetchPostJsonObject("message")).jsonArray
message = listOf(fetchPostJsonObject("message")).jsonArray,
retryCnt = retryCnt
)
} else {
SendMessage(
chatType = MsgConstant.KCHATTYPEGROUP,
peerId = groupId,
message = fetchPostJsonArray("message")
message = fetchPostJsonArray("message"),
retryCnt = retryCnt
)
}
}
} else {
SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, fetchPostOrThrow("message"), autoEscape)
SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, fetchPostOrThrow("message"), autoEscape, retryCnt = retryCnt)
}
call.respondText(result, ContentType.Application.Json)
@ -208,18 +218,21 @@ fun Routing.messageAction() {
val userId = fetchGetOrThrow("user_id")
val groupId = fetchGetOrNull("group_id")
val message = fetchGetOrThrow("message")
val retryCnt = fetchGetOrNull("retry_cnt")?.toInt() ?: 3
val autoEscape = fetchGetOrNull("auto_escape")?.toBooleanStrict() ?: false
call.respondText(SendMessage(
chatType = if (groupId == null) MsgConstant.KCHATTYPEC2C else MsgConstant.KCHATTYPETEMPC2CFROMGROUP,
peerId = userId,
message = message,
autoEscape = autoEscape,
fromId = groupId ?: userId
fromId = groupId ?: userId,
retryCnt = retryCnt
), ContentType.Application.Json)
}
post {
val userId = fetchPostOrThrow("user_id")
val groupId = fetchPostOrNull("group_id")
val retryCnt = fetchPostOrNull("retry_cnt")?.toInt() ?: 3
val autoEscape = fetchPostOrNull("auto_escape")?.toBooleanStrict() ?: false
val chatType = if (groupId == null) MsgConstant.KCHATTYPEC2C else MsgConstant.KCHATTYPETEMPC2CFROMGROUP
@ -233,7 +246,8 @@ fun Routing.messageAction() {
peerId = userId,
message = fetchPostJsonString("message"),
autoEscape = autoEscape,
fromId = fromId
fromId = fromId,
retryCnt = retryCnt
)
} else {
if (isJsonObject("message")) {
@ -241,14 +255,16 @@ fun Routing.messageAction() {
chatType = chatType,
peerId = userId,
message = listOf(fetchPostJsonObject("message")).jsonArray,
fromId = fromId
fromId = fromId,
retryCnt = retryCnt
)
} else {
SendMessage(
chatType = chatType,
peerId = userId,
message = fetchPostJsonArray("message"),
fromId = fromId
fromId = fromId,
retryCnt = retryCnt
)
}
}
@ -258,7 +274,8 @@ fun Routing.messageAction() {
peerId = userId,
message = fetchPostOrThrow("message"),
autoEscape = autoEscape,
fromId = fromId
fromId = fromId,
retryCnt = retryCnt
)
}