Commit e2d04f71 authored by Him188's avatar Him188

Add EmptyMessageChain and more extensions

parent a28a90ec
...@@ -5,8 +5,7 @@ package net.mamoe.mirai.contact ...@@ -5,8 +5,7 @@ package net.mamoe.mirai.contact
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.message.Message import net.mamoe.mirai.message.Message
import net.mamoe.mirai.message.MessageChain import net.mamoe.mirai.message.MessageChain
import net.mamoe.mirai.message.PlainText import net.mamoe.mirai.message.singleChain
import net.mamoe.mirai.message.toChain
import net.mamoe.mirai.network.BotSession import net.mamoe.mirai.network.BotSession
import net.mamoe.mirai.network.protocol.tim.handler.EventPacketHandler import net.mamoe.mirai.network.protocol.tim.handler.EventPacketHandler
import net.mamoe.mirai.withSession import net.mamoe.mirai.withSession
...@@ -25,13 +24,11 @@ sealed class Contact(val bot: Bot, val id: UInt) { ...@@ -25,13 +24,11 @@ sealed class Contact(val bot: Bot, val id: UInt) {
abstract suspend fun sendMessage(message: MessageChain) 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(message: Message) = sendMessage(message.singleChain())
suspend fun sendMessage(plain: String) = sendMessage(PlainText(plain))
suspend fun sendMessage(message: Message) = sendMessage(message.toChain())
} }
/** /**
...@@ -75,14 +72,10 @@ class Group internal constructor(bot: Bot, val groupId: GroupId) : Contact(bot, ...@@ -75,14 +72,10 @@ class Group internal constructor(bot: Bot, val groupId: GroupId) : Contact(bot,
bot.network[EventPacketHandler].sendGroupMessage(this, message) bot.network[EventPacketHandler].sendGroupMessage(this, message)
} }
override suspend fun sendXMLMessage(message: String) {
}
companion object 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 对象. * QQ 对象.
...@@ -93,12 +86,17 @@ inline fun <R> Group.withSession(block: BotSession.() -> R): R = bot.withSession ...@@ -93,12 +86,17 @@ inline fun <R> Group.withSession(block: BotSession.() -> R): R = bot.withSession
* *
* @author Him188moe * @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) { override suspend fun sendMessage(message: MessageChain) {
bot.network[EventPacketHandler].sendFriendMessage(this, message) 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>( ...@@ -36,7 +36,7 @@ abstract class SenderAndMessage<TContact : Contact>(
*/ */
suspend inline fun reply(message: MessageChain) = subject.sendMessage(message) 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()) 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 ...@@ -124,6 +124,7 @@ class IgnoredServerEventPacket(input: ByteReadPacket, eventIdentity: EventPacket
* Unknown event * Unknown event
*/ */
class UnknownServerEventPacket( class UnknownServerEventPacket(
@Suppress("MemberVisibilityCanBePrivate")
val eventId: ByteArray, val eventId: ByteArray,
private val showData: Boolean = false, private val showData: Boolean = false,
input: ByteReadPacket, 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