mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-05 08:30:11 +08:00
Arise deprecation level, fix #353
This commit is contained in:
parent
2d1bc6578e
commit
e829939154
@ -7,6 +7,8 @@
|
|||||||
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@file:Suppress("DEPRECATION_ERROR")
|
||||||
|
|
||||||
package net.mamoe.mirai.qqandroid.message
|
package net.mamoe.mirai.qqandroid.message
|
||||||
|
|
||||||
import net.mamoe.mirai.message.data.*
|
import net.mamoe.mirai.message.data.*
|
||||||
|
@ -42,7 +42,7 @@ suspend inline fun <B : Bot> B.alsoLogin(): B = also { login() }
|
|||||||
* 有关 [Bot] 生命管理, 请查看 [BotConfiguration.inheritCoroutineContext]
|
* 有关 [Bot] 生命管理, 请查看 [BotConfiguration.inheritCoroutineContext]
|
||||||
*
|
*
|
||||||
* @see Contact 联系人
|
* @see Contact 联系人
|
||||||
* @see kotlinx.coroutines.isActive 判断 [Bot] 是否正常运行中. (协程正常运行) (但不能判断是否在线, 需使用 [isOnline])
|
* @see isActive 判断 [Bot] 是否正常运行中. (协程正常运行) (但不能判断是否在线, 需使用 [isOnline])
|
||||||
*
|
*
|
||||||
* @see BotFactory 构造 [Bot] 的工厂, [Bot] 唯一的构造方式.
|
* @see BotFactory 构造 [Bot] 的工厂, [Bot] 唯一的构造方式.
|
||||||
*/
|
*/
|
||||||
@ -66,15 +66,8 @@ abstract class Bot internal constructor(
|
|||||||
@Suppress("ObjectPropertyName")
|
@Suppress("ObjectPropertyName")
|
||||||
internal val _instances: LockFreeLinkedList<WeakRef<Bot>> = LockFreeLinkedList()
|
internal val _instances: LockFreeLinkedList<WeakRef<Bot>> = LockFreeLinkedList()
|
||||||
|
|
||||||
/**
|
|
||||||
* 复制一份此时的 [Bot] 实例列表.
|
|
||||||
*/
|
|
||||||
@PlannedRemoval("1.2.0")
|
@PlannedRemoval("1.2.0")
|
||||||
@Deprecated(
|
@Deprecated("for binary compatibility", level = DeprecationLevel.HIDDEN)
|
||||||
"use botInstances instead",
|
|
||||||
replaceWith = ReplaceWith("botInstances"),
|
|
||||||
level = DeprecationLevel.ERROR
|
|
||||||
)
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
val instances: List<WeakRef<Bot>>
|
val instances: List<WeakRef<Bot>>
|
||||||
get() = _instances.toList()
|
get() = _instances.toList()
|
||||||
@ -230,7 +223,8 @@ abstract class Bot internal constructor(
|
|||||||
@PlannedRemoval("1.2.0")
|
@PlannedRemoval("1.2.0")
|
||||||
@Deprecated(
|
@Deprecated(
|
||||||
"use extension.",
|
"use extension.",
|
||||||
replaceWith = ReplaceWith("image.queryUrl()", imports = ["net.mamoe.mirai.message.data.queryUrl"])
|
replaceWith = ReplaceWith("image.queryUrl()", imports = ["net.mamoe.mirai.message.data.queryUrl"]),
|
||||||
|
level = DeprecationLevel.ERROR
|
||||||
)
|
)
|
||||||
@JvmSynthetic
|
@JvmSynthetic
|
||||||
abstract suspend fun queryImageUrl(image: Image): String
|
abstract suspend fun queryImageUrl(image: Image): String
|
||||||
@ -259,7 +253,7 @@ abstract class Bot internal constructor(
|
|||||||
* @param event 好友验证的事件对象
|
* @param event 好友验证的事件对象
|
||||||
*/
|
*/
|
||||||
@PlannedRemoval("1.2.0")
|
@PlannedRemoval("1.2.0")
|
||||||
@Deprecated("use member function.", replaceWith = ReplaceWith("event.accept()"))
|
@Deprecated("use member function.", replaceWith = ReplaceWith("event.accept()"), level = DeprecationLevel.ERROR)
|
||||||
@JvmSynthetic
|
@JvmSynthetic
|
||||||
abstract suspend fun acceptNewFriendRequest(event: NewFriendRequestEvent)
|
abstract suspend fun acceptNewFriendRequest(event: NewFriendRequestEvent)
|
||||||
|
|
||||||
@ -270,7 +264,11 @@ abstract class Bot internal constructor(
|
|||||||
* @param blackList 拒绝后是否拉入黑名单
|
* @param blackList 拒绝后是否拉入黑名单
|
||||||
*/
|
*/
|
||||||
@PlannedRemoval("1.2.0")
|
@PlannedRemoval("1.2.0")
|
||||||
@Deprecated("use member function.", replaceWith = ReplaceWith("event.reject(blackList)"))
|
@Deprecated(
|
||||||
|
"use member function.",
|
||||||
|
replaceWith = ReplaceWith("event.reject(blackList)"),
|
||||||
|
level = DeprecationLevel.ERROR
|
||||||
|
)
|
||||||
@JvmSynthetic
|
@JvmSynthetic
|
||||||
abstract suspend fun rejectNewFriendRequest(event: NewFriendRequestEvent, blackList: Boolean = false)
|
abstract suspend fun rejectNewFriendRequest(event: NewFriendRequestEvent, blackList: Boolean = false)
|
||||||
|
|
||||||
@ -280,7 +278,7 @@ abstract class Bot internal constructor(
|
|||||||
* @param event 加群验证的事件对象
|
* @param event 加群验证的事件对象
|
||||||
*/
|
*/
|
||||||
@PlannedRemoval("1.2.0")
|
@PlannedRemoval("1.2.0")
|
||||||
@Deprecated("use member function.", replaceWith = ReplaceWith("event.accept()"))
|
@Deprecated("use member function.", replaceWith = ReplaceWith("event.accept()"), level = DeprecationLevel.ERROR)
|
||||||
@JvmSynthetic
|
@JvmSynthetic
|
||||||
abstract suspend fun acceptMemberJoinRequest(event: MemberJoinRequestEvent)
|
abstract suspend fun acceptMemberJoinRequest(event: MemberJoinRequestEvent)
|
||||||
|
|
||||||
@ -291,7 +289,11 @@ abstract class Bot internal constructor(
|
|||||||
* @param blackList 拒绝后是否拉入黑名单
|
* @param blackList 拒绝后是否拉入黑名单
|
||||||
*/
|
*/
|
||||||
@PlannedRemoval("1.2.0")
|
@PlannedRemoval("1.2.0")
|
||||||
@Deprecated("use member function.", replaceWith = ReplaceWith("event.reject(blackList)"))
|
@Deprecated(
|
||||||
|
"use member function.",
|
||||||
|
replaceWith = ReplaceWith("event.reject(blackList)"),
|
||||||
|
level = DeprecationLevel.ERROR
|
||||||
|
)
|
||||||
@JvmSynthetic
|
@JvmSynthetic
|
||||||
abstract suspend fun rejectMemberJoinRequest(event: MemberJoinRequestEvent, blackList: Boolean = false)
|
abstract suspend fun rejectMemberJoinRequest(event: MemberJoinRequestEvent, blackList: Boolean = false)
|
||||||
|
|
||||||
@ -302,7 +304,11 @@ abstract class Bot internal constructor(
|
|||||||
* @param blackList 忽略后是否拉入黑名单
|
* @param blackList 忽略后是否拉入黑名单
|
||||||
*/
|
*/
|
||||||
@PlannedRemoval("1.2.0")
|
@PlannedRemoval("1.2.0")
|
||||||
@Deprecated("use member function.", replaceWith = ReplaceWith("event.ignore(blackList)"))
|
@Deprecated(
|
||||||
|
"use member function.",
|
||||||
|
replaceWith = ReplaceWith("event.ignore(blackList)"),
|
||||||
|
level = DeprecationLevel.ERROR
|
||||||
|
)
|
||||||
@JvmSynthetic
|
@JvmSynthetic
|
||||||
abstract suspend fun ignoreMemberJoinRequest(event: MemberJoinRequestEvent, blackList: Boolean = false)
|
abstract suspend fun ignoreMemberJoinRequest(event: MemberJoinRequestEvent, blackList: Boolean = false)
|
||||||
|
|
||||||
@ -312,7 +318,7 @@ abstract class Bot internal constructor(
|
|||||||
* @param event 邀请入群的事件对象
|
* @param event 邀请入群的事件对象
|
||||||
*/
|
*/
|
||||||
@PlannedRemoval("1.2.0")
|
@PlannedRemoval("1.2.0")
|
||||||
@Deprecated("use member function.", replaceWith = ReplaceWith("event.accept()"))
|
@Deprecated("use member function.", replaceWith = ReplaceWith("event.accept()"), level = DeprecationLevel.ERROR)
|
||||||
@JvmSynthetic
|
@JvmSynthetic
|
||||||
abstract suspend fun acceptInvitedJoinGroupRequest(event: BotInvitedJoinGroupRequestEvent)
|
abstract suspend fun acceptInvitedJoinGroupRequest(event: BotInvitedJoinGroupRequestEvent)
|
||||||
|
|
||||||
@ -322,15 +328,15 @@ abstract class Bot internal constructor(
|
|||||||
* @param event 邀请入群的事件对象
|
* @param event 邀请入群的事件对象
|
||||||
*/
|
*/
|
||||||
@PlannedRemoval("1.2.0")
|
@PlannedRemoval("1.2.0")
|
||||||
@Deprecated("use member function.", replaceWith = ReplaceWith("event.ignore()"))
|
@Deprecated("use member function.", replaceWith = ReplaceWith("event.ignore()"), level = DeprecationLevel.ERROR)
|
||||||
@JvmSynthetic
|
@JvmSynthetic
|
||||||
abstract suspend fun ignoreInvitedJoinGroupRequest(event: BotInvitedJoinGroupRequestEvent)
|
abstract suspend fun ignoreInvitedJoinGroupRequest(event: BotInvitedJoinGroupRequestEvent)
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关闭这个 [Bot], 立即取消 [Bot] 的 [kotlinx.coroutines.SupervisorJob].
|
* 关闭这个 [Bot], 立即取消 [Bot] 的 [SupervisorJob].
|
||||||
* 之后 [kotlinx.coroutines.isActive] 将会返回 `false`.
|
* 之后 [isActive] 将会返回 `false`.
|
||||||
*
|
*
|
||||||
* **注意:** 不可重新登录. 必须重新实例化一个 [Bot].
|
* **注意:** 不可重新登录. 必须重新实例化一个 [Bot].
|
||||||
*
|
*
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
@file:JvmMultifileClass
|
@file:JvmMultifileClass
|
||||||
@file:JvmName("BotEventsKt")
|
@file:JvmName("BotEventsKt")
|
||||||
@file:Suppress("unused", "FunctionName", "INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
|
@file:Suppress("unused", "FunctionName", "INVISIBLE_REFERENCE", "INVISIBLE_MEMBER", "DEPRECATION_ERROR")
|
||||||
|
|
||||||
package net.mamoe.mirai.event.events
|
package net.mamoe.mirai.event.events
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ internal expect interface MessageEventPlatformExtensions<out TSender : User, out
|
|||||||
@Deprecated(
|
@Deprecated(
|
||||||
message = "use MessageEvent",
|
message = "use MessageEvent",
|
||||||
replaceWith = ReplaceWith("MessageEvent", "net.mamoe.mirai.message.MessageEvent"),
|
replaceWith = ReplaceWith("MessageEvent", "net.mamoe.mirai.message.MessageEvent"),
|
||||||
level = DeprecationLevel.ERROR
|
level = DeprecationLevel.HIDDEN
|
||||||
)
|
)
|
||||||
abstract class MessagePacketBase<out TSender : User, out TSubject : Contact> : Packet, BotEvent, AbstractEvent() {
|
abstract class MessagePacketBase<out TSender : User, out TSubject : Contact> : Packet, BotEvent, AbstractEvent() {
|
||||||
abstract override val bot: Bot
|
abstract override val bot: Bot
|
||||||
@ -191,7 +191,7 @@ abstract class MessagePacketBase<out TSender : User, out TSubject : Contact> : P
|
|||||||
@Deprecated(
|
@Deprecated(
|
||||||
message = "Ambiguous name. Use MessageEvent instead",
|
message = "Ambiguous name. Use MessageEvent instead",
|
||||||
replaceWith = ReplaceWith("MessageEvent", "net.mamoe.mirai.message.MessageEvent"),
|
replaceWith = ReplaceWith("MessageEvent", "net.mamoe.mirai.message.MessageEvent"),
|
||||||
level = DeprecationLevel.ERROR
|
level = DeprecationLevel.HIDDEN
|
||||||
)
|
)
|
||||||
@Suppress("DEPRECATION_ERROR")
|
@Suppress("DEPRECATION_ERROR")
|
||||||
abstract class MessagePacket : MessagePacketBase<User, Contact>(),
|
abstract class MessagePacket : MessagePacketBase<User, Contact>(),
|
||||||
@ -209,7 +209,7 @@ abstract class MessagePacket : MessagePacketBase<User, Contact>(),
|
|||||||
@Deprecated(
|
@Deprecated(
|
||||||
message = "Ambiguous name. Use MessageEvent instead",
|
message = "Ambiguous name. Use MessageEvent instead",
|
||||||
replaceWith = ReplaceWith("MessageEvent", "net.mamoe.mirai.message.MessageEvent"),
|
replaceWith = ReplaceWith("MessageEvent", "net.mamoe.mirai.message.MessageEvent"),
|
||||||
level = DeprecationLevel.ERROR
|
level = DeprecationLevel.HIDDEN
|
||||||
)
|
)
|
||||||
@Suppress("DEPRECATION_ERROR")
|
@Suppress("DEPRECATION_ERROR")
|
||||||
abstract class ContactMessage : MessagePacket(),
|
abstract class ContactMessage : MessagePacket(),
|
||||||
@ -227,7 +227,7 @@ abstract class ContactMessage : MessagePacket(),
|
|||||||
@Deprecated(
|
@Deprecated(
|
||||||
message = "Ambiguous name. Use FriendMessageEvent instead",
|
message = "Ambiguous name. Use FriendMessageEvent instead",
|
||||||
replaceWith = ReplaceWith("FriendMessageEvent", "net.mamoe.mirai.message.FriendMessageEvent"),
|
replaceWith = ReplaceWith("FriendMessageEvent", "net.mamoe.mirai.message.FriendMessageEvent"),
|
||||||
level = DeprecationLevel.ERROR
|
level = DeprecationLevel.HIDDEN
|
||||||
)
|
)
|
||||||
@Suppress("DEPRECATION_ERROR")
|
@Suppress("DEPRECATION_ERROR")
|
||||||
abstract class FriendMessage : MessageEvent() {
|
abstract class FriendMessage : MessageEvent() {
|
||||||
@ -244,7 +244,7 @@ abstract class FriendMessage : MessageEvent() {
|
|||||||
@Deprecated(
|
@Deprecated(
|
||||||
message = "Ambiguous name. Use GroupMessageEvent instead",
|
message = "Ambiguous name. Use GroupMessageEvent instead",
|
||||||
replaceWith = ReplaceWith("GroupMessageEvent", "net.mamoe.mirai.message.GroupMessageEvent"),
|
replaceWith = ReplaceWith("GroupMessageEvent", "net.mamoe.mirai.message.GroupMessageEvent"),
|
||||||
level = DeprecationLevel.ERROR
|
level = DeprecationLevel.HIDDEN
|
||||||
)
|
)
|
||||||
@Suppress("DEPRECATION_ERROR")
|
@Suppress("DEPRECATION_ERROR")
|
||||||
abstract class GroupMessage : MessageEvent() {
|
abstract class GroupMessage : MessageEvent() {
|
||||||
@ -262,7 +262,7 @@ abstract class GroupMessage : MessageEvent() {
|
|||||||
@Deprecated(
|
@Deprecated(
|
||||||
message = "Ambiguous name. Use TempMessageEvent instead",
|
message = "Ambiguous name. Use TempMessageEvent instead",
|
||||||
replaceWith = ReplaceWith("TempMessageEvent", "net.mamoe.mirai.message.TempMessageEvent"),
|
replaceWith = ReplaceWith("TempMessageEvent", "net.mamoe.mirai.message.TempMessageEvent"),
|
||||||
level = DeprecationLevel.ERROR
|
level = DeprecationLevel.HIDDEN
|
||||||
)
|
)
|
||||||
abstract class TempMessage : MessageEvent() {
|
abstract class TempMessage : MessageEvent() {
|
||||||
abstract override val bot: Bot
|
abstract override val bot: Bot
|
||||||
|
@ -15,18 +15,18 @@
|
|||||||
"unused",
|
"unused",
|
||||||
"WRONG_MODIFIER_CONTAINING_DECLARATION",
|
"WRONG_MODIFIER_CONTAINING_DECLARATION",
|
||||||
"DEPRECATION",
|
"DEPRECATION",
|
||||||
"UnusedImport"
|
"UnusedImport",
|
||||||
|
"EXPOSED_SUPER_CLASS",
|
||||||
|
"DEPRECATION_ERROR"
|
||||||
)
|
)
|
||||||
|
|
||||||
package net.mamoe.mirai.message.data
|
package net.mamoe.mirai.message.data
|
||||||
|
|
||||||
import kotlinx.io.core.copyTo
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
import net.mamoe.mirai.Bot
|
import net.mamoe.mirai.Bot
|
||||||
import net.mamoe.mirai.contact.Contact
|
import net.mamoe.mirai.contact.Contact
|
||||||
import net.mamoe.mirai.contact.Group
|
|
||||||
import net.mamoe.mirai.message.code.CodableMessage
|
import net.mamoe.mirai.message.code.CodableMessage
|
||||||
import net.mamoe.mirai.utils.*
|
import net.mamoe.mirai.utils.ExternalImage
|
||||||
|
import net.mamoe.mirai.utils.sendImage
|
||||||
import kotlin.js.JsName
|
import kotlin.js.JsName
|
||||||
import kotlin.jvm.JvmMultifileClass
|
import kotlin.jvm.JvmMultifileClass
|
||||||
import kotlin.jvm.JvmName
|
import kotlin.jvm.JvmName
|
||||||
@ -100,34 +100,6 @@ expect interface Image : Message, MessageContent, @SinceMirai("1.1.0") CodableMe
|
|||||||
internal val DoNotImplementThisClass: Nothing?
|
internal val DoNotImplementThisClass: Nothing?
|
||||||
}
|
}
|
||||||
|
|
||||||
internal interface ConstOriginUrlAware : Image {
|
|
||||||
val originUrl: String
|
|
||||||
}
|
|
||||||
|
|
||||||
internal interface DeferredOriginUrlAware : Image {
|
|
||||||
fun getUrl(bot: Bot): String
|
|
||||||
}
|
|
||||||
|
|
||||||
internal interface SuspendDeferredOriginUrlAware : Image {
|
|
||||||
suspend fun getUrl(bot: Bot): String
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 由 [ExternalImage] 委托的 [Image] 类型. 用于 [ExternalImage.plus]
|
|
||||||
*/
|
|
||||||
@SinceMirai("1.1.0")
|
|
||||||
@MiraiExperimentalAPI("Will be renamed to OfflineImage on 1.2.0")
|
|
||||||
@Suppress("DEPRECATION_ERROR")
|
|
||||||
internal class ExperimentalDeferredImage internal constructor(
|
|
||||||
val externalImage: ExternalImage
|
|
||||||
) : AbstractImage(), SuspendDeferredOriginUrlAware {
|
|
||||||
override suspend fun getUrl(bot: Bot): String {
|
|
||||||
TODO()
|
|
||||||
}
|
|
||||||
|
|
||||||
override val imageId: String = externalImage.calculateImageResourceId()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算图片的 md5 校验值.
|
* 计算图片的 md5 校验值.
|
||||||
*
|
*
|
||||||
@ -142,15 +114,27 @@ val Image.md5: ByteArray
|
|||||||
* 好友图片
|
* 好友图片
|
||||||
*
|
*
|
||||||
* [imageId] 形如 `/f8f1ab55-bf8e-4236-b55e-955848d7069f` (37 长度) 或 `/000000000-3814297509-BFB7027B9354B8F899A062061D74E206` (54 长度)
|
* [imageId] 形如 `/f8f1ab55-bf8e-4236-b55e-955848d7069f` (37 长度) 或 `/000000000-3814297509-BFB7027B9354B8F899A062061D74E206` (54 长度)
|
||||||
*/ // NotOnlineImage
|
*/
|
||||||
@PlannedRemoval("1.2.0") // make internal
|
// NotOnlineImage
|
||||||
@Suppress("DEPRECATION_ERROR")
|
abstract class FriendImage internal constructor() : AbstractImage() { // change to sealed in the future.
|
||||||
sealed class FriendImage : AbstractImage() {
|
|
||||||
companion object Key : Message.Key<FriendImage> {
|
companion object Key : Message.Key<FriendImage> {
|
||||||
override val typeName: String get() = "FriendImage"
|
override val typeName: String get() = "FriendImage"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 群图片.
|
||||||
|
*
|
||||||
|
* @property imageId 形如 `{01E9451B-70ED-EAE3-B37C-101F1EEBF5B5}.mirai` (后缀一定为 `".mirai"`)
|
||||||
|
* @see Image 查看更多说明
|
||||||
|
*/
|
||||||
|
// CustomFace
|
||||||
|
abstract class GroupImage internal constructor() : AbstractImage() { // change to sealed in the future.
|
||||||
|
companion object Key : Message.Key<GroupImage> {
|
||||||
|
override val typeName: String get() = "GroupImage"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 好友图片 ID 正则表达式
|
* 好友图片 ID 正则表达式
|
||||||
*
|
*
|
||||||
@ -217,187 +201,3 @@ suspend fun Image.queryUrl(): String {
|
|||||||
else -> error("Internal error: unsupported Image class: ${this::class}")
|
else -> error("Internal error: unsupported Image class: ${this::class}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val firstOnlineBotInstance: Bot get() = Bot.botInstancesSequence.firstOrNull() ?: error("No Bot available")
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////
|
|
||||||
///// 以下 API 已弃用 /////
|
|
||||||
/////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
// region 已启用
|
|
||||||
|
|
||||||
internal const val ONLINE_OFFLINE_DEPRECATION_MESSAGE = """
|
|
||||||
自 1.0.0 起, mirai 已经能正常处理离线图片和在线图片的下载链接等功能.
|
|
||||||
使用者无需考虑一个图片为在线图片还是离线图片, 只需使用 Image 类型.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
@PlannedRemoval("1.2.0") // 改为 internal
|
|
||||||
@Deprecated(
|
|
||||||
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
|
||||||
level = DeprecationLevel.WARNING,
|
|
||||||
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
|
||||||
)
|
|
||||||
@Suppress("EXPOSED_SUPER_INTERFACE")
|
|
||||||
interface OnlineImage : Image, ConstOriginUrlAware {
|
|
||||||
companion object Key : Message.Key<OnlineImage> {
|
|
||||||
override val typeName: String get() = "OnlineImage"
|
|
||||||
}
|
|
||||||
|
|
||||||
override val originUrl: String
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 离线的图片, 即为客户端主动上传到服务器而获得的 [Image] 实例.
|
|
||||||
* 不能直接获取它在服务器上的链接. 需要通过 [Bot.queryImageUrl] 查询
|
|
||||||
*
|
|
||||||
* 一般由 [Contact.uploadImage] 得到
|
|
||||||
*/
|
|
||||||
@PlannedRemoval("1.2.0") // 改为 internal
|
|
||||||
@Deprecated(
|
|
||||||
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
|
||||||
level = DeprecationLevel.WARNING,
|
|
||||||
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
|
||||||
)
|
|
||||||
interface OfflineImage : Image {
|
|
||||||
companion object Key : Message.Key<OfflineImage> {
|
|
||||||
override val typeName: String get() = "OfflineImage"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@PlannedRemoval("1.2.0") // 删除
|
|
||||||
@Deprecated(
|
|
||||||
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
|
||||||
level = DeprecationLevel.HIDDEN
|
|
||||||
)
|
|
||||||
@JvmSynthetic
|
|
||||||
suspend fun OfflineImage.queryUrl(): String {
|
|
||||||
return Bot._instances.peekFirst()?.get()?.queryImageUrl(this) ?: error("No Bot available to query image url")
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过 [Group.uploadImage] 上传得到的 [GroupImage]. 它的链接需要查询 [Bot.queryImageUrl]
|
|
||||||
*
|
|
||||||
* @param imageId 参考 [Image.imageId]
|
|
||||||
*/
|
|
||||||
@PlannedRemoval("1.2.0") // 改为 internal
|
|
||||||
@Deprecated(
|
|
||||||
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
|
||||||
level = DeprecationLevel.WARNING,
|
|
||||||
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
|
||||||
)
|
|
||||||
@Serializable
|
|
||||||
data class OfflineGroupImage(
|
|
||||||
override val imageId: String
|
|
||||||
) : GroupImage(), OfflineImage, DeferredOriginUrlAware {
|
|
||||||
override fun getUrl(bot: Bot): String {
|
|
||||||
return "http://gchat.qpic.cn/gchatpic_new/${bot.id}/0-0-${imageId.substring(1..36)
|
|
||||||
.replace("-", "")}/0?term=2"
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
require(imageId matches GROUP_IMAGE_ID_REGEX) {
|
|
||||||
"Illegal imageId. It must matches GROUP_IMAGE_ID_REGEX"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 接收消息时获取到的 [GroupImage]. 它可以直接获取下载链接 [originUrl]
|
|
||||||
*/
|
|
||||||
@PlannedRemoval("1.2.0") // 改为 internal
|
|
||||||
@Deprecated(
|
|
||||||
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
|
||||||
level = DeprecationLevel.WARNING,
|
|
||||||
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
|
||||||
)
|
|
||||||
abstract class OnlineGroupImage : GroupImage(), OnlineImage
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过 [Group.uploadImage] 上传得到的 [GroupImage]. 它的链接需要查询 [Bot.queryImageUrl]
|
|
||||||
*
|
|
||||||
* @param imageId 参考 [Image.imageId]
|
|
||||||
*/
|
|
||||||
@PlannedRemoval("1.2.0") // 改为 internal
|
|
||||||
@Deprecated(
|
|
||||||
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
|
||||||
level = DeprecationLevel.WARNING,
|
|
||||||
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
|
||||||
)
|
|
||||||
@Serializable
|
|
||||||
data class OfflineFriendImage(
|
|
||||||
override val imageId: String
|
|
||||||
) : FriendImage(), OfflineImage, DeferredOriginUrlAware {
|
|
||||||
override fun getUrl(bot: Bot): String {
|
|
||||||
return "http://c2cpicdw.qpic.cn/offpic_new/${bot.id}/${this.imageId}/0?term=2"
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
require(imageId matches FRIEND_IMAGE_ID_REGEX_1 || imageId matches FRIEND_IMAGE_ID_REGEX_2) {
|
|
||||||
"Illegal imageId. It must matches either FRIEND_IMAGE_ID_REGEX_1 or FRIEND_IMAGE_ID_REGEX_2"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 接收消息时获取到的 [FriendImage]. 它可以直接获取下载链接 [originUrl]
|
|
||||||
*/
|
|
||||||
@PlannedRemoval("1.2.0") // 改为 internal
|
|
||||||
@Deprecated(
|
|
||||||
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
|
||||||
level = DeprecationLevel.WARNING,
|
|
||||||
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
|
||||||
)
|
|
||||||
abstract class OnlineFriendImage : FriendImage(), OnlineImage
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 群图片.
|
|
||||||
*
|
|
||||||
* @property imageId 形如 `{01E9451B-70ED-EAE3-B37C-101F1EEBF5B5}.mirai` (后缀一定为 `".mirai"`)
|
|
||||||
* @see Image 查看更多说明
|
|
||||||
*/
|
|
||||||
@PlannedRemoval("1.2.0") // make internal
|
|
||||||
@Suppress("DEPRECATION_ERROR")
|
|
||||||
// CustomFace
|
|
||||||
sealed class GroupImage : AbstractImage() {
|
|
||||||
companion object Key : Message.Key<GroupImage> {
|
|
||||||
override val typeName: String get() = "GroupImage"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// endregion
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 所有 [Image] 实现的基类.
|
|
||||||
*/
|
|
||||||
@PlannedRemoval("1.2.0") // make internal
|
|
||||||
@Deprecated(
|
|
||||||
"This is internal API. Use Image instead",
|
|
||||||
level = DeprecationLevel.HIDDEN, // so that others can't see this class
|
|
||||||
replaceWith = ReplaceWith("Image")
|
|
||||||
)
|
|
||||||
@MiraiInternalAPI("Use Image instead")
|
|
||||||
sealed class AbstractImage : Image {
|
|
||||||
@Deprecated(
|
|
||||||
"""
|
|
||||||
不要自行实现 Image, 它必须由协议模块实现, 否则会无法发送也无法解析.
|
|
||||||
""", level = DeprecationLevel.HIDDEN
|
|
||||||
)
|
|
||||||
@Suppress("PropertyName", "DeprecatedCallableAddReplaceWith")
|
|
||||||
@get:JvmSynthetic
|
|
||||||
final override val DoNotImplementThisClass: Nothing?
|
|
||||||
get() = error("stub")
|
|
||||||
|
|
||||||
private var _stringValue: String? = null
|
|
||||||
get() = field ?: kotlin.run {
|
|
||||||
field = "[mirai:image:$imageId]"
|
|
||||||
field
|
|
||||||
}
|
|
||||||
|
|
||||||
final override fun toString(): String = _stringValue!!
|
|
||||||
final override fun contentToString(): String = "[图片]"
|
|
||||||
}
|
|
||||||
|
@ -0,0 +1,167 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2020 Mamoe Technologies and contributors.
|
||||||
|
*
|
||||||
|
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
|
||||||
|
* Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
|
||||||
|
*
|
||||||
|
* https://github.com/mamoe/mirai/blob/master/LICENSE
|
||||||
|
*/
|
||||||
|
|
||||||
|
@file:JvmMultifileClass
|
||||||
|
@file:JvmName("MessageUtils")
|
||||||
|
|
||||||
|
@file:Suppress(
|
||||||
|
"EXPERIMENTAL_API_USAGE",
|
||||||
|
"unused",
|
||||||
|
"WRONG_MODIFIER_CONTAINING_DECLARATION",
|
||||||
|
"DEPRECATION",
|
||||||
|
"UnusedImport",
|
||||||
|
"EXPOSED_SUPER_CLASS",
|
||||||
|
"DEPRECATION_ERROR"
|
||||||
|
)
|
||||||
|
|
||||||
|
package net.mamoe.mirai.message.data
|
||||||
|
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import net.mamoe.mirai.Bot
|
||||||
|
import net.mamoe.mirai.contact.Contact
|
||||||
|
import net.mamoe.mirai.contact.Group
|
||||||
|
import net.mamoe.mirai.utils.PlannedRemoval
|
||||||
|
import kotlin.jvm.JvmMultifileClass
|
||||||
|
import kotlin.jvm.JvmName
|
||||||
|
import kotlin.jvm.JvmSynthetic
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////
|
||||||
|
///// 以下 API 已弃用 /////
|
||||||
|
/////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
// region 已启用
|
||||||
|
|
||||||
|
internal const val ONLINE_OFFLINE_DEPRECATION_MESSAGE = """
|
||||||
|
自 1.0.0 起, mirai 已经能正常处理离线图片和在线图片的下载链接等功能.
|
||||||
|
使用者无需考虑一个图片为在线图片还是离线图片, 只需使用 Image 类型.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
@PlannedRemoval("1.2.0") // 改为 internal
|
||||||
|
@Deprecated(
|
||||||
|
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
||||||
|
level = DeprecationLevel.ERROR,
|
||||||
|
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
||||||
|
)
|
||||||
|
@Suppress("EXPOSED_SUPER_INTERFACE")
|
||||||
|
interface OnlineImage : Image, ConstOriginUrlAware {
|
||||||
|
companion object Key : Message.Key<OnlineImage> {
|
||||||
|
override val typeName: String get() = "OnlineImage"
|
||||||
|
}
|
||||||
|
|
||||||
|
override val originUrl: String
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 离线的图片, 即为客户端主动上传到服务器而获得的 [Image] 实例.
|
||||||
|
* 不能直接获取它在服务器上的链接. 需要通过 [Bot.queryImageUrl] 查询
|
||||||
|
*
|
||||||
|
* 一般由 [Contact.uploadImage] 得到
|
||||||
|
*/
|
||||||
|
@PlannedRemoval("1.2.0") // 改为 internal
|
||||||
|
@Deprecated(
|
||||||
|
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
||||||
|
level = DeprecationLevel.ERROR,
|
||||||
|
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
||||||
|
)
|
||||||
|
interface OfflineImage : Image {
|
||||||
|
companion object Key : Message.Key<OfflineImage> {
|
||||||
|
override val typeName: String get() = "OfflineImage"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PlannedRemoval("1.2.0") // 删除
|
||||||
|
@Deprecated(
|
||||||
|
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
||||||
|
level = DeprecationLevel.HIDDEN
|
||||||
|
)
|
||||||
|
@JvmSynthetic
|
||||||
|
suspend fun OfflineImage.queryUrl(): String {
|
||||||
|
return Bot._instances.peekFirst()?.get()?.queryImageUrl(this) ?: error("No Bot available to query image url")
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过 [Group.uploadImage] 上传得到的 [GroupImage]. 它的链接需要查询 [Bot.queryImageUrl]
|
||||||
|
*
|
||||||
|
* @param imageId 参考 [Image.imageId]
|
||||||
|
*/
|
||||||
|
@PlannedRemoval("1.2.0") // 改为 internal
|
||||||
|
@Deprecated(
|
||||||
|
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
||||||
|
level = DeprecationLevel.ERROR,
|
||||||
|
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
||||||
|
)
|
||||||
|
@Serializable
|
||||||
|
data class OfflineGroupImage(
|
||||||
|
override val imageId: String
|
||||||
|
) : GroupImage(), OfflineImage, DeferredOriginUrlAware {
|
||||||
|
override fun getUrl(bot: Bot): String {
|
||||||
|
return "http://gchat.qpic.cn/gchatpic_new/${bot.id}/0-0-${imageId.substring(1..36)
|
||||||
|
.replace("-", "")}/0?term=2"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
require(imageId matches GROUP_IMAGE_ID_REGEX) {
|
||||||
|
"Illegal imageId. It must matches GROUP_IMAGE_ID_REGEX"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 接收消息时获取到的 [GroupImage]. 它可以直接获取下载链接 [originUrl]
|
||||||
|
*/
|
||||||
|
@PlannedRemoval("1.2.0") // 改为 internal
|
||||||
|
@Deprecated(
|
||||||
|
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
||||||
|
level = DeprecationLevel.ERROR,
|
||||||
|
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
||||||
|
)
|
||||||
|
abstract class OnlineGroupImage : GroupImage(), OnlineImage
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过 [Group.uploadImage] 上传得到的 [GroupImage]. 它的链接需要查询 [Bot.queryImageUrl]
|
||||||
|
*
|
||||||
|
* @param imageId 参考 [Image.imageId]
|
||||||
|
*/
|
||||||
|
@PlannedRemoval("1.2.0") // 改为 internal
|
||||||
|
@Deprecated(
|
||||||
|
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
||||||
|
level = DeprecationLevel.ERROR,
|
||||||
|
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
||||||
|
)
|
||||||
|
@Serializable
|
||||||
|
data class OfflineFriendImage(
|
||||||
|
override val imageId: String
|
||||||
|
) : FriendImage(), OfflineImage, DeferredOriginUrlAware {
|
||||||
|
override fun getUrl(bot: Bot): String {
|
||||||
|
return "http://c2cpicdw.qpic.cn/offpic_new/${bot.id}/${this.imageId}/0?term=2"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
require(imageId matches FRIEND_IMAGE_ID_REGEX_1 || imageId matches FRIEND_IMAGE_ID_REGEX_2) {
|
||||||
|
"Illegal imageId. It must matches either FRIEND_IMAGE_ID_REGEX_1 or FRIEND_IMAGE_ID_REGEX_2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 接收消息时获取到的 [FriendImage]. 它可以直接获取下载链接 [originUrl]
|
||||||
|
*/
|
||||||
|
@PlannedRemoval("1.2.0") // 改为 internal
|
||||||
|
@Deprecated(
|
||||||
|
ONLINE_OFFLINE_DEPRECATION_MESSAGE,
|
||||||
|
level = DeprecationLevel.ERROR,
|
||||||
|
replaceWith = ReplaceWith("Image", "net.mamoe.mirai.message.data.Image")
|
||||||
|
)
|
||||||
|
abstract class OnlineFriendImage : FriendImage(), OnlineImage
|
||||||
|
|
||||||
|
// endregion
|
@ -13,15 +13,77 @@
|
|||||||
|
|
||||||
package net.mamoe.mirai.message.data
|
package net.mamoe.mirai.message.data
|
||||||
|
|
||||||
|
import net.mamoe.mirai.Bot
|
||||||
|
import net.mamoe.mirai.utils.ExternalImage
|
||||||
import net.mamoe.mirai.utils.MiraiExperimentalAPI
|
import net.mamoe.mirai.utils.MiraiExperimentalAPI
|
||||||
|
import net.mamoe.mirai.utils.SinceMirai
|
||||||
import kotlin.jvm.JvmMultifileClass
|
import kotlin.jvm.JvmMultifileClass
|
||||||
import kotlin.jvm.JvmName
|
import kotlin.jvm.JvmName
|
||||||
import kotlin.jvm.JvmSynthetic
|
import kotlin.jvm.JvmSynthetic
|
||||||
import kotlin.native.concurrent.SharedImmutable
|
import kotlin.native.concurrent.SharedImmutable
|
||||||
|
|
||||||
|
// region image
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所有 [Image] 实现的基类.
|
||||||
|
*/
|
||||||
|
internal abstract class AbstractImage : Image { // make sealed in 1.3.0 ?
|
||||||
|
@Deprecated(
|
||||||
|
"""
|
||||||
|
不要自行实现 Image, 它必须由协议模块实现, 否则会无法发送也无法解析.
|
||||||
|
""", level = DeprecationLevel.HIDDEN
|
||||||
|
)
|
||||||
|
@Suppress("PropertyName", "DeprecatedCallableAddReplaceWith")
|
||||||
|
@get:JvmSynthetic
|
||||||
|
final override val DoNotImplementThisClass: Nothing?
|
||||||
|
get() = error("stub")
|
||||||
|
|
||||||
|
private var _stringValue: String? = null
|
||||||
|
get() = field ?: kotlin.run {
|
||||||
|
field = "[mirai:image:$imageId]"
|
||||||
|
field
|
||||||
|
}
|
||||||
|
|
||||||
|
final override fun toString(): String = _stringValue!!
|
||||||
|
final override fun contentToString(): String = "[图片]"
|
||||||
|
}
|
||||||
|
|
||||||
|
internal interface ConstOriginUrlAware : Image {
|
||||||
|
val originUrl: String
|
||||||
|
}
|
||||||
|
|
||||||
|
internal interface DeferredOriginUrlAware : Image {
|
||||||
|
fun getUrl(bot: Bot): String
|
||||||
|
}
|
||||||
|
|
||||||
|
internal interface SuspendDeferredOriginUrlAware : Image {
|
||||||
|
suspend fun getUrl(bot: Bot): String
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 由 [ExternalImage] 委托的 [Image] 类型.
|
||||||
|
*/
|
||||||
|
@SinceMirai("1.1.0")
|
||||||
|
@MiraiExperimentalAPI("Will be renamed to OfflineImage on 1.2.0")
|
||||||
|
@Suppress("DEPRECATION_ERROR")
|
||||||
|
internal class ExperimentalDeferredImage internal constructor(
|
||||||
|
@Suppress("CanBeParameter") private val externalImage: ExternalImage // for future use
|
||||||
|
) : AbstractImage(), SuspendDeferredOriginUrlAware {
|
||||||
|
override suspend fun getUrl(bot: Bot): String {
|
||||||
|
TODO()
|
||||||
|
}
|
||||||
|
|
||||||
|
override val imageId: String = externalImage.calculateImageResourceId()
|
||||||
|
}
|
||||||
|
|
||||||
|
internal val firstOnlineBotInstance: Bot get() = Bot.botInstancesSequence.firstOrNull() ?: error("No Bot available")
|
||||||
|
|
||||||
|
// endergion
|
||||||
|
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
//// IMPLEMENTATIONS ////
|
//// IMPLEMENTATIONS ////
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
|
|
||||||
private fun Message.hasDuplicationOfConstrain(key: Message.Key<*>): Boolean {
|
private fun Message.hasDuplicationOfConstrain(key: Message.Key<*>): Boolean {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is SingleMessage -> (this as? ConstrainSingle<*>)?.key == key
|
is SingleMessage -> (this as? ConstrainSingle<*>)?.key == key
|
||||||
|
Loading…
Reference in New Issue
Block a user