All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.blr19c.falowp.bot.system.adapter.qq.op.OpMessageContent.kt Maven / Gradle / Ivy

There is a newer version: 2.0.0-RC2
Show newest version
package com.blr19c.falowp.bot.system.adapter.qq.op

import com.blr19c.falowp.bot.system.adapter.qq.op.serializer.OpMessageContentJsonDeserializer
import com.blr19c.falowp.bot.system.adapter.qq.op.serializer.OpMessageContentJsonSerializer
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import com.fasterxml.jackson.databind.annotation.JsonSerialize

/**
 * 消息内容
 */
@JsonSerialize(using = OpMessageContentJsonSerializer::class)
@JsonDeserialize(using = OpMessageContentJsonDeserializer::class)
data class OpMessageContent(
    val message: String,
    val at: List,
    val channel: List
) {

    fun fullMessage(): String {
        return channel.joinToString { "<#$it>" }
            .plus(" ")
            .plus(at.joinToString { "<@!$it>" })
            .plus(" $message")
    }

    companion object {
        fun of(data: String): OpMessageContent {
            val atRegex = """<@!?(\d+)>""".toRegex()
            val channelRegex = """<#(\d+)>""".toRegex()
            val atMatches = atRegex.findAll(data)
            val channelMatches = channelRegex.findAll(data)
            val atList = atMatches.map { it.groupValues[1] }.toList()
            val channelList = channelMatches.map { it.groupValues[1] }.toList()
            val message = data.replace(atRegex, "").replace(channelRegex, "")
            return OpMessageContent(message, atList, channelList)
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy