Commit b8d6e420 authored by Him188's avatar Him188

Merge remote-tracking branch 'origin/master'

parents 13b72b31 4ed33a9b
...@@ -25,12 +25,12 @@ data class QQDTO( ...@@ -25,12 +25,12 @@ data class QQDTO(
@Serializable @Serializable
data class MemberDTO( data class MemberDTO(
override val id: Long, override val id: Long,
val memberName: String = "", val memberName: String,
val permission: MemberPermission, val permission: MemberPermission,
val group: GroupDTO val group: GroupDTO
) : ContactDTO() { ) : ContactDTO() {
constructor(member: Member, name: String = "") : this ( constructor(member: Member) : this (
member.id, name, member.permission, GroupDTO(member.group) member.id, member.groupCard, member.permission, GroupDTO(member.group)
) )
} }
......
...@@ -31,13 +31,13 @@ data class UnKnownMessagePacketDTO(val msg: String) : MessagePacketDTO() ...@@ -31,13 +31,13 @@ data class UnKnownMessagePacketDTO(val msg: String) : MessagePacketDTO()
data class AtDTO(val target: Long, val display: String) : MessageDTO() data class AtDTO(val target: Long, val display: String) : MessageDTO()
@Serializable @Serializable
@SerialName("Face") @SerialName("Face")
data class FaceDTO(val faceID: Int) : MessageDTO() data class FaceDTO(val faceId: Int) : MessageDTO()
@Serializable @Serializable
@SerialName("Plain") @SerialName("Plain")
data class PlainDTO(val text: String) : MessageDTO() data class PlainDTO(val text: String) : MessageDTO()
@Serializable @Serializable
@SerialName("Image") @SerialName("Image")
data class ImageDTO(val path: String) : MessageDTO() data class ImageDTO(val imageId: String) : MessageDTO()
@Serializable @Serializable
@SerialName("Xml") @SerialName("Xml")
data class XmlDTO(val xml: String) : MessageDTO() data class XmlDTO(val xml: String) : MessageDTO()
...@@ -64,7 +64,7 @@ sealed class MessageDTO : DTO ...@@ -64,7 +64,7 @@ sealed class MessageDTO : DTO
*/ */
suspend fun MessagePacket<*, *>.toDTO(): MessagePacketDTO = when (this) { suspend fun MessagePacket<*, *>.toDTO(): MessagePacketDTO = when (this) {
is FriendMessage -> FriendMessagePacketDTO(QQDTO(sender)) is FriendMessage -> FriendMessagePacketDTO(QQDTO(sender))
is GroupMessage -> GroupMessagePacketDTO(MemberDTO(sender, senderName)) is GroupMessage -> GroupMessagePacketDTO(MemberDTO(sender))
else -> UnKnownMessagePacketDTO("UnKnown Message Packet") else -> UnKnownMessagePacketDTO("UnKnown Message Packet")
}.apply { messageChain = Array(message.size){ message[it].toDTO() }} }.apply { messageChain = Array(message.size){ message[it].toDTO() }}
...@@ -76,7 +76,7 @@ fun Message.toDTO() = when (this) { ...@@ -76,7 +76,7 @@ fun Message.toDTO() = when (this) {
is At -> AtDTO(target, display) is At -> AtDTO(target, display)
is Face -> FaceDTO(id.value.toInt()) is Face -> FaceDTO(id.value.toInt())
is PlainText -> PlainDTO(stringValue) is PlainText -> PlainDTO(stringValue)
is Image -> ImageDTO(this.toString()) is Image -> ImageDTO(imageId)
is XMLMessage -> XmlDTO(stringValue) is XMLMessage -> XmlDTO(stringValue)
else -> UnknownMessageDTO("未知消息类型") else -> UnknownMessageDTO("未知消息类型")
} }
...@@ -84,9 +84,9 @@ fun Message.toDTO() = when (this) { ...@@ -84,9 +84,9 @@ fun Message.toDTO() = when (this) {
@UseExperimental(ExperimentalUnsignedTypes::class, MiraiInternalAPI::class) @UseExperimental(ExperimentalUnsignedTypes::class, MiraiInternalAPI::class)
fun MessageDTO.toMessage() = when (this) { fun MessageDTO.toMessage() = when (this) {
is AtDTO -> At(target, display) is AtDTO -> At(target, display)
is FaceDTO -> Face(FaceId(faceID.toUByte())) is FaceDTO -> Face(FaceId(faceId.toUByte()))
is PlainDTO -> PlainText(text) is PlainDTO -> PlainText(text)
is ImageDTO -> PlainText("[暂时不支持图片]") is ImageDTO -> Image(imageId)
is XmlDTO -> XMLMessage(xml) is XmlDTO -> XMLMessage(xml)
is UnknownMessageDTO -> PlainText("assert cannot reach") is UnknownMessageDTO -> PlainText("assert cannot reach")
} }
......
...@@ -4,6 +4,7 @@ import kotlinx.serialization.Serializable ...@@ -4,6 +4,7 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient import kotlinx.serialization.Transient
import net.mamoe.mirai.api.http.AuthedSession import net.mamoe.mirai.api.http.AuthedSession
import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.Member
@Serializable @Serializable
abstract class VerifyDTO : DTO { abstract class VerifyDTO : DTO {
...@@ -60,6 +61,22 @@ data class GroupInfoDTO( ...@@ -60,6 +61,22 @@ data class GroupInfoDTO(
) )
} }
@Serializable
data class MemberConfigDTO(
override val sessionKey: String,
val target: Long,
val memberId: Long,
val config: MemberInfoDTO
) : VerifyDTO()
@Serializable
data class MemberInfoDTO(
val name: String? = null,
val specialTitle: String? = null
) : DTO {
constructor(member: Member) : this(member.groupCard, member.specialTitle)
}
@Serializable @Serializable
open class StateCode(val code: Int, var msg: String) { open class StateCode(val code: Int, var msg: String) {
object Success : StateCode(0, "success") // 成功 object Success : StateCode(0, "success") // 成功
......
...@@ -3,17 +3,14 @@ package net.mamoe.mirai.api.http.route ...@@ -3,17 +3,14 @@ package net.mamoe.mirai.api.http.route
import io.ktor.application.Application import io.ktor.application.Application
import io.ktor.application.call import io.ktor.application.call
import io.ktor.routing.routing import io.ktor.routing.routing
import net.mamoe.mirai.api.http.dto.GroupConfigDTO import net.mamoe.mirai.api.http.dto.*
import net.mamoe.mirai.api.http.dto.GroupInfoDTO
import net.mamoe.mirai.api.http.dto.MuteDTO
import net.mamoe.mirai.api.http.dto.StateCode
fun Application.groupManageModule() { fun Application.groupManageModule() {
routing { routing {
/** /**
* 禁言 * 禁言(需要相关权限)
*/ */
miraiVerify<MuteDTO>("/muteAll") { miraiVerify<MuteDTO>("/muteAll") {
it.session.bot.getGroup(it.target).muteAll = true it.session.bot.getGroup(it.target).muteAll = true
...@@ -61,5 +58,22 @@ fun Application.groupManageModule() { ...@@ -61,5 +58,22 @@ fun Application.groupManageModule() {
call.respondStateCode(StateCode.Success) call.respondStateCode(StateCode.Success)
} }
/**
* 群员信息管理(需要相关权限)
*/
miraiGet("/memberInfo") {
val member = it.bot.getGroup(paramOrNull("target"))[paramOrNull("memberID")]
call.respondDTO(MemberInfoDTO(member))
}
miraiVerify<MemberConfigDTO>("/memberInfo") { dto ->
val member = dto.session.bot.getGroup(dto.target)[dto.memberId]
with(dto.config) {
name?.let { member.groupCard = it }
specialTitle?.let { member.specialTitle = it }
}
call.respondStateCode(StateCode.Success)
}
} }
} }
\ No newline at end of file
...@@ -64,14 +64,14 @@ private fun calculateImageMd5ByImageId(imageId: String): ByteArray { ...@@ -64,14 +64,14 @@ private fun calculateImageMd5ByImageId(imageId: String): ByteArray {
return if (imageId.startsWith('/')) { return if (imageId.startsWith('/')) {
imageId imageId
.drop(1) .drop(1)
.replace('-', ' ') .replace("-", "")
.take(16 * 2) .take(16 * 2)
.chunkedHexToBytes() .chunkedHexToBytes()
} else { } else {
imageId imageId
.substringAfter('{') .substringAfter('{')
.substringBefore('}') .substringBefore('}')
.replace('-', ' ') .replace("-", "")
.chunkedHexToBytes() .chunkedHexToBytes()
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment