Parcourir la source

RoamingMessage supported (#338)

ryoii il y a 3 ans
Parent
commit
b61b3d0e57

+ 11 - 0
docs/adapter/HttpAdapter.md

@@ -69,6 +69,7 @@ adapterSettings:
   + [发送临时会话消息](#发送临时会话消息)
   + [发送头像戳一戳消息](#发送头像戳一戳消息)
   + [撤回消息](#撤回消息)
+  + [获取漫游消息](#获取漫游消息)
 + **[文件操作](#文件操作)**
   + [查看文件列表](#查看文件列表)
   + [获取文件信息](#获取文件信息)
@@ -512,6 +513,16 @@ adapterSettings:
 
 通用接口定义: [撤回消息](../api/API.md#撤回消息)
 
+### 获取漫游消息
+
+```
+[POST] /roamingMessages
+```
+
+**本接口为[POST]请求, 参数格式为`application/json`**
+
+通用接口定义: [获取漫游消息](../api/API.md#获取漫游消息)
+
 ## 文件操作
 
 ### 查看文件列表

+ 9 - 0
docs/adapter/ReverseWebsocketAdapter.md

@@ -84,6 +84,7 @@ adapterSettings:
   + [发送临时会话消息](#发送临时会话消息)
   + [发送头像戳一戳消息](#发送头像戳一戳消息)
   + [撤回消息](#撤回消息)
+  + [获取漫游消息](#获取漫游消息)
 + **[账号管理](#账号管理)**
   + [删除好友](#删除好友)
 + **[群管理](#群管理)**
@@ -348,6 +349,14 @@ adapterSettings:
 
 通用接口定义: [撤回消息](../api/API.md#撤回消息)
 
+### 获取漫游消息
+
+```
+命令字: roamingMessages
+```
+
+通用接口定义: [获取漫游消息](../api/API.md#获取漫游消息)
+
 ## 多媒体内容上传
 
 ### 图片文件上传

+ 9 - 0
docs/adapter/WebsocketAdapter.md

@@ -58,6 +58,7 @@ adapterSettings:
   + [发送临时会话消息](#发送临时会话消息)
   + [发送头像戳一戳消息](#发送头像戳一戳消息)
   + [撤回消息](#撤回消息)
+  + [获取漫游消息](#获取漫游消息)
 + **[文件操作](#文件操作)**
   + [查看文件列表](#查看文件列表)
   + [获取文件信息](#获取文件信息)
@@ -304,6 +305,14 @@ adapterSettings:
 
 通用接口定义: [撤回消息](../api/API.md#撤回消息)
 
+### 获取漫游消息
+
+```
+命令字: roamingMessages
+```
+
+通用接口定义: [获取漫游消息](../api/API.md#获取漫游消息)
+
 ## 文件操作
 
 ### 查看文件列表

+ 30 - 0
docs/api/API.md

@@ -32,6 +32,7 @@
   + [发送临时会话消息](#发送临时会话消息)
   + [发送头像戳一戳消息](#发送头像戳一戳消息)
   + [撤回消息](#撤回消息)
+  + [获取漫游消息](#获取漫游消息)
 + **[文件操作](#文件操作)**
   + [查看文件列表](#查看文件列表)
   + [获取文件信息](#获取文件信息)
@@ -531,6 +532,35 @@
 }
 ```
 
+### 获取漫游消息
+
+#### 请求
+```json5
+{
+  "timeStart": 0,
+  "timeEnd": 0,
+  "target": 123456789,
+}
+```
+
+| 名字           | 类型   | 可选  | 举例  | 说明                                                                                               |
+|--------------|------| ----- |-----|--------------------------------------------------------------------------------------------------|
+| timeStart    | Int  | false  | 0   | 起始时间, UTC+8 时间戳, 单位为秒. 可以为 0, 即表示从可以获取的最早的消息起. 负数将会被看是 0.                                        |
+| timeEnd      | Int  | false | 0   | 结束时间, UTC+8 时间戳, 单位为秒. 可以为 Long.MAX_VALUE, 即表示到可以获取的最晚的消息为止. 低于 timeStart 的值将会被看作是 timeStart 的值. |
+| target       | Long | false | 0   | 漫游消息对象,好友id,目前仅支持好友漫游消息                                                                          |
+
+#### 响应:
+
+```json5
+{
+  "code":0,
+  "msg":"success",
+  "data":[]
+}
+```
+
+> data 为 #[消息链](MessageType.md#消息链类型) 数组
+
 ## 文件操作
 
 目前仅支持群文件的操作, 所有好友文件的字段为保留字段

+ 5 - 0
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/adapter/http/router/message.kt

@@ -127,4 +127,9 @@ internal fun Application.messageRouter() = routing {
      * 发送 戳一戳
      */
     httpAuthedPost(Paths.sendNudge, respondStateCodeStrategy(::onNudge))
+
+    /**
+     * 漫游消息
+     */
+    httpAuthedPost(Paths.roamingMessages, respondDTOStrategy(::onRoamingMessages))
 }

+ 12 - 0
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/adapter/internal/action/message.kt

@@ -9,6 +9,8 @@
 
 package net.mamoe.mirai.api.http.adapter.internal.action
 
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.toList
 import net.mamoe.mirai.api.http.adapter.common.IllegalParamException
 import net.mamoe.mirai.api.http.adapter.common.StateCode
 import net.mamoe.mirai.api.http.adapter.internal.convertor.toDTO
@@ -243,3 +245,13 @@ internal suspend fun onNudge(nudgeDTO: NudgeDTO): StateCode {
     }
     return StateCode.Success
 }
+
+internal suspend fun onRoamingMessages(dto: RoamingMessageDTO): EventListRestfulResult {
+    val friend = dto.session.bot.getFriendOrFail(dto.target)
+    val messagesIn = friend.roamingMessages.getMessagesIn(dto.timeStart, dto.timeEnd)
+    val packets = messagesIn.map { chain ->
+        FriendMessagePacketDTO(QQDTO(friend)).also { it.messageChain = chain.toDTO { d -> d != UnknownMessageDTO }  }
+    }
+
+    return EventListRestfulResult(packets.toList())
+}

+ 1 - 0
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/adapter/internal/consts/paths.kt

@@ -59,6 +59,7 @@ object Paths {
     const val uploadImage = "uploadImage"
     const val uploadVoice = "uploadVoice"
     const val recall = "recall"
+    const val roamingMessages = "roamingMessages"
 
     // file
     const val fileList = "file_list"

+ 7 - 0
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/adapter/internal/dto/parameter/message.kt

@@ -56,4 +56,11 @@ internal class UploadVoiceRetDTO(
 internal data class MessageIdDTO(
     val target: Long,
     val messageId: Int,
+) : AuthedDTO()
+
+@Serializable
+internal data class RoamingMessageDTO(
+    val timeStart: Long,
+    val timeEnd: Long,
+    val target: Long,
 ) : AuthedDTO()

+ 1 - 0
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/adapter/ws/router/action.kt

@@ -103,6 +103,7 @@ internal suspend fun SendChannel<Frame>.handleWsAction(session: Session, content
             Paths.uploadVoice -> StateCode.NoOperateSupport.toJsonElement()
             Paths.recall -> execute(session, element, ::onRecall)
             Paths.sendNudge -> execute(session, element, ::onNudge)
+            Paths.roamingMessages -> execute(session, element, ::onRoamingMessages)
 
 
             // file