mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-10 02:20:14 +08:00
Http api support recall
This commit is contained in:
parent
0d7af4a111
commit
f4020e4a03
@ -297,6 +297,39 @@ Content-Type:multipart/form-data
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 撤回消息
|
||||||
|
|
||||||
|
```
|
||||||
|
[POST] /recall
|
||||||
|
```
|
||||||
|
|
||||||
|
使用此方法撤回指定消息。对于bot发送的消息,又2分钟时间限制。对于撤回群聊中群员的消息,需要有相应权限
|
||||||
|
|
||||||
|
#### 请求
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"sessionKey": "YourSession",
|
||||||
|
"target": 987654321
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
| 名字 | 类型 | 可选 | 举例 | 说明 |
|
||||||
|
| ------------ | ------ | ----- | ----------- | -------------------------------- |
|
||||||
|
| sessionKey | String | false | YourSession | 已经激活的Session |
|
||||||
|
| target | Long | false | 987654321 | 需要撤回的消息的messageId |
|
||||||
|
|
||||||
|
#### 响应: 返回统一状态码
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
"code": 0,
|
||||||
|
"msg": "success"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 获取Bot收到的消息和事件
|
### 获取Bot收到的消息和事件
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -13,7 +13,6 @@ import net.mamoe.mirai.api.http.data.common.EventDTO
|
|||||||
import net.mamoe.mirai.api.http.data.common.IgnoreEventDTO
|
import net.mamoe.mirai.api.http.data.common.IgnoreEventDTO
|
||||||
import net.mamoe.mirai.api.http.data.common.toDTO
|
import net.mamoe.mirai.api.http.data.common.toDTO
|
||||||
import net.mamoe.mirai.event.events.BotEvent
|
import net.mamoe.mirai.event.events.BotEvent
|
||||||
import net.mamoe.mirai.message.GroupMessage
|
|
||||||
import net.mamoe.mirai.message.MessagePacket
|
import net.mamoe.mirai.message.MessagePacket
|
||||||
import net.mamoe.mirai.message.data.MessageSource
|
import net.mamoe.mirai.message.data.MessageSource
|
||||||
import net.mamoe.mirai.utils.firstKey
|
import net.mamoe.mirai.utils.firstKey
|
||||||
@ -21,8 +20,8 @@ import java.util.concurrent.ConcurrentLinkedDeque
|
|||||||
|
|
||||||
class MessageQueue : ConcurrentLinkedDeque<BotEvent>() {
|
class MessageQueue : ConcurrentLinkedDeque<BotEvent>() {
|
||||||
|
|
||||||
val quoteCacheSize = 4096
|
val cacheSize = 4096
|
||||||
val quoteCache = LinkedHashMap<Long, MessagePacket<*, *>>()
|
val cache = LinkedHashMap<Long, MessagePacket<*, *>>()
|
||||||
|
|
||||||
suspend fun fetch(size: Int): List<EventDTO> {
|
suspend fun fetch(size: Int): List<EventDTO> {
|
||||||
var count = size
|
var count = size
|
||||||
@ -45,13 +44,13 @@ class MessageQueue : ConcurrentLinkedDeque<BotEvent>() {
|
|||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
fun cacheQuote(messageId: Long) =
|
fun cache(messageId: Long) =
|
||||||
quoteCache[messageId] ?: throw NoSuchElementException()
|
cache[messageId] ?: throw NoSuchElementException()
|
||||||
|
|
||||||
private fun addQuoteCache(msg: MessagePacket<*, *>) {
|
fun addQuoteCache(msg: MessagePacket<*, *>) {
|
||||||
quoteCache[msg.message[MessageSource].id] = msg
|
cache[msg.message[MessageSource].id] = msg
|
||||||
if (quoteCache.size > quoteCacheSize) {
|
if (cache.size > cacheSize) {
|
||||||
quoteCache.remove(quoteCache.firstKey())
|
cache.remove(cache.firstKey())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -29,6 +29,8 @@ import net.mamoe.mirai.api.http.data.common.VerifyDTO
|
|||||||
import net.mamoe.mirai.api.http.data.common.toMessageChain
|
import net.mamoe.mirai.api.http.data.common.toMessageChain
|
||||||
import net.mamoe.mirai.api.http.util.toJson
|
import net.mamoe.mirai.api.http.util.toJson
|
||||||
import net.mamoe.mirai.contact.Contact
|
import net.mamoe.mirai.contact.Contact
|
||||||
|
import net.mamoe.mirai.message.FriendMessage
|
||||||
|
import net.mamoe.mirai.message.GroupMessage
|
||||||
import net.mamoe.mirai.message.MessageReceipt
|
import net.mamoe.mirai.message.MessageReceipt
|
||||||
import net.mamoe.mirai.message.data.*
|
import net.mamoe.mirai.message.data.*
|
||||||
import net.mamoe.mirai.message.uploadImage
|
import net.mamoe.mirai.message.uploadImage
|
||||||
@ -59,26 +61,30 @@ fun Application.messageModule() {
|
|||||||
|
|
||||||
miraiVerify<SendDTO>("/sendFriendMessage") {
|
miraiVerify<SendDTO>("/sendFriendMessage") {
|
||||||
val quote = it.quote?.let { q ->
|
val quote = it.quote?.let { q ->
|
||||||
it.session.messageQueue.cacheQuote(q).run {
|
it.session.messageQueue.cache(q).run {
|
||||||
this[MessageSource].quote(sender)
|
this[MessageSource].quote(sender)
|
||||||
}}
|
}}
|
||||||
|
|
||||||
it.session.bot.getFriend(it.target).apply {
|
it.session.bot.getFriend(it.target).apply {
|
||||||
val receipt = sendMessage(quote, it.messageChain.toMessageChain(this), this)
|
val receipt = sendMessage(quote, it.messageChain.toMessageChain(this), this)
|
||||||
receipt.source.ensureSequenceIdAvailable()
|
receipt.source.ensureSequenceIdAvailable()
|
||||||
|
|
||||||
|
it.session.messageQueue.addQuoteCache(FriendMessage(bot.selfQQ, receipt.source.toChain()))
|
||||||
call.respondDTO(SendRetDTO(messageId = receipt.source.id))
|
call.respondDTO(SendRetDTO(messageId = receipt.source.id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
miraiVerify<SendDTO>("/sendGroupMessage") {
|
miraiVerify<SendDTO>("/sendGroupMessage") {
|
||||||
val quote = it.quote?.let { q ->
|
val quote = it.quote?.let { q ->
|
||||||
it.session.messageQueue.cacheQuote(q).run {
|
it.session.messageQueue.cache(q).run {
|
||||||
this[MessageSource].quote(sender)
|
this[MessageSource].quote(sender)
|
||||||
}}
|
}}
|
||||||
|
|
||||||
it.session.bot.getGroup(it.target).apply {
|
it.session.bot.getGroup(it.target).apply {
|
||||||
val receipt = sendMessage(quote, it.messageChain.toMessageChain(this), this)
|
val receipt = sendMessage(quote, it.messageChain.toMessageChain(this), this)
|
||||||
receipt.source.ensureSequenceIdAvailable()
|
receipt.source.ensureSequenceIdAvailable()
|
||||||
|
|
||||||
|
it.session.messageQueue.addQuoteCache(GroupMessage("", botPermission, botAsMember, receipt.source.toChain()))
|
||||||
call.respondDTO(SendRetDTO(messageId = receipt.source.id))
|
call.respondDTO(SendRetDTO(messageId = receipt.source.id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -123,8 +129,10 @@ fun Application.messageModule() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
miraiVerify<RecallDTO>("recall") {
|
miraiVerify<RecallDTO>("recall") {
|
||||||
// TODO
|
it.session.messageQueue.cache(it.target).apply {
|
||||||
call.respond(HttpStatusCode.NotFound, "未完成")
|
it.session.bot.recall(get(MessageSource))
|
||||||
|
}
|
||||||
|
call.respondStateCode(StateCode.Success)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -156,6 +164,5 @@ private class SendRetDTO(
|
|||||||
@Serializable
|
@Serializable
|
||||||
private data class RecallDTO(
|
private data class RecallDTO(
|
||||||
override val sessionKey: String,
|
override val sessionKey: String,
|
||||||
val target: Long,
|
val target: Long
|
||||||
val sender: Long
|
|
||||||
) : VerifyDTO()
|
) : VerifyDTO()
|
||||||
|
Loading…
Reference in New Issue
Block a user