Commit 039b3d75 authored by Him188's avatar Him188

Cleanup

parent 2b49a758
...@@ -182,11 +182,11 @@ internal abstract class QQAndroidBotBase constructor( ...@@ -182,11 +182,11 @@ internal abstract class QQAndroidBotBase constructor(
} }
@Suppress("RemoveExplicitTypeArguments") // false positive @Suppress("RemoveExplicitTypeArguments") // false positive
@ExperimentalMessageSource
override suspend fun recall(source: MessageSource) { override suspend fun recall(source: MessageSource) {
// println(source._miraiContentToString()) // println(source._miraiContentToString())
check(source is MessageSourceImpl) check(source is MessageSourceImpl)
source.ensureSequenceIdAvailable()
val response: PbMessageSvc.PbMsgWithDraw.Response = when (source) { val response: PbMessageSvc.PbMsgWithDraw.Response = when (source) {
is MessageSourceToGroupImpl, is MessageSourceToGroupImpl,
...@@ -216,6 +216,7 @@ internal abstract class QQAndroidBotBase constructor( ...@@ -216,6 +216,7 @@ internal abstract class QQAndroidBotBase constructor(
).sendAndExpect<PbMessageSvc.PbMsgWithDraw.Response>() ).sendAndExpect<PbMessageSvc.PbMsgWithDraw.Response>()
} }
} }
is OfflineMessageSource,
is MessageSourceFromFriendImpl, is MessageSourceFromFriendImpl,
is MessageSourceToFriendImpl is MessageSourceToFriendImpl
-> network.run { -> network.run {
...@@ -227,7 +228,7 @@ internal abstract class QQAndroidBotBase constructor( ...@@ -227,7 +228,7 @@ internal abstract class QQAndroidBotBase constructor(
source.time source.time
).sendAndExpect<PbMessageSvc.PbMsgWithDraw.Response>() ).sendAndExpect<PbMessageSvc.PbMsgWithDraw.Response>()
} }
else -> error("stub") else -> error("stub!")
} }
check(response is PbMessageSvc.PbMsgWithDraw.Response.Success) { "Failed to recall message #${source.id}: $response" } check(response is PbMessageSvc.PbMsgWithDraw.Response.Success) { "Failed to recall message #${source.id}: $response" }
......
...@@ -12,8 +12,6 @@ ...@@ -12,8 +12,6 @@
package net.mamoe.mirai.qqandroid.utils package net.mamoe.mirai.qqandroid.utils
import net.mamoe.mirai.message.data.*
import net.mamoe.mirai.message.data.AtAll.display
import kotlin.jvm.JvmMultifileClass import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
...@@ -32,6 +30,7 @@ internal fun Int.toIpV4AddressString(): String { ...@@ -32,6 +30,7 @@ internal fun Int.toIpV4AddressString(): String {
} }
} }
/*
internal fun String.chineseLength(upTo: Int): Int { internal fun String.chineseLength(upTo: Int): Int {
return this.sumUpTo(upTo) { if (it in '\u0391'..'\uFFE5') 3 else 1 } return this.sumUpTo(upTo) { if (it in '\u0391'..'\uFFE5') 3 else 1 }
} }
...@@ -41,11 +40,10 @@ internal fun MessageChain.estimateLength(upTo: Int = Int.MAX_VALUE): Int = ...@@ -41,11 +40,10 @@ internal fun MessageChain.estimateLength(upTo: Int = Int.MAX_VALUE): Int =
it.estimateLength(up) it.estimateLength(up)
} }
@OptIn(ExperimentalMessageSource::class)
internal fun SingleMessage.estimateLength(upTo: Int = Int.MAX_VALUE): Int { internal fun SingleMessage.estimateLength(upTo: Int = Int.MAX_VALUE): Int {
return when (this) { return when (this) {
is QuoteReply -> { is QuoteReply -> {
700 + source.originalMessage.estimateLength(upTo) 700
} }
// is Image -> 300 // is Image -> 300
is PlainText -> stringValue.chineseLength(upTo) is PlainText -> stringValue.chineseLength(upTo)
...@@ -76,3 +74,4 @@ internal inline fun CharSequence.sumUpTo(upTo: Int, selector: (Char) -> Int): In ...@@ -76,3 +74,4 @@ internal inline fun CharSequence.sumUpTo(upTo: Int, selector: (Char) -> Int): In
} }
return sum return sum
} }
*/
\ No newline at end of file
...@@ -5,7 +5,6 @@ import net.mamoe.mirai.contact.PermissionDeniedException ...@@ -5,7 +5,6 @@ import net.mamoe.mirai.contact.PermissionDeniedException
import net.mamoe.mirai.contact.recall import net.mamoe.mirai.contact.recall
import net.mamoe.mirai.data.AddFriendResult import net.mamoe.mirai.data.AddFriendResult
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.ExperimentalMessageSource
import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.message.data.Image
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.MessageSource import net.mamoe.mirai.message.data.MessageSource
...@@ -62,7 +61,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() { ...@@ -62,7 +61,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() {
* *
* @see Bot.recall (扩展函数) 接受参数 [MessageChain] * @see Bot.recall (扩展函数) 接受参数 [MessageChain]
*/ */
@ExperimentalMessageSource
@JvmName("recall") @JvmName("recall")
fun __recallBlockingForJava__(source: MessageSource) { fun __recallBlockingForJava__(source: MessageSource) {
runBlocking { recall(source) } runBlocking { recall(source) }
...@@ -90,7 +88,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() { ...@@ -90,7 +88,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() {
* @param millis 延迟的时间, 单位为毫秒 * @param millis 延迟的时间, 单位为毫秒
* @see recall * @see recall
*/ */
@ExperimentalMessageSource
@JvmName("recallIn") @JvmName("recallIn")
fun __recallIn_MemberForJava__(source: MessageSource, millis: Long) { fun __recallIn_MemberForJava__(source: MessageSource, millis: Long) {
runBlocking { recallIn(source, millis) } runBlocking { recallIn(source, millis) }
...@@ -151,7 +148,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() { ...@@ -151,7 +148,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() {
/** /**
* 异步调用 [__recallBlockingForJava__] * 异步调用 [__recallBlockingForJava__]
*/ */
@ExperimentalMessageSource
@JvmName("recallAsync") @JvmName("recallAsync")
fun __recallAsyncForJava__(source: MessageSource): Future<Unit> { fun __recallAsyncForJava__(source: MessageSource): Future<Unit> {
return future { recall(source) } return future { recall(source) }
......
...@@ -11,7 +11,6 @@ import net.mamoe.mirai.contact.Contact ...@@ -11,7 +11,6 @@ import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.Member import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.message.data.ExperimentalMessageSource
import net.mamoe.mirai.message.data.Message import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.OnlineMessageSource import net.mamoe.mirai.message.data.OnlineMessageSource
import net.mamoe.mirai.message.data.QuoteReply import net.mamoe.mirai.message.data.QuoteReply
...@@ -24,16 +23,18 @@ import net.mamoe.mirai.utils.unsafeWeakRef ...@@ -24,16 +23,18 @@ import net.mamoe.mirai.utils.unsafeWeakRef
* *
* 此对象持有 [Contact] 的弱引用, [Bot] 离线后将会释放引用, 届时 [target] 将无法访问. * 此对象持有 [Contact] 的弱引用, [Bot] 离线后将会释放引用, 届时 [target] 将无法访问.
* *
* @param source 指代发送出去的消息
* @param target 消息发送对象
*
* @see Group.sendMessage 发送群消息, 返回回执(此对象) * @see Group.sendMessage 发送群消息, 返回回执(此对象)
* @see QQ.sendMessage 发送群消息, 返回回执(此对象) * @see QQ.sendMessage 发送群消息, 返回回执(此对象)
* *
* @see MessageReceipt.sourceId 源 id * @see MessageReceipt.sourceId 源 id
* @see MessageReceipt.sourceSequenceId 源序列号
* @see MessageReceipt.sourceTime 源时间 * @see MessageReceipt.sourceTime 源时间
*/ */
@Suppress("FunctionName") @Suppress("FunctionName")
@OptIn(MiraiInternalAPI::class) @OptIn(MiraiInternalAPI::class)
actual open class MessageReceipt<out C : Contact> @OptIn(ExperimentalMessageSource::class) actual open class MessageReceipt<out C : Contact>
actual constructor( actual constructor(
actual val source: OnlineMessageSource.Outgoing, actual val source: OnlineMessageSource.Outgoing,
target: C, target: C,
......
...@@ -18,7 +18,6 @@ import net.mamoe.mirai.event.BroadcastControllable ...@@ -18,7 +18,6 @@ import net.mamoe.mirai.event.BroadcastControllable
import net.mamoe.mirai.event.CancellableEvent import net.mamoe.mirai.event.CancellableEvent
import net.mamoe.mirai.event.events.ImageUploadEvent.Failed import net.mamoe.mirai.event.events.ImageUploadEvent.Failed
import net.mamoe.mirai.event.events.ImageUploadEvent.Succeed import net.mamoe.mirai.event.events.ImageUploadEvent.Succeed
import net.mamoe.mirai.message.data.ExperimentalMessageSource
import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.message.data.Image
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.MessageSource import net.mamoe.mirai.message.data.MessageSource
...@@ -98,7 +97,6 @@ sealed class MessageSendEvent : BotEvent, BotActiveEvent, AbstractCancellableEve ...@@ -98,7 +97,6 @@ sealed class MessageSendEvent : BotEvent, BotActiveEvent, AbstractCancellableEve
/** /**
* 消息撤回事件. 可是任意消息被任意人撤回. * 消息撤回事件. 可是任意消息被任意人撤回.
*/ */
@OptIn(ExperimentalMessageSource::class)
sealed class MessageRecallEvent : BotEvent { sealed class MessageRecallEvent : BotEvent {
/** /**
* 消息原发送人 * 消息原发送人
......
...@@ -34,7 +34,7 @@ import kotlin.jvm.JvmSynthetic ...@@ -34,7 +34,7 @@ import kotlin.jvm.JvmSynthetic
* @see MessageReceipt.sourceId 源 id * @see MessageReceipt.sourceId 源 id
* @see MessageReceipt.sourceTime 源时间 * @see MessageReceipt.sourceTime 源时间
*/ */
expect open class MessageReceipt<out C : Contact> @OptIn(ExperimentalMessageSource::class) constructor( expect open class MessageReceipt<out C : Contact>(
source: OnlineMessageSource.Outgoing, source: OnlineMessageSource.Outgoing,
target: C, target: C,
botAsMember: Member? botAsMember: Member?
......
...@@ -69,7 +69,7 @@ interface Message { ...@@ -69,7 +69,7 @@ interface Message {
* *
* @param M 指代持有这个 Key 的消息类型 * @param M 指代持有这个 Key 的消息类型
*/ */
interface Key<M : Message> interface Key<out M : Message>
infix fun eq(other: Message): Boolean = this.toString() == other.toString() infix fun eq(other: Message): Boolean = this.toString() == other.toString()
......
...@@ -132,7 +132,7 @@ inline fun <reified M : Message> MessageChain.any(): Boolean = this.any { it is ...@@ -132,7 +132,7 @@ inline fun <reified M : Message> MessageChain.any(): Boolean = this.any { it is
/** /**
* 获取第一个 [M] 类型的 [Message] 实例 * 获取第一个 [M] 类型的 [Message] 实例
*/ */
@OptIn(ExperimentalMessageSource::class, MiraiExperimentalAPI::class) @OptIn(MiraiExperimentalAPI::class)
@JvmSynthetic @JvmSynthetic
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
fun <M : Message> MessageChain.firstOrNull(key: Message.Key<M>): M? = when (key) { fun <M : Message> MessageChain.firstOrNull(key: Message.Key<M>): M? = when (key) {
......
...@@ -28,12 +28,6 @@ import kotlin.jvm.JvmMultifileClass ...@@ -28,12 +28,6 @@ import kotlin.jvm.JvmMultifileClass
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
import kotlin.jvm.JvmSynthetic import kotlin.jvm.JvmSynthetic
/**
* MessageSource 正计划于 0.32 或 0.33 或之后进行 API 不兼容的重写.
*/
@RequiresOptIn(message = "MessageSource 正计划于 0.32 或 0.33 或之后进行 API 不兼容的重写", level = RequiresOptIn.Level.WARNING)
annotation class ExperimentalMessageSource
/** /**
* 消息源, 它存在于 [MessageChain] 中, 用于表示这个消息的来源. * 消息源, 它存在于 [MessageChain] 中, 用于表示这个消息的来源.
* *
...@@ -103,6 +97,8 @@ sealed class MessageSource : Message, MessageMetadata { ...@@ -103,6 +97,8 @@ sealed class MessageSource : Message, MessageMetadata {
*/ */
@SinceMirai("0.33.0") @SinceMirai("0.33.0")
sealed class OnlineMessageSource : MessageSource() { sealed class OnlineMessageSource : MessageSource() {
companion object Key : Message.Key<OnlineMessageSource>
/** /**
* 消息发送人. 可能为 [机器人][Bot] 或 [好友][QQ] 或 [群员][Member]. * 消息发送人. 可能为 [机器人][Bot] 或 [好友][QQ] 或 [群员][Member].
* 即类型必定为 [Bot], [QQ] 或 [Member] * 即类型必定为 [Bot], [QQ] 或 [Member]
...@@ -125,6 +121,8 @@ sealed class OnlineMessageSource : MessageSource() { ...@@ -125,6 +121,8 @@ sealed class OnlineMessageSource : MessageSource() {
* 由 [机器人主动发送消息][Contact.sendMessage] 产生的 [MessageSource] * 由 [机器人主动发送消息][Contact.sendMessage] 产生的 [MessageSource]
*/ */
sealed class Outgoing : OnlineMessageSource() { sealed class Outgoing : OnlineMessageSource() {
companion object Key : Message.Key<Outgoing>
abstract override val sender: Bot abstract override val sender: Bot
abstract override val target: Contact abstract override val target: Contact
...@@ -132,12 +130,16 @@ sealed class OnlineMessageSource : MessageSource() { ...@@ -132,12 +130,16 @@ sealed class OnlineMessageSource : MessageSource() {
final override val targetId: Long get() = target.id final override val targetId: Long get() = target.id
abstract class ToFriend : Outgoing() { abstract class ToFriend : Outgoing() {
companion object Key : Message.Key<ToFriend>
abstract override val target: QQ abstract override val target: QQ
final override val subject: QQ get() = target final override val subject: QQ get() = target
// final override fun toString(): String = "OnlineMessageSource.ToFriend(target=${target.id})" // final override fun toString(): String = "OnlineMessageSource.ToFriend(target=${target.id})"
} }
abstract class ToGroup : Outgoing() { abstract class ToGroup : Outgoing() {
companion object Key : Message.Key<ToGroup>
abstract override val target: Group abstract override val target: Group
final override val subject: Group get() = target final override val subject: Group get() = target
// final override fun toString(): String = "OnlineMessageSource.ToGroup(group=${target.id})" // final override fun toString(): String = "OnlineMessageSource.ToGroup(group=${target.id})"
...@@ -148,6 +150,8 @@ sealed class OnlineMessageSource : MessageSource() { ...@@ -148,6 +150,8 @@ sealed class OnlineMessageSource : MessageSource() {
* 接收到的一条消息的 [MessageSource] * 接收到的一条消息的 [MessageSource]
*/ */
sealed class Incoming : OnlineMessageSource() { sealed class Incoming : OnlineMessageSource() {
companion object Key : Message.Key<Incoming>
abstract override val sender: QQ // out QQ abstract override val sender: QQ // out QQ
abstract override val target: Bot abstract override val target: Bot
...@@ -155,12 +159,16 @@ sealed class OnlineMessageSource : MessageSource() { ...@@ -155,12 +159,16 @@ sealed class OnlineMessageSource : MessageSource() {
final override val targetId: Long get() = target.id final override val targetId: Long get() = target.id
abstract class FromFriend : Incoming() { abstract class FromFriend : Incoming() {
companion object Key : Message.Key<FromFriend>
abstract override val sender: QQ abstract override val sender: QQ
final override val subject: QQ get() = sender final override val subject: QQ get() = sender
// final override fun toString(): String = "OnlineMessageSource.FromFriend(from=${sender.id})" // final override fun toString(): String = "OnlineMessageSource.FromFriend(from=${sender.id})"
} }
abstract class FromGroup : Incoming() { abstract class FromGroup : Incoming() {
companion object Key : Message.Key<FromGroup>
abstract override val sender: Member abstract override val sender: Member
final override val subject: Group get() = sender.group final override val subject: Group get() = sender.group
val group: Group get() = sender.group val group: Group get() = sender.group
...@@ -207,6 +215,7 @@ inline fun MessageSource.recallIn( ...@@ -207,6 +215,7 @@ inline fun MessageSource.recallIn(
*/ */
@SinceMirai("0.33.0") @SinceMirai("0.33.0")
abstract class OfflineMessageSource : MessageSource() { abstract class OfflineMessageSource : MessageSource() {
companion object Key : Message.Key<OfflineMessageSource>
// final override fun toString(): String = "OfflineMessageSource(sender=$senderId, target=$targetId)" // final override fun toString(): String = "OfflineMessageSource(sender=$senderId, target=$targetId)"
} // TODO: 2020/4/4 可能要分群和好友 } // TODO: 2020/4/4 可能要分群和好友
......
...@@ -5,7 +5,6 @@ import net.mamoe.mirai.contact.PermissionDeniedException ...@@ -5,7 +5,6 @@ import net.mamoe.mirai.contact.PermissionDeniedException
import net.mamoe.mirai.contact.recall import net.mamoe.mirai.contact.recall
import net.mamoe.mirai.data.AddFriendResult import net.mamoe.mirai.data.AddFriendResult
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.ExperimentalMessageSource
import net.mamoe.mirai.message.data.Image import net.mamoe.mirai.message.data.Image
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.MessageSource import net.mamoe.mirai.message.data.MessageSource
...@@ -62,7 +61,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() { ...@@ -62,7 +61,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() {
* *
* @see Bot.recall (扩展函数) 接受参数 [MessageChain] * @see Bot.recall (扩展函数) 接受参数 [MessageChain]
*/ */
@ExperimentalMessageSource
@JvmName("recall") @JvmName("recall")
fun __recallBlockingForJava__(source: MessageSource) { fun __recallBlockingForJava__(source: MessageSource) {
runBlocking { recall(source) } runBlocking { recall(source) }
...@@ -90,7 +88,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() { ...@@ -90,7 +88,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() {
* @param millis 延迟的时间, 单位为毫秒 * @param millis 延迟的时间, 单位为毫秒
* @see recall * @see recall
*/ */
@ExperimentalMessageSource
@JvmName("recallIn") @JvmName("recallIn")
fun __recallIn_MemberForJava__(source: MessageSource, millis: Long) { fun __recallIn_MemberForJava__(source: MessageSource, millis: Long) {
runBlocking { recallIn(source, millis) } runBlocking { recallIn(source, millis) }
...@@ -151,7 +148,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() { ...@@ -151,7 +148,6 @@ actual abstract class BotJavaFriendlyAPI actual constructor() {
/** /**
* 异步调用 [__recallBlockingForJava__] * 异步调用 [__recallBlockingForJava__]
*/ */
@ExperimentalMessageSource
@JvmName("recallAsync") @JvmName("recallAsync")
fun __recallAsyncForJava__(source: MessageSource): Future<Unit> { fun __recallAsyncForJava__(source: MessageSource): Future<Unit> {
return future { recall(source) } return future { recall(source) }
......
...@@ -11,7 +11,6 @@ import net.mamoe.mirai.contact.Contact ...@@ -11,7 +11,6 @@ import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.Group import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.Member import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.contact.QQ import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.message.data.ExperimentalMessageSource
import net.mamoe.mirai.message.data.Message import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.OnlineMessageSource import net.mamoe.mirai.message.data.OnlineMessageSource
import net.mamoe.mirai.message.data.QuoteReply import net.mamoe.mirai.message.data.QuoteReply
...@@ -24,16 +23,18 @@ import net.mamoe.mirai.utils.unsafeWeakRef ...@@ -24,16 +23,18 @@ import net.mamoe.mirai.utils.unsafeWeakRef
* *
* 此对象持有 [Contact] 的弱引用, [Bot] 离线后将会释放引用, 届时 [target] 将无法访问. * 此对象持有 [Contact] 的弱引用, [Bot] 离线后将会释放引用, 届时 [target] 将无法访问.
* *
* @param source 指代发送出去的消息
* @param target 消息发送对象
*
* @see Group.sendMessage 发送群消息, 返回回执(此对象) * @see Group.sendMessage 发送群消息, 返回回执(此对象)
* @see QQ.sendMessage 发送群消息, 返回回执(此对象) * @see QQ.sendMessage 发送群消息, 返回回执(此对象)
* *
* @see MessageReceipt.sourceId 源 id * @see MessageReceipt.sourceId 源 id
* @see MessageReceipt.sourceSequenceId 源序列号
* @see MessageReceipt.sourceTime 源时间 * @see MessageReceipt.sourceTime 源时间
*/ */
@Suppress("FunctionName") @Suppress("FunctionName")
@OptIn(MiraiInternalAPI::class) @OptIn(MiraiInternalAPI::class)
actual open class MessageReceipt<out C : Contact> @OptIn(ExperimentalMessageSource::class) actual open class MessageReceipt<out C : Contact>
actual constructor( actual constructor(
actual val source: OnlineMessageSource.Outgoing, actual val source: OnlineMessageSource.Outgoing,
target: C, target: C,
......
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