diff --git a/mirai-api-http/README_CH.md b/mirai-api-http/README_CH.md index 895d1b2e3..edd44d09e 100644 --- a/mirai-api-http/README_CH.md +++ b/mirai-api-http/README_CH.md @@ -16,6 +16,8 @@ fun main() { } ``` + + ## 认证相关 ### 开始会话-认证(Authorize) @@ -141,6 +143,8 @@ fun main() { > SessionKey与Bot 对应错误时将会返回状态码5:指定对象不存在 + + ## 消息相关 @@ -261,10 +265,10 @@ fun main() { ### 发送图片消息(通过URL) ``` -[POST] /sendGroupMessage +[POST] /sendImageMessage ``` -使用此方法向指定群发送消息 +使用此方法向指定对象(群或好友)发送图片消息 #### 请求 @@ -303,7 +307,7 @@ fun main() { ### 图片文件上传 ``` -[POST] /sendGroupMessage +[POST] /uploadImage ``` 使用此方法上传图片文件至服务器并返回ImageId @@ -385,7 +389,7 @@ Content-Type:multipart/form-data + [x] At,@消息 + [x] AtAll,@全体成员 -+ [x] Face,表情消息 ++ [ ] Face,表情消息 + [x] Plain,文字消息 + [x] Image,图片消息 + [ ] Xml,Xml卡片消息 @@ -414,10 +418,10 @@ Content-Type:multipart/form-data } ``` -| 名字 | 类型 | 说明 | -| ------- | ------ | ------------------------- | -| target | Long | 群员QQ号 | -| display | String | @时显示的文本如:"@Mirai" | +| 名字 | 类型 | 说明 | +| ------- | ------ | ---------------------------------------------- | +| target | Long | 群员QQ号 | +| dispaly | String | At时显示的文字,发送消息时无效,自动使用群名片 | #### AtAll @@ -517,6 +521,7 @@ Content-Type:multipart/form-data ``` + ### 获取群列表 使用此方法获取bot的群列表 @@ -786,6 +791,8 @@ Content-Type:multipart/form-data } ``` + + ### 获取群设置 使用此方法获取群设置 @@ -816,6 +823,7 @@ Content-Type:multipart/form-data ``` + ### 修改群员资料 使用此方法修改群员资料(需要有相关限权) @@ -856,6 +864,8 @@ Content-Type:multipart/form-data } ``` + + ### 获取群员资料 使用此方法获取群员资料 diff --git a/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/data/common/MessageDTO.kt b/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/data/common/MessageDTO.kt index f50f00e11..f46fc2567 100644 --- a/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/data/common/MessageDTO.kt +++ b/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/data/common/MessageDTO.kt @@ -11,6 +11,9 @@ package net.mamoe.mirai.api.http.data.common import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import net.mamoe.mirai.contact.Contact +import net.mamoe.mirai.contact.Group +import net.mamoe.mirai.contact.Member import net.mamoe.mirai.message.FriendMessage import net.mamoe.mirai.message.GroupMessage import net.mamoe.mirai.message.MessagePacket @@ -40,7 +43,7 @@ data class UnKnownMessagePacketDTO(val msg: String) : MessagePacketDTO() data class MessageSourceDTO(val uid: Long) : MessageDTO() @Serializable @SerialName("At") -data class AtDTO(val target: Long, val display: String) : MessageDTO() +data class AtDTO(val target: Long, val display: String = "") : MessageDTO() @Serializable @SerialName("AtAll") data class AtAllDTO(val target: Long = 0) : MessageDTO() // target为保留字段 @@ -83,8 +86,8 @@ suspend fun MessagePacket<*, *>.toDTO(): MessagePacketDTO = when (this) { else -> UnKnownMessagePacketDTO("UnKnown Message Packet") }.apply { messageChain = Array(message.size){ message[it].toDTO() }} -fun MessageChainDTO.toMessageChain() = - MessageChain().apply { this@toMessageChain.forEach { add(it.toMessage()) } } +fun MessageChainDTO.toMessageChain(contact: Contact) = + MessageChain().apply { this@toMessageChain.forEach { add(it.toMessage(contact)) } } @UseExperimental(ExperimentalUnsignedTypes::class) fun Message.toDTO() = when (this) { @@ -99,8 +102,8 @@ fun Message.toDTO() = when (this) { } @UseExperimental(ExperimentalUnsignedTypes::class, MiraiInternalAPI::class) -fun MessageDTO.toMessage() = when (this) { - is AtDTO -> At(target, display) +fun MessageDTO.toMessage(contact: Contact) = when (this) { + is AtDTO -> At((contact as Group)[target]) is AtAllDTO -> AtAll is FaceDTO -> Face(FaceId(faceId.toUByte())) is PlainDTO -> PlainText(text) diff --git a/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/AuthRouteModule.kt b/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/AuthRouteModule.kt index 40caf465d..45adcf2b3 100644 --- a/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/AuthRouteModule.kt +++ b/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/AuthRouteModule.kt @@ -18,6 +18,7 @@ import net.mamoe.mirai.api.http.AuthedSession import net.mamoe.mirai.api.http.SessionManager import net.mamoe.mirai.api.http.data.NoSuchBotException import net.mamoe.mirai.api.http.data.StateCode +import net.mamoe.mirai.api.http.data.common.DTO import net.mamoe.mirai.api.http.data.common.VerifyDTO import kotlin.coroutines.EmptyCoroutineContext @@ -28,7 +29,7 @@ fun Application.authModule() { if (it.authKey != SessionManager.authKey) { call.respondStateCode(StateCode(1, "Auth Key错误")) } else { - call.respondStateCode(StateCode(0, SessionManager.createTempSession().key)) + call.respondDTO(AuthRetDTO(0, SessionManager.createTempSession().key)) } } @@ -55,6 +56,9 @@ fun Application.authModule() { } } +@Serializable +private data class AuthRetDTO(val code: Int, val session: String) : DTO + @Serializable private data class BindDTO(override val sessionKey: String, val qq: Long) : VerifyDTO() diff --git a/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/SendMessageRouteModule.kt b/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/SendMessageRouteModule.kt index aa2beb5b8..b6d34549e 100644 --- a/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/SendMessageRouteModule.kt +++ b/mirai-api-http/src/main/kotlin/net/mamoe/mirai/api/http/route/SendMessageRouteModule.kt @@ -43,18 +43,23 @@ fun Application.messageModule() { } miraiVerify<SendDTO>("/sendFriendMessage") { - it.session.bot.getFriend(it.target).sendMessage(it.messageChain.toMessageChain()) + it.session.bot.getFriend(it.target).apply { + sendMessage(it.messageChain.toMessageChain(this)) // this aka QQ + } call.respondStateCode(StateCode.Success) } miraiVerify<SendDTO>("/sendGroupMessage") { - it.session.bot.getGroup(it.target).sendMessage(it.messageChain.toMessageChain()) + it.session.bot.getGroup(it.target).apply { + sendMessage(it.messageChain.toMessageChain(this)) // this aka Group + } call.respondStateCode(StateCode.Success) } miraiVerify<SendDTO>("/quoteMessage") { - it.session.messageQueue.quoteCache[it.target]?.quoteReply(it.messageChain.toMessageChain()) - ?: throw NoSuchElementException() + it.session.messageQueue.quoteCache[it.target]?.apply { + quoteReply(it.messageChain.toMessageChain(group)) + } ?: throw NoSuchElementException() call.respondStateCode(StateCode.Success) } diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/MiraiGraphical.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/MiraiGraphical.kt index b543a06ee..1a45580fa 100644 --- a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/MiraiGraphical.kt +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/MiraiGraphical.kt @@ -1,15 +1,10 @@ package net.mamoe.mirai.console.graphical -import com.jfoenix.controls.JFXDecorator -import javafx.scene.control.Button -import javafx.stage.Stage import net.mamoe.mirai.console.MiraiConsole import net.mamoe.mirai.console.graphical.controller.MiraiGraphicalUIController +import net.mamoe.mirai.console.graphical.styleSheet.PrimaryStyleSheet import net.mamoe.mirai.console.graphical.view.Decorator -import net.mamoe.mirai.console.graphical.view.PrimaryView import tornadofx.App -import tornadofx.FX.Companion.primaryStage -import tornadofx.UIComponent import tornadofx.find import tornadofx.launch @@ -17,7 +12,7 @@ fun main(args: Array<String>) { launch<MiraiGraphicalUI>(args) } -class MiraiGraphicalUI: App(Decorator::class) { +class MiraiGraphicalUI : App(Decorator::class, PrimaryStyleSheet::class) { override fun init() { super.init() @@ -29,4 +24,4 @@ class MiraiGraphicalUI: App(Decorator::class) { super.stop() MiraiConsole.stop() } -} \ No newline at end of file +} diff --git a/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/styleSheet/PrimaryStyleSheet.kt b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/styleSheet/PrimaryStyleSheet.kt new file mode 100644 index 000000000..8f47b7a39 --- /dev/null +++ b/mirai-console-graphical/src/main/kotlin/net/mamoe/mirai/console/graphical/styleSheet/PrimaryStyleSheet.kt @@ -0,0 +1,21 @@ +package net.mamoe.mirai.console.graphical.styleSheet + +import tornadofx.* + +class PrimaryStyleSheet : Stylesheet() { + companion object { + val jfxTitle by cssclass("jfx-decorator-buttons-container") + val container by cssclass("jfx-decorator-content-container") + } + + init { + jfxTitle { + backgroundColor += c("00BCD4") + } + + container { + borderColor += box(c("00BCD4")) + borderWidth += box(0.px, 4.px, 4.px, 4.px) + } + } +} \ No newline at end of file