Commit e2d04f71 authored by Him188's avatar Him188

Add EmptyMessageChain and more extensions

parent a28a90ec
......@@ -5,8 +5,7 @@ package net.mamoe.mirai.contact
import net.mamoe.mirai.Bot
import net.mamoe.mirai.message.Message
import net.mamoe.mirai.message.MessageChain
import net.mamoe.mirai.message.PlainText
import net.mamoe.mirai.message.toChain
import net.mamoe.mirai.message.singleChain
import net.mamoe.mirai.network.BotSession
import net.mamoe.mirai.network.protocol.tim.handler.EventPacketHandler
import net.mamoe.mirai.withSession
......@@ -25,13 +24,11 @@ sealed class Contact(val bot: Bot, val id: UInt) {
abstract suspend fun sendMessage(message: MessageChain)
abstract suspend fun sendXMLMessage(message: String)
//这两个方法应写为扩展函数, 但为方便 import 还是写在这里
suspend fun sendMessage(plain: String) = sendMessage(plain.singleChain())
//这两个方法写在 Contact 里面更适合. 因为 import 不便
suspend fun sendMessage(plain: String) = sendMessage(PlainText(plain))
suspend fun sendMessage(message: Message) = sendMessage(message.toChain())
suspend fun sendMessage(message: Message) = sendMessage(message.singleChain())
}
/**
......@@ -75,14 +72,10 @@ class Group internal constructor(bot: Bot, val groupId: GroupId) : Contact(bot,
bot.network[EventPacketHandler].sendGroupMessage(this, message)
}
override suspend fun sendXMLMessage(message: String) {
}
companion object
}
inline fun <R> Group.withSession(block: BotSession.() -> R): R = bot.withSession(block)
inline fun <R> Contact.withSession(block: BotSession.() -> R): R = bot.withSession(block)
/**
* QQ 对象.
......@@ -93,12 +86,17 @@ inline fun <R> Group.withSession(block: BotSession.() -> R): R = bot.withSession
*
* @author Him188moe
*/
class QQ internal constructor(bot: Bot, id: UInt) : Contact(bot, id) {
open class QQ internal constructor(bot: Bot, id: UInt) : Contact(bot, id) {
override suspend fun sendMessage(message: MessageChain) {
bot.network[EventPacketHandler].sendFriendMessage(this, message)
}
}
override suspend fun sendXMLMessage(message: String) {
TODO()
/**
* 群成员
*/
class Member internal constructor(bot: Bot, id: UInt, val group: Group) : QQ(bot, id) {
init {
TODO("Group member implementation")
}
}
\ No newline at end of file
......@@ -36,7 +36,7 @@ abstract class SenderAndMessage<TContact : Contact>(
*/
suspend inline fun reply(message: MessageChain) = subject.sendMessage(message)
suspend fun reply(message: Message) = subject.sendMessage(message.toChain())
suspend fun reply(message: Message) = subject.sendMessage(message.singleChain())
suspend fun reply(plain: String) = subject.sendMessage(plain.toMessage())
......
package net.mamoe.mirai.message
// Message 扩展方法
/**
* 构造 [PlainText]
*/
fun String.toMessage(): PlainText = PlainText(this)
/**
* 得到包含 [this] 的 [MessageChain].
* 若 [this] 为 [MessageChain] 将直接返回 this
* 否则将调用 [SingleMessageChain] 构造一个唯一成员不可修改的 [SingleMessageChainImpl]
*
* @see SingleMessageChain
* @see SingleMessageChainImpl
*/
fun Message.toChain(): MessageChain = if (this is MessageChain) this else SingleMessageChain(this)
/**
* 以 [this] 为代表 (delegate) 构造 [SingleMessageChain].
* @throws IllegalArgumentException 当 [this] 为 [MessageChain] 的实例时
*/
fun Message.singleChain(): MessageChain = SingleMessageChain(this)
/**
* 构造 [MessageChain]
*/
fun List<Message>.toMessageChain(): MessageChain = MessageChain(this)
\ No newline at end of file
......@@ -124,6 +124,7 @@ class IgnoredServerEventPacket(input: ByteReadPacket, eventIdentity: EventPacket
* Unknown event
*/
class UnknownServerEventPacket(
@Suppress("MemberVisibilityCanBePrivate")
val eventId: ByteArray,
private val showData: Boolean = false,
input: ByteReadPacket,
......
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