1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-04-25 04:50:26 +08:00

Rename toChain to asMessageChain, add more java-friendly apis

This commit is contained in:
Him188 2020-03-03 09:31:01 +08:00
parent b62bb72b04
commit 8042249f51
5 changed files with 45 additions and 14 deletions
mirai-core-qqandroid/src/jvmTest/kotlin/test
mirai-core/src/commonMain/kotlin/net.mamoe.mirai

View File

@ -7,8 +7,11 @@
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
@file:Suppress("EXPERIMENTAL_API_USAGE")
package test
import net.mamoe.mirai.utils.MiraiDebugAPI
import net.mamoe.mirai.utils.cryptor.ProtoType
import net.mamoe.mirai.utils.cryptor.protoFieldNumber
import java.io.File
@ -364,6 +367,7 @@ fun String.getNumericalValue(): Int? {
return this.filter { it in '0'..'9' }.toDoubleOrNull()?.toInt()
}
@UseExperimental(MiraiDebugAPI::class)
fun ProtoType.mapToKotlinType(): String {
return when (this) {
ProtoType.VAR_INT -> "Int"

View File

@ -140,7 +140,7 @@ fun Contact.recallIn(
*/
@Suppress("UNCHECKED_CAST")
suspend inline fun <C : Contact> C.sendMessage(message: Message): MessageReceipt<C> =
sendMessage(message.toChain()) as? MessageReceipt<C> ?: error("Internal class cast mistake")
sendMessage(message.asMessageChain()) as? MessageReceipt<C> ?: error("Internal class cast mistake")
/**
* @see Contact.sendMessage

View File

@ -76,10 +76,14 @@ abstract class MessagePacketBase<TSender : QQ, TSubject : Contact> : Packet, Bot
* 对于好友消息事件, 这个方法将会给好友 ([subject]) 发送消息
* 对于群消息事件, 这个方法将会给群 ([subject]) 发送消息
*/
suspend inline fun reply(message: MessageChain): MessageReceipt<TSubject> = subject.sendMessage(message) as MessageReceipt<TSubject>
suspend inline fun reply(message: MessageChain): MessageReceipt<TSubject> =
subject.sendMessage(message) as MessageReceipt<TSubject>
suspend inline fun reply(message: Message): MessageReceipt<TSubject> = subject.sendMessage(message.toChain()) as MessageReceipt<TSubject>
suspend inline fun reply(plain: String): MessageReceipt<TSubject> = subject.sendMessage(plain.toMessage().toChain()) as MessageReceipt<TSubject>
suspend inline fun reply(message: Message): MessageReceipt<TSubject> =
subject.sendMessage(message.asMessageChain()) as MessageReceipt<TSubject>
suspend inline fun reply(plain: String): MessageReceipt<TSubject> =
subject.sendMessage(plain.toMessage().asMessageChain()) as MessageReceipt<TSubject>
@JvmName("reply1")
suspend inline fun String.reply(): MessageReceipt<TSubject> = reply(this)

View File

@ -107,10 +107,10 @@ inline val MessageReceipt<*>.sourceSequenceId: Int get() = this.source.sequenceI
inline val MessageReceipt<*>.sourceTime: Long get() = this.source.time
suspend inline fun MessageReceipt<out Contact>.quoteReply(message: Message) {
return this.quoteReply(message.toChain())
return this.quoteReply(message.asMessageChain())
}
suspend inline fun MessageReceipt<out Contact>.quoteReply(message: String) {
return this.quoteReply(message.toMessage().toChain())
return this.quoteReply(message.toMessage().asMessageChain())
}

View File

@ -31,7 +31,7 @@ import kotlin.reflect.KProperty
* 要获取更多信息, 请查看 [Message]
*
* @see buildMessageChain 构造一个 [MessageChain]
* @see toChain 将单个 [Message] 转换为 [MessageChain]
* @see asMessageChain 将单个 [Message] 转换为 [MessageChain]
* @see asMessageChain [Iterable] [Sequence] 委托为 [MessageChain]
*
* @see foreachContent 遍历内容
@ -188,7 +188,7 @@ inline fun <reified T : Message> MessageChain.orNull(): OrNullDelegate<T?> = OrN
inline fun <reified T : Message?> MessageChain.orElse(
lazyDefault: () -> T
): OrNullDelegate<T> =
OrNullDelegate<T>(this.firstOrNull<T>() ?: lazyDefault())
OrNullDelegate(this.firstOrNull<T>() ?: lazyDefault())
// endregion delegate
@ -204,12 +204,15 @@ inline fun <reified T : Message?> MessageChain.orElse(
@JvmName("newChain")
@JsName("newChain")
@Suppress("UNCHECKED_CAST")
fun Message.toChain(): MessageChain = when (this) {
fun Message.asMessageChain(): MessageChain = when (this) {
is MessageChain -> this
is CombinedMessage -> (this as Iterable<Message>).asMessageChain()
else -> SingleMessageChainImpl(this as SingleMessage)
}
@Deprecated("use asMessageChain instead", ReplaceWith("this.asMessageChain()"), DeprecationLevel.ERROR)
fun Message.toChain(): MessageChain = this.asMessageChain()
/**
* 直接将 [this] 委托为一个 [MessageChain]
*/
@ -220,7 +223,7 @@ fun Collection<SingleMessage>.asMessageChain(): MessageChain = MessageChainImplB
* [this] [扁平化后][flatten] 委托为一个 [MessageChain]
*/
@JvmName("newChain")
@JsName("newChain")
// @JsName("newChain")
fun Collection<Message>.asMessageChain(): MessageChain = MessageChainImplBySequence(this.flatten())
/**
@ -235,7 +238,7 @@ inline fun MessageChain.asMessageChain(): MessageChain = this // 避免套娃
* [this] [扁平化后][flatten] 委托为一个 [MessageChain]
*/
@JvmName("newChain")
@JsName("newChain")
// @JsName("newChain")
fun Iterable<Message>.asMessageChain(): MessageChain = MessageChainImplBySequence(this.flatten())
/**
@ -248,9 +251,29 @@ fun Sequence<SingleMessage>.asMessageChain(): MessageChain = MessageChainImplByS
* [this] [扁平化后][flatten] 委托为一个 [MessageChain]
*/
@JvmName("newChain")
@JsName("newChain")
// @JsName("newChain")
fun Sequence<Message>.asMessageChain(): MessageChain = MessageChainImplBySequence(this.flatten())
/**
* 构造一个 [MessageChain]
* 为提供更好的 Java API.
*/
@Suppress("FunctionName")
@JvmName("newChain")
fun _____newChain______(vararg messages: Message): MessageChain {
return messages.asIterable().asMessageChain()
}
/**
* 构造一个 [MessageChain]
* 为提供更好的 Java API.
*/
@Suppress("FunctionName")
@JvmName("newChain")
fun _____newChain______(messages: String): MessageChain {
return messages.toMessage().asMessageChain()
}
/**
* 扁平化消息序列.
*
@ -265,8 +288,8 @@ fun Sequence<Message>.asMessageChain(): MessageChain = MessageChainImplBySequenc
*/
fun Iterable<Message>.flatten(): Sequence<SingleMessage> = asSequence().flatten()
@JsName("flatten1") // avoid platform declare clash
@JvmName("flatten1")
// @JsName("flatten1")
@JvmName("flatten1")// avoid platform declare clash
@JvmSynthetic
fun Iterable<SingleMessage>.flatten(): Sequence<SingleMessage> = this.asSequence() // fast path