Commit 53fdcd41 authored by Him188's avatar Him188

Change `sendMessage(MessageChain)` to `sendMessage(Message)`

parent 7820b43f
...@@ -9,19 +9,9 @@ ...@@ -9,19 +9,9 @@
package net.mamoe.mirai.qqandroid package net.mamoe.mirai.qqandroid
import io.ktor.client.HttpClient
import io.ktor.client.request.*
import io.ktor.client.request.forms.MultiPartFormDataContent
import io.ktor.client.request.forms.formData
import kotlinx.coroutines.async
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withTimeoutOrNull import kotlinx.coroutines.withTimeoutOrNull
import kotlinx.io.core.Closeable import kotlinx.io.core.Closeable
import kotlinx.serialization.MissingFieldException
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonConfiguration
import kotlinx.serialization.json.int
import kotlinx.serialization.json.long
import net.mamoe.mirai.LowLevelAPI import net.mamoe.mirai.LowLevelAPI
import net.mamoe.mirai.contact.* import net.mamoe.mirai.contact.*
import net.mamoe.mirai.data.* import net.mamoe.mirai.data.*
...@@ -30,10 +20,7 @@ import net.mamoe.mirai.event.events.* ...@@ -30,10 +20,7 @@ import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.*
import net.mamoe.mirai.message.data.MessageSource
import net.mamoe.mirai.message.data.OfflineFriendImage
import net.mamoe.mirai.message.data.OfflineGroupImage
import net.mamoe.mirai.qqandroid.message.MessageSourceFromSendGroup import net.mamoe.mirai.qqandroid.message.MessageSourceFromSendGroup
import net.mamoe.mirai.qqandroid.network.highway.HighwayHelper import net.mamoe.mirai.qqandroid.network.highway.HighwayHelper
import net.mamoe.mirai.qqandroid.network.highway.postImage import net.mamoe.mirai.qqandroid.network.highway.postImage
...@@ -45,7 +32,6 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image.LongConn ...@@ -45,7 +32,6 @@ import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.image.LongConn
import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvc import net.mamoe.mirai.qqandroid.network.protocol.packet.chat.receive.MessageSvc
import net.mamoe.mirai.qqandroid.utils.toIpV4AddressString import net.mamoe.mirai.qqandroid.utils.toIpV4AddressString
import net.mamoe.mirai.utils.* import net.mamoe.mirai.utils.*
import net.mamoe.mirai.utils.io.encodeToString
import net.mamoe.mirai.utils.io.toUHexString import net.mamoe.mirai.utils.io.toUHexString
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract import kotlin.contracts.contract
...@@ -69,8 +55,9 @@ internal class QQImpl( ...@@ -69,8 +55,9 @@ internal class QQImpl(
override val nick: String override val nick: String
get() = friendInfo.nick get() = friendInfo.nick
override suspend fun sendMessage(message: MessageChain): MessageReceipt<QQ> { @Suppress("DuplicatedCode")
val event = FriendMessageSendEvent(this, message).broadcast() override suspend fun sendMessage(message: Message): MessageReceipt<QQ> {
val event = FriendMessageSendEvent(this, message.asMessageChain()).broadcast()
if (event.isCancelled) { if (event.isCancelled) {
throw EventCancelledException("cancelled by FriendMessageSendEvent") throw EventCancelledException("cancelled by FriendMessageSendEvent")
} }
...@@ -89,6 +76,11 @@ internal class QQImpl( ...@@ -89,6 +76,11 @@ internal class QQImpl(
return MessageReceipt(source, this, null) return MessageReceipt(source, this, null)
} }
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
override suspend fun sendMessage(message: MessageChain): MessageReceipt<QQ> {
return this.sendMessage(message as Message)
}
@OptIn(MiraiInternalAPI::class) @OptIn(MiraiInternalAPI::class)
override suspend fun uploadImage(image: ExternalImage): OfflineFriendImage = try { override suspend fun uploadImage(image: ExternalImage): OfflineFriendImage = try {
if (BeforeImageUploadEvent(this, image).broadcast().isCancelled) { if (BeforeImageUploadEvent(this, image).broadcast().isCancelled) {
...@@ -220,7 +212,32 @@ internal class MemberImpl( ...@@ -220,7 +212,32 @@ internal class MemberImpl(
@MiraiExperimentalAPI @MiraiExperimentalAPI
override suspend fun queryRemark(): FriendNameRemark = qq.queryRemark() override suspend fun queryRemark(): FriendNameRemark = qq.queryRemark()
override suspend fun sendMessage(message: MessageChain): MessageReceipt<QQ> = qq.sendMessage(message) @Suppress("DuplicatedCode")
override suspend fun sendMessage(message: Message): MessageReceipt<Member> {
val event = FriendMessageSendEvent(this, message.asMessageChain()).broadcast()
if (event.isCancelled) {
throw EventCancelledException("cancelled by FriendMessageSendEvent")
}
lateinit var source: MessageSource
bot.network.run {
check(
MessageSvc.PbSendMsg.ToFriend(
bot.client,
id,
event.message
) {
source = it
}.sendAndExpect<MessageSvc.PbSendMsg.Response>() is MessageSvc.PbSendMsg.Response.SUCCESS
) { "send message failed" }
}
return MessageReceipt(source, this, null)
}
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
override suspend fun sendMessage(message: MessageChain): MessageReceipt<out QQ> {
return this.sendMessage(message as Message)
}
override suspend fun uploadImage(image: ExternalImage): OfflineFriendImage = qq.uploadImage(image) override suspend fun uploadImage(image: ExternalImage): OfflineFriendImage = qq.uploadImage(image)
// endregion // endregion
...@@ -386,10 +403,7 @@ internal class GroupImpl( ...@@ -386,10 +403,7 @@ internal class GroupImpl(
groupInfo: GroupInfo, groupInfo: GroupInfo,
members: Sequence<MemberInfo> members: Sequence<MemberInfo>
) : Group() { ) : Group() {
@Suppress("\"RemoveEmptyClassBody\"") // things will go wrong after removal, don't try companion object;
companion object {
}
override val bot: QQAndroidBot by bot.unsafeWeakRef() override val bot: QQAndroidBot by bot.unsafeWeakRef()
val uin: Long = groupInfo.uin val uin: Long = groupInfo.uin
...@@ -595,9 +609,9 @@ internal class GroupImpl( ...@@ -595,9 +609,9 @@ internal class GroupImpl(
return members.delegate.filteringGetOrNull { it.id == id } return members.delegate.filteringGetOrNull { it.id == id }
} }
override suspend fun sendMessage(message: MessageChain): MessageReceipt<Group> { override suspend fun sendMessage(message: Message): MessageReceipt<Group> {
check(!isBotMuted) { "bot is muted. Remaining seconds=$botMuteRemaining" } check(!isBotMuted) { "bot is muted. Remaining seconds=$botMuteRemaining" }
val event = GroupMessageSendEvent(this, message).broadcast() val event = GroupMessageSendEvent(this, message.asMessageChain()).broadcast()
if (event.isCancelled) { if (event.isCancelled) {
throw EventCancelledException("cancelled by FriendMessageSendEvent") throw EventCancelledException("cancelled by FriendMessageSendEvent")
} }
...@@ -619,6 +633,12 @@ internal class GroupImpl( ...@@ -619,6 +633,12 @@ internal class GroupImpl(
return MessageReceipt(source, this, botAsMember) return MessageReceipt(source, this, botAsMember)
} }
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
override suspend fun sendMessage(message: MessageChain): MessageReceipt<Group> {
return this.sendMessage(message as Message)
}
override suspend fun uploadImage(image: ExternalImage): OfflineGroupImage = try { override suspend fun uploadImage(image: ExternalImage): OfflineGroupImage = try {
if (BeforeImageUploadEvent(this, image).broadcast().isCancelled) { if (BeforeImageUploadEvent(this, image).broadcast().isCancelled) {
throw EventCancelledException("cancelled by BeforeImageUploadEvent.ToGroup") throw EventCancelledException("cancelled by BeforeImageUploadEvent.ToGroup")
......
...@@ -18,6 +18,7 @@ import net.mamoe.mirai.event.events.ImageUploadEvent ...@@ -18,6 +18,7 @@ import net.mamoe.mirai.event.events.ImageUploadEvent
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.OfflineImage import net.mamoe.mirai.message.data.OfflineImage
import net.mamoe.mirai.message.data.id import net.mamoe.mirai.message.data.id
...@@ -64,6 +65,10 @@ actual abstract class Contact : CoroutineScope, ContactJavaHappyAPI() { ...@@ -64,6 +65,10 @@ actual abstract class Contact : CoroutineScope, ContactJavaHappyAPI() {
*/ */
@JvmName("sendMessageSuspend") @JvmName("sendMessageSuspend")
@JvmSynthetic @JvmSynthetic
actual abstract suspend fun sendMessage(message: Message): MessageReceipt<out Contact>
@JvmSynthetic
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
actual abstract suspend fun sendMessage(message: MessageChain): MessageReceipt<out Contact> actual abstract suspend fun sendMessage(message: MessageChain): MessageReceipt<out Contact>
/** /**
......
...@@ -58,12 +58,14 @@ actual abstract class ContactJavaHappyAPI { ...@@ -58,12 +58,14 @@ actual abstract class ContactJavaHappyAPI {
*/ */
@Throws(EventCancelledException::class, IllegalStateException::class) @Throws(EventCancelledException::class, IllegalStateException::class)
@JvmName("sendMessage") @JvmName("sendMessage")
open fun __sendMessageBlockingForJava__(message: Message): MessageReceipt<Contact> { open fun __sendMessageBlockingForJava__(message: Message): MessageReceipt<out Contact> {
return runBlocking { sendMessage(message) } return runBlocking {
sendMessage(message)
}
} }
@JvmName("sendMessage") @JvmName("sendMessage")
open fun __sendMessageBlockingForJava__(message: String): MessageReceipt<Contact> { open fun __sendMessageBlockingForJava__(message: String): MessageReceipt<out Contact> {
return runBlocking { sendMessage(message) } return runBlocking { sendMessage(message) }
} }
...@@ -137,7 +139,7 @@ actual abstract class ContactJavaHappyAPI { ...@@ -137,7 +139,7 @@ actual abstract class ContactJavaHappyAPI {
* @see Contact.sendMessage * @see Contact.sendMessage
*/ */
@JvmName("sendMessageAsync") @JvmName("sendMessageAsync")
open fun __sendMessageAsyncForJava__(message: Message): Future<MessageReceipt<Contact>> { open fun __sendMessageAsyncForJava__(message: Message): Future<MessageReceipt<out Contact>> {
return future { sendMessage(message) } return future { sendMessage(message) }
} }
...@@ -146,7 +148,7 @@ actual abstract class ContactJavaHappyAPI { ...@@ -146,7 +148,7 @@ actual abstract class ContactJavaHappyAPI {
* @see Contact.sendMessage * @see Contact.sendMessage
*/ */
@JvmName("sendMessageAsync") @JvmName("sendMessageAsync")
open fun __sendMessageAsyncForJava__(message: String): Future<MessageReceipt<Contact>> { open fun __sendMessageAsyncForJava__(message: String): Future<MessageReceipt<out Contact>> {
return future { sendMessage(message) } return future { sendMessage(message) }
} }
......
...@@ -16,6 +16,7 @@ import net.mamoe.mirai.event.events.* ...@@ -16,6 +16,7 @@ import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.OfflineGroupImage import net.mamoe.mirai.message.data.OfflineGroupImage
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
...@@ -179,6 +180,10 @@ actual abstract class Group : Contact(), CoroutineScope { ...@@ -179,6 +180,10 @@ actual abstract class Group : Contact(), CoroutineScope {
*/ */
@JvmName("sendMessageSuspend") @JvmName("sendMessageSuspend")
@JvmSynthetic @JvmSynthetic
actual abstract override suspend fun sendMessage(message: Message): MessageReceipt<Group>
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
@JvmSynthetic
actual abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<Group> actual abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<Group>
/** /**
......
...@@ -14,6 +14,10 @@ package net.mamoe.mirai.contact ...@@ -14,6 +14,10 @@ package net.mamoe.mirai.contact
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.JavaHappyAPI import net.mamoe.mirai.JavaHappyAPI
import net.mamoe.mirai.event.events.* import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.WeakRefProperty import net.mamoe.mirai.utils.WeakRefProperty
...@@ -101,6 +105,21 @@ actual abstract class Member : MemberJavaHappyAPI() { ...@@ -101,6 +105,21 @@ actual abstract class Member : MemberJavaHappyAPI() {
@JvmSynthetic @JvmSynthetic
actual abstract suspend fun unmute() actual abstract suspend fun unmute()
/**
* 向这个对象发送消息.
*
* @see FriendMessageSendEvent 发送好友信息事件, cancellable
* @see GroupMessageSendEvent 发送群消息事件. cancellable
*
* @throws EventCancelledException 当发送消息事件被取消
* @throws IllegalStateException 发送群消息时若 [Bot] 被禁言抛出
*
* @return 消息回执. 可进行撤回 ([MessageReceipt.recall])
*/
@JvmName("sendMessageSuspend")
@JvmSynthetic
actual abstract override suspend fun sendMessage(message: Message): MessageReceipt<Member>
/** /**
* 踢出该成员. * 踢出该成员.
* *
......
...@@ -13,6 +13,7 @@ import net.mamoe.mirai.event.events.ImageUploadEvent ...@@ -13,6 +13,7 @@ import net.mamoe.mirai.event.events.ImageUploadEvent
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.OfflineFriendImage import net.mamoe.mirai.message.data.OfflineFriendImage
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
...@@ -88,7 +89,11 @@ actual abstract class QQ : Contact(), CoroutineScope { ...@@ -88,7 +89,11 @@ actual abstract class QQ : Contact(), CoroutineScope {
*/ */
@JvmName("sendMessageSuspend") @JvmName("sendMessageSuspend")
@JvmSynthetic @JvmSynthetic
actual abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<QQ> actual abstract override suspend fun sendMessage(message: Message): MessageReceipt<out QQ>
@JvmSynthetic
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
actual abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<out QQ>
/** /**
* 上传一个图片以备发送. * 上传一个图片以备发送.
......
...@@ -266,7 +266,7 @@ suspend inline fun Bot.recall(message: MessageChain) = this.recall(message[Messa ...@@ -266,7 +266,7 @@ suspend inline fun Bot.recall(message: MessageChain) = this.recall(message[Messa
* @param coroutineContext 额外的 [CoroutineContext] * @param coroutineContext 额外的 [CoroutineContext]
* @see recall * @see recall
*/ */
fun Bot.recallIn( inline fun Bot.recallIn(
source: MessageSource, source: MessageSource,
millis: Long, millis: Long,
coroutineContext: CoroutineContext = EmptyCoroutineContext coroutineContext: CoroutineContext = EmptyCoroutineContext
...@@ -282,7 +282,7 @@ fun Bot.recallIn( ...@@ -282,7 +282,7 @@ fun Bot.recallIn(
* @param coroutineContext 额外的 [CoroutineContext] * @param coroutineContext 额外的 [CoroutineContext]
* @see recall * @see recall
*/ */
fun Bot.recallIn( inline fun Bot.recallIn(
message: MessageChain, message: MessageChain,
millis: Long, millis: Long,
coroutineContext: CoroutineContext = EmptyCoroutineContext coroutineContext: CoroutineContext = EmptyCoroutineContext
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* https://github.com/mamoe/mirai/blob/master/LICENSE * https://github.com/mamoe/mirai/blob/master/LICENSE
*/ */
@file:Suppress("EXPERIMENTAL_API_USAGE") @file:Suppress("EXPERIMENTAL_API_USAGE", "NOTHING_TO_INLINE")
package net.mamoe.mirai.contact package net.mamoe.mirai.contact
...@@ -69,6 +69,10 @@ expect abstract class Contact() : CoroutineScope, ContactJavaHappyAPI { ...@@ -69,6 +69,10 @@ expect abstract class Contact() : CoroutineScope, ContactJavaHappyAPI {
*/ */
@JvmName("sendMessageSuspend") @JvmName("sendMessageSuspend")
@JvmSynthetic @JvmSynthetic
abstract suspend fun sendMessage(message: Message): MessageReceipt<out Contact>
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
@JvmSynthetic
abstract suspend fun sendMessage(message: MessageChain): MessageReceipt<out Contact> abstract suspend fun sendMessage(message: MessageChain): MessageReceipt<out Contact>
/** /**
...@@ -120,7 +124,7 @@ suspend inline fun Contact.recall(source: MessageSource) = this.bot.recall(sourc ...@@ -120,7 +124,7 @@ suspend inline fun Contact.recall(source: MessageSource) = this.bot.recall(sourc
* @see Bot.recallIn * @see Bot.recallIn
*/ */
@MiraiExperimentalAPI @MiraiExperimentalAPI
fun Contact.recallIn( inline fun Contact.recallIn(
message: MessageChain, message: MessageChain,
millis: Long, millis: Long,
coroutineContext: CoroutineContext = EmptyCoroutineContext coroutineContext: CoroutineContext = EmptyCoroutineContext
...@@ -129,7 +133,7 @@ fun Contact.recallIn( ...@@ -129,7 +133,7 @@ fun Contact.recallIn(
/** /**
* @see Bot.recallIn * @see Bot.recallIn
*/ */
fun Contact.recallIn( inline fun Contact.recallIn(
source: MessageSource, source: MessageSource,
millis: Long, millis: Long,
coroutineContext: CoroutineContext = EmptyCoroutineContext coroutineContext: CoroutineContext = EmptyCoroutineContext
...@@ -139,11 +143,5 @@ fun Contact.recallIn( ...@@ -139,11 +143,5 @@ fun Contact.recallIn(
* @see Contact.sendMessage * @see Contact.sendMessage
*/ */
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
suspend inline fun <C : Contact> C.sendMessage(message: Message): MessageReceipt<C> = suspend inline fun <C : Contact> C.sendMessage(plain: String): MessageReceipt<C> =
sendMessage(message.asMessageChain()) as? MessageReceipt<C> ?: error("Internal class cast mistake") sendMessage(plain.toMessage()) as? MessageReceipt<C> ?: error("Internal class cast mistake")
\ No newline at end of file
/**
* @see Contact.sendMessage
*/
@Suppress("UNCHECKED_CAST")
suspend inline fun <C : Contact> C.sendMessage(plain: String): MessageReceipt<C> = sendMessage(plain.toMessage())
\ No newline at end of file
...@@ -12,17 +12,13 @@ ...@@ -12,17 +12,13 @@
package net.mamoe.mirai.contact package net.mamoe.mirai.contact
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.serialization.SerialInfo
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.data.GroupAnnouncement
import net.mamoe.mirai.data.GroupAnnouncementList
import net.mamoe.mirai.data.MemberInfo import net.mamoe.mirai.data.MemberInfo
import net.mamoe.mirai.event.events.* import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.OfflineGroupImage import net.mamoe.mirai.message.data.OfflineGroupImage
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
...@@ -185,6 +181,10 @@ expect abstract class Group() : Contact, CoroutineScope { ...@@ -185,6 +181,10 @@ expect abstract class Group() : Contact, CoroutineScope {
*/ */
@JvmName("sendMessageSuspend") @JvmName("sendMessageSuspend")
@JvmSynthetic @JvmSynthetic
abstract override suspend fun sendMessage(message: Message): MessageReceipt<Group>
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
@JvmSynthetic
abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<Group> abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<Group>
/** /**
......
...@@ -14,6 +14,8 @@ package net.mamoe.mirai.contact ...@@ -14,6 +14,8 @@ package net.mamoe.mirai.contact
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.JavaHappyAPI import net.mamoe.mirai.JavaHappyAPI
import net.mamoe.mirai.event.events.* import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.WeakRefProperty import net.mamoe.mirai.utils.WeakRefProperty
import kotlin.jvm.JvmName import kotlin.jvm.JvmName
...@@ -130,6 +132,21 @@ expect abstract class Member() : MemberJavaHappyAPI { ...@@ -130,6 +132,21 @@ expect abstract class Member() : MemberJavaHappyAPI {
* @return `bot.hashCode() * 31 + id.hashCode()` * @return `bot.hashCode() * 31 + id.hashCode()`
*/ */
abstract override fun hashCode(): Int abstract override fun hashCode(): Int
/**
* 向这个对象发送消息.
*
* @see MessageSendEvent.FriendMessageSendEvent 发送好友信息事件, cancellable
* @see MessageSendEvent.GroupMessageSendEvent 发送群消息事件. cancellable
*
* @throws EventCancelledException 当发送消息事件被取消
* @throws IllegalStateException 发送群消息时若 [Bot] 被禁言抛出
*
* @return 消息回执. 可进行撤回 ([MessageReceipt.recall])
*/
@JvmSynthetic
@JvmName("sendMessageSuspend")
abstract override suspend fun sendMessage(message: Message): MessageReceipt<Member>
} }
/** /**
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
* https://github.com/mamoe/mirai/blob/master/LICENSE * https://github.com/mamoe/mirai/blob/master/LICENSE
*/ */
@file:Suppress("NOTHING_TO_INLINE")
package net.mamoe.mirai.contact package net.mamoe.mirai.contact
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
...@@ -34,38 +36,32 @@ enum class MemberPermission { ...@@ -34,38 +36,32 @@ enum class MemberPermission {
/** /**
* 是群主 * 是群主
*/ */
@Suppress("NOTHING_TO_INLINE")
inline fun MemberPermission.isOwner(): Boolean = this == MemberPermission.OWNER inline fun MemberPermission.isOwner(): Boolean = this == MemberPermission.OWNER
/** /**
* 是管理员 * 是管理员
*/ */
@Suppress("NOTHING_TO_INLINE")
inline fun MemberPermission.isAdministrator(): Boolean = this == MemberPermission.ADMINISTRATOR inline fun MemberPermission.isAdministrator(): Boolean = this == MemberPermission.ADMINISTRATOR
/** /**
* 是管理员或群主 * 是管理员或群主
*/ */
@Suppress("NOTHING_TO_INLINE")
inline fun MemberPermission.isOperator(): Boolean = isAdministrator() || isOwner() inline fun MemberPermission.isOperator(): Boolean = isAdministrator() || isOwner()
/** /**
* 是群主 * 是群主
*/ */
@Suppress("NOTHING_TO_INLINE")
inline fun Member.isOwner(): Boolean = this.permission.isOwner() inline fun Member.isOwner(): Boolean = this.permission.isOwner()
/** /**
* 是管理员 * 是管理员
*/ */
@Suppress("NOTHING_TO_INLINE")
inline fun Member.isAdministrator(): Boolean = this.permission.isAdministrator() inline fun Member.isAdministrator(): Boolean = this.permission.isAdministrator()
/** /**
* 是管理员或群主 * 是管理员或群主
*/ */
@Suppress("NOTHING_TO_INLINE")
inline fun Member.isOperator(): Boolean = this.permission.isOperator() inline fun Member.isOperator(): Boolean = this.permission.isOperator()
......
...@@ -22,6 +22,7 @@ import net.mamoe.mirai.event.events.ImageUploadEvent ...@@ -22,6 +22,7 @@ import net.mamoe.mirai.event.events.ImageUploadEvent
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.OfflineFriendImage import net.mamoe.mirai.message.data.OfflineFriendImage
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
...@@ -98,7 +99,11 @@ expect abstract class QQ() : Contact, CoroutineScope { ...@@ -98,7 +99,11 @@ expect abstract class QQ() : Contact, CoroutineScope {
*/ */
@JvmSynthetic @JvmSynthetic
@JvmName("sendMessageSuspend") @JvmName("sendMessageSuspend")
abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<QQ> abstract override suspend fun sendMessage(message: Message): MessageReceipt<out QQ>
@JvmSynthetic
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<out QQ>
/** /**
* 上传一个图片以备发送. * 上传一个图片以备发送.
......
...@@ -84,9 +84,6 @@ abstract class MessagePacketBase<TSender : QQ, TSubject : Contact> : Packet, Bot ...@@ -84,9 +84,6 @@ abstract class MessagePacketBase<TSender : QQ, TSubject : Contact> : Packet, Bot
* 对于好友消息事件, 这个方法将会给好友 ([subject]) 发送消息 * 对于好友消息事件, 这个方法将会给好友 ([subject]) 发送消息
* 对于群消息事件, 这个方法将会给群 ([subject]) 发送消息 * 对于群消息事件, 这个方法将会给群 ([subject]) 发送消息
*/ */
suspend inline fun reply(message: MessageChain): MessageReceipt<TSubject> =
subject.sendMessage(message) as MessageReceipt<TSubject>
suspend inline fun reply(message: Message): MessageReceipt<TSubject> = suspend inline fun reply(message: Message): MessageReceipt<TSubject> =
subject.sendMessage(message.asMessageChain()) as MessageReceipt<TSubject> subject.sendMessage(message.asMessageChain()) as MessageReceipt<TSubject>
...@@ -98,9 +95,6 @@ abstract class MessagePacketBase<TSender : QQ, TSubject : Contact> : Packet, Bot ...@@ -98,9 +95,6 @@ abstract class MessagePacketBase<TSender : QQ, TSubject : Contact> : Packet, Bot
@JvmName("reply1") @JvmName("reply1")
suspend inline fun Message.reply(): MessageReceipt<TSubject> = reply(this) suspend inline fun Message.reply(): MessageReceipt<TSubject> = reply(this)
@JvmName("reply1")
suspend inline fun MessageChain.reply(): MessageReceipt<TSubject> = reply(this)
// endregion // endregion
// region 撤回 // region 撤回
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
package net.mamoe.mirai.message.data package net.mamoe.mirai.message.data
import net.mamoe.mirai.contact.Contact import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.sendMessage
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import kotlin.jvm.JvmSynthetic import kotlin.jvm.JvmSynthetic
...@@ -109,8 +108,9 @@ interface Message { ...@@ -109,8 +108,9 @@ interface Message {
operator fun plus(another: CharSequence): CombinedMessage = this.followedBy(another.toString().toMessage()) operator fun plus(another: CharSequence): CombinedMessage = this.followedBy(another.toString().toMessage())
} }
@Suppress("UNCHECKED_CAST")
suspend inline fun <C : Contact> Message.sendTo(contact: C): MessageReceipt<C> { suspend inline fun <C : Contact> Message.sendTo(contact: C): MessageReceipt<C> {
return contact.sendMessage(this) return contact.sendMessage(this) as MessageReceipt<C>
} }
fun Message.repeat(count: Int): MessageChain { fun Message.repeat(count: Int): MessageChain {
......
...@@ -18,6 +18,7 @@ import net.mamoe.mirai.event.events.ImageUploadEvent ...@@ -18,6 +18,7 @@ import net.mamoe.mirai.event.events.ImageUploadEvent
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.OfflineImage import net.mamoe.mirai.message.data.OfflineImage
import net.mamoe.mirai.message.data.id import net.mamoe.mirai.message.data.id
...@@ -63,6 +64,10 @@ actual abstract class Contact : CoroutineScope, ContactJavaHappyAPI() { ...@@ -63,6 +64,10 @@ actual abstract class Contact : CoroutineScope, ContactJavaHappyAPI() {
*/ */
@JvmName("sendMessageSuspend") @JvmName("sendMessageSuspend")
@JvmSynthetic @JvmSynthetic
actual abstract suspend fun sendMessage(message: Message): MessageReceipt<out Contact>
@JvmSynthetic
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
actual abstract suspend fun sendMessage(message: MessageChain): MessageReceipt<out Contact> actual abstract suspend fun sendMessage(message: MessageChain): MessageReceipt<out Contact>
/** /**
......
...@@ -58,12 +58,12 @@ actual abstract class ContactJavaHappyAPI { ...@@ -58,12 +58,12 @@ actual abstract class ContactJavaHappyAPI {
*/ */
@Throws(EventCancelledException::class, IllegalStateException::class) @Throws(EventCancelledException::class, IllegalStateException::class)
@JvmName("sendMessage") @JvmName("sendMessage")
open fun __sendMessageBlockingForJava__(message: Message): MessageReceipt<Contact> { open fun __sendMessageBlockingForJava__(message: Message): MessageReceipt<out Contact> {
return runBlocking { sendMessage(message) } return runBlocking { sendMessage(message) }
} }
@JvmName("sendMessage") @JvmName("sendMessage")
open fun __sendMessageBlockingForJava__(message: String): MessageReceipt<Contact> { open fun __sendMessageBlockingForJava__(message: String): MessageReceipt<out Contact> {
return runBlocking { sendMessage(message) } return runBlocking { sendMessage(message) }
} }
...@@ -137,7 +137,7 @@ actual abstract class ContactJavaHappyAPI { ...@@ -137,7 +137,7 @@ actual abstract class ContactJavaHappyAPI {
* @see Contact.sendMessage * @see Contact.sendMessage
*/ */
@JvmName("sendMessageAsync") @JvmName("sendMessageAsync")
open fun __sendMessageAsyncForJava__(message: Message): Future<MessageReceipt<Contact>> { open fun __sendMessageAsyncForJava__(message: Message): Future<MessageReceipt<out Contact>> {
return future { sendMessage(message) } return future { sendMessage(message) }
} }
...@@ -146,7 +146,7 @@ actual abstract class ContactJavaHappyAPI { ...@@ -146,7 +146,7 @@ actual abstract class ContactJavaHappyAPI {
* @see Contact.sendMessage * @see Contact.sendMessage
*/ */
@JvmName("sendMessageAsync") @JvmName("sendMessageAsync")
open fun __sendMessageAsyncForJava__(message: String): Future<MessageReceipt<Contact>> { open fun __sendMessageAsyncForJava__(message: String): Future<MessageReceipt<out Contact>> {
return future { sendMessage(message) } return future { sendMessage(message) }
} }
...@@ -225,7 +225,7 @@ actual abstract class MemberJavaHappyAPI : QQ() { ...@@ -225,7 +225,7 @@ actual abstract class MemberJavaHappyAPI : QQ() {
* *
* 管理员可禁言成员, 群主可禁言管理员和群员. * 管理员可禁言成员, 群主可禁言管理员和群员.
* *
* @param durationSeconds 持续时间. 精确到秒. 范围区间表示为 `(0s, 30days]`. 超过范围则会抛出异常. * @param seconds 持续时间. 精确到秒. 范围区间表示为 `(0s, 30days]`. 超过范围则会抛出异常.
* @return 机器人无权限时返回 `false` * @return 机器人无权限时返回 `false`
* *
* @see Int.minutesToSeconds * @see Int.minutesToSeconds
...@@ -286,7 +286,7 @@ actual abstract class MemberJavaHappyAPI : QQ() { ...@@ -286,7 +286,7 @@ actual abstract class MemberJavaHappyAPI : QQ() {
* *
* 管理员可禁言成员, 群主可禁言管理员和群员. * 管理员可禁言成员, 群主可禁言管理员和群员.
* *
* @param durationSeconds 持续时间. 精确到秒. 范围区间表示为 `(0s, 30days]`. 超过范围则会抛出异常. * @param seconds 持续时间. 精确到秒. 范围区间表示为 `(0s, 30days]`. 超过范围则会抛出异常.
* @return 机器人无权限时返回 `false` * @return 机器人无权限时返回 `false`
* *
* @see Int.minutesToSeconds * @see Int.minutesToSeconds
......
...@@ -11,13 +11,12 @@ package net.mamoe.mirai.contact ...@@ -11,13 +11,12 @@ package net.mamoe.mirai.contact
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.data.GroupAnnouncement
import net.mamoe.mirai.data.GroupAnnouncementList
import net.mamoe.mirai.data.MemberInfo import net.mamoe.mirai.data.MemberInfo
import net.mamoe.mirai.event.events.* import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.OfflineGroupImage import net.mamoe.mirai.message.data.OfflineGroupImage
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
...@@ -182,6 +181,10 @@ actual abstract class Group : Contact(), CoroutineScope { ...@@ -182,6 +181,10 @@ actual abstract class Group : Contact(), CoroutineScope {
*/ */
@JvmName("sendMessageSuspend") @JvmName("sendMessageSuspend")
@JvmSynthetic @JvmSynthetic
actual abstract override suspend fun sendMessage(message: Message): MessageReceipt<Group>
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
@JvmSynthetic
actual abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<Group> actual abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<Group>
/** /**
......
...@@ -14,6 +14,10 @@ package net.mamoe.mirai.contact ...@@ -14,6 +14,10 @@ package net.mamoe.mirai.contact
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.JavaHappyAPI import net.mamoe.mirai.JavaHappyAPI
import net.mamoe.mirai.event.events.* import net.mamoe.mirai.event.events.*
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.WeakRefProperty import net.mamoe.mirai.utils.WeakRefProperty
...@@ -113,6 +117,21 @@ actual abstract class Member : MemberJavaHappyAPI() { ...@@ -113,6 +117,21 @@ actual abstract class Member : MemberJavaHappyAPI() {
@JvmSynthetic @JvmSynthetic
actual abstract suspend fun kick(message: String) actual abstract suspend fun kick(message: String)
/**
* 向这个对象发送消息.
*
* @see FriendMessageSendEvent 发送好友信息事件, cancellable
* @see GroupMessageSendEvent 发送群消息事件. cancellable
*
* @throws EventCancelledException 当发送消息事件被取消
* @throws IllegalStateException 发送群消息时若 [Bot] 被禁言抛出
*
* @return 消息回执. 可进行撤回 ([MessageReceipt.recall])
*/
@JvmName("sendMessageSuspend")
@JvmSynthetic
actual abstract override suspend fun sendMessage(message: Message): MessageReceipt<Member>
/** /**
* 当且仅当 `[other] is [Member] && [other].id == this.id && [other].group == this.group` 时为 true * 当且仅当 `[other] is [Member] && [other].id == this.id && [other].group == this.group` 时为 true
*/ */
......
...@@ -13,6 +13,7 @@ import net.mamoe.mirai.event.events.ImageUploadEvent ...@@ -13,6 +13,7 @@ import net.mamoe.mirai.event.events.ImageUploadEvent
import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.FriendMessageSendEvent
import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent import net.mamoe.mirai.event.events.MessageSendEvent.GroupMessageSendEvent
import net.mamoe.mirai.message.MessageReceipt import net.mamoe.mirai.message.MessageReceipt
import net.mamoe.mirai.message.data.Message
import net.mamoe.mirai.message.data.MessageChain import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.message.data.OfflineFriendImage import net.mamoe.mirai.message.data.OfflineFriendImage
import net.mamoe.mirai.utils.ExternalImage import net.mamoe.mirai.utils.ExternalImage
...@@ -88,7 +89,11 @@ actual abstract class QQ : Contact(), CoroutineScope { ...@@ -88,7 +89,11 @@ actual abstract class QQ : Contact(), CoroutineScope {
*/ */
@JvmName("sendMessageSuspend") @JvmName("sendMessageSuspend")
@JvmSynthetic @JvmSynthetic
actual abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<QQ> actual abstract override suspend fun sendMessage(message: Message): MessageReceipt<out QQ>
@JvmSynthetic
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
actual abstract override suspend fun sendMessage(message: MessageChain): MessageReceipt<out QQ>
/** /**
* 上传一个图片以备发送. * 上传一个图片以备发送.
......
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