ryoii 3 лет назад
Родитель
Сommit
6f997ec5b7

+ 15 - 1
docs/adapter/HttpAdapter.md

@@ -48,6 +48,8 @@ adapterSettings:
 
 通用接口为所有 `built-in adapter` 公用的数据规范, 该文档定义了不同 `adapter` 的具体调用方式
 + **[获取插件信息](#获取插件信息)**
+  + [关于](#关于)
+  + [获取登录账号](#获取登录账号)
 + **[缓存操作](#缓存操作)**
   + [通过messageId获取消息](#通过messageId获取消息)
 + **[获取账号信息](#获取账号信息)**
@@ -333,13 +335,25 @@ adapterSettings:
 
 ## 获取插件信息
 
+### 关于
+
 使用此方法获取插件的信息,如版本号
 
 ```
 [GET] /about
 ```
 
-通用接口定义: [获取插件信息](../api/API.md#获取插件信息)
+通用接口定义: [关于](../api/API.md#关于)
+
+### 获取登录账号
+
+使用此方法获取所有当前登录账号
+
+```
+[GET] /getBotList
+```
+
+通用接口定义: [获取登录账号](../api/API.md#获取登录账号)
 
 ## 缓存操作
 

+ 15 - 2
docs/adapter/ReverseWebsocketAdapter.md

@@ -66,6 +66,8 @@ adapterSettings:
 
 通用接口为所有 `built-in adapter` 公用的数据规范, 该文档定义了不同 `adapter` 的具体调用方式
 + **[获取插件信息](#获取插件信息)**
+  + [关于](#关于)
+  + [获取登录账号](#获取登录账号)
 + **[缓存操作](#缓存操作)**
   + [通过messageId获取消息](#通过messageId获取消息)
 + **[获取账号信息](#获取账号信息)**
@@ -198,14 +200,25 @@ adapterSettings:
 
 ## 获取插件信息
 
-使用此方法获取插件的信息,如版本号
+### 关于
 
+使用此方法获取插件的信息,如版本号
 
 ```
 命令字: about
 ```
 
-通用接口定义: [获取插件信息](../api/API.md#获取插件信息)
+通用接口定义: [获取插件信息](../api/API.md#关于)
+
+### 获取登录账号
+
+使用此方法获取所有当前登录账号
+
+```
+命令字: getBotList
+```
+
+通用接口定义: [获取登录账号](../api/API.md#获取登录账号)
 
 ## 缓存操作
 

+ 15 - 2
docs/adapter/WebsocketAdapter.md

@@ -40,6 +40,8 @@ adapterSettings:
 
 通用接口为所有 `built-in adapter` 公用的数据规范, 该文档定义了不同 `adapter` 的具体调用方式
 + **[获取插件信息](#获取插件信息)**
+  + [关于](#关于)
+  + [获取登录账号](#获取登录账号)
 + **[缓存操作](#缓存操作)**
   + [通过messageId获取消息](#通过messageId获取消息)
 + **[获取账号信息](#获取账号信息)**
@@ -154,14 +156,25 @@ adapterSettings:
 
 ## 获取插件信息
 
-使用此方法获取插件的信息,如版本号
+### 关于
 
+使用此方法获取插件的信息,如版本号
 
 ```
 命令字: about
 ```
 
-通用接口定义: [获取插件信息](../api/API.md#获取插件信息)
+通用接口定义: [获取插件信息](../api/API.md#关于)
+
+### 获取登录账号
+
+使用此方法获取所有当前登录账号
+
+```
+命令字: getBotList
+```
+
+通用接口定义: [获取登录账号](../api/API.md#获取登录账号)
 
 ## 缓存操作
 

+ 22 - 0
docs/api/API.md

@@ -14,6 +14,8 @@
 
 + **[状态码](API.md#状态码)**
 + **[获取插件信息](#获取插件信息)**
+  + [关于](#关于)
+  + [获取登录账号](#获取登录账号)
 + **[缓存操作](#缓存操作)**
   + [通过messageId获取消息](#通过messageId获取消息)
 + **[获取账号信息](#获取账号信息)**
@@ -115,6 +117,26 @@
 }
 ```
 
+### 获取登录账号
+
+#### 请求:
+
+无
+
+#### 响应:
+
+```json5
+{
+  "code":0,
+  "msg":"",
+  "data":[
+    123456789,
+    987654321,
+    1145141919
+  ]
+}
+```
+
 ## 缓存操作
 
 ### 通过messageId获取消息

+ 7 - 1
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/adapter/http/router/about.kt

@@ -10,13 +10,14 @@
 package net.mamoe.mirai.api.http.adapter.http.router
 
 import io.ktor.application.*
-import io.ktor.http.*
 import io.ktor.routing.*
 import net.mamoe.mirai.api.http.adapter.internal.action.onAbout
+import net.mamoe.mirai.api.http.adapter.internal.action.onGetBotsList
 import net.mamoe.mirai.api.http.adapter.internal.action.onGetSessionInfo
 import net.mamoe.mirai.api.http.adapter.internal.consts.Paths
 import net.mamoe.mirai.api.http.adapter.internal.dto.ElementResult
 import net.mamoe.mirai.api.http.adapter.internal.dto.EmptyAuthedDTO
+import net.mamoe.mirai.api.http.adapter.internal.dto.LongListRestfulResult
 import net.mamoe.mirai.api.http.adapter.internal.dto.StringMapRestfulResult
 import net.mamoe.mirai.api.http.adapter.internal.serializer.toJsonElement
 
@@ -37,4 +38,9 @@ internal fun Application.aboutRouter() = routing {
         val data = onGetSessionInfo(it)
         call.respondDTO(ElementResult(data = data.toJsonElement()))
     }
+
+    get(Paths.botList) {
+        val data = onGetBotsList()
+        call.respondDTO(LongListRestfulResult(data))
+    }
 }

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

@@ -9,6 +9,7 @@
 
 package net.mamoe.mirai.api.http.adapter.internal.action
 
+import net.mamoe.mirai.Bot
 import net.mamoe.mirai.api.http.HttpApiPluginBase
 import net.mamoe.mirai.api.http.adapter.internal.dto.EmptyAuthedDTO
 import net.mamoe.mirai.api.http.adapter.internal.dto.QQDTO
@@ -32,3 +33,10 @@ internal fun onAbout(): Map<String, String> {
 internal fun onGetSessionInfo(dto: EmptyAuthedDTO): SessionDTO {
     return SessionDTO(dto.session.key, QQDTO(dto.session.bot.asFriend))
 }
+
+/**
+ * 获取所有已登录账号列表
+ */
+internal fun onGetBotsList(): List<Long> {
+    return Bot.instances.map { it.bot.id }
+}

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

@@ -17,6 +17,7 @@ object Paths {
     // about
     const val about = "about"
     const val sessionInfo = "sessionInfo"
+    const val botList = "botList"
 
     // event
     const val newFriend = "resp_newFriendRequestEvent"

+ 5 - 0
mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/adapter/internal/dto/restful.kt

@@ -43,6 +43,11 @@ internal data class StringListRestfulResult(
     val data: List<String>
 ) : RestfulResult()
 
+@Serializable
+internal data class LongListRestfulResult(
+    val data: List<Long>
+) : RestfulResult()
+
 @Serializable
 internal data class StringMapRestfulResult(
     val data: Map<String, String>

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

@@ -16,6 +16,7 @@ import kotlinx.serialization.json.buildJsonObject
 import net.mamoe.mirai.api.http.adapter.common.StateCode
 import net.mamoe.mirai.api.http.adapter.internal.action.*
 import net.mamoe.mirai.api.http.adapter.internal.consts.Paths
+import net.mamoe.mirai.api.http.adapter.internal.dto.*
 import net.mamoe.mirai.api.http.adapter.internal.dto.AuthedDTO
 import net.mamoe.mirai.api.http.adapter.internal.dto.DTO
 import net.mamoe.mirai.api.http.adapter.internal.dto.ElementResult
@@ -42,7 +43,7 @@ internal suspend fun SendChannel<Frame>.handleWsAction(session: Session, content
             // about
             Paths.about -> StringMapRestfulResult(onAbout()).toJsonElement()
             Paths.sessionInfo -> ElementResult(execute(session, element, ::onGetSessionInfo)).toJsonElement()
-
+            Paths.botList -> LongListRestfulResult(onGetBotsList()).toJsonElement()
 
             // event
             Paths.newFriend -> execute(session, element, ::onNewFriendRequestEvent)