From c074bef9c6f055d1188cba6a25b836a046ea9fac Mon Sep 17 00:00:00 2001 From: Him188 Date: Mon, 11 Jan 2021 17:08:22 +0800 Subject: [PATCH] Deprecate TempMessageEvent and add GroupTempMessageEvent for #429 --- .../src/commonMain/kotlin/contact/TempUser.kt | 20 +++++++++ .../kotlin/event/MessageSubscribersBuilder.kt | 7 ++- .../kotlin/event/events/MessageEvent.kt | 44 ++++++++++++++++++- .../kotlin/event/subscribeMessages.kt | 38 ++++++++++++++-- .../message/data/MessageSourceBuilder.kt | 4 +- .../src/commonMain/kotlin/contact/util.kt | 2 +- .../chat/receive/MessageSvc.PbGetMsg.kt | 2 +- 7 files changed, 107 insertions(+), 10 deletions(-) create mode 100644 mirai-core-api/src/commonMain/kotlin/contact/TempUser.kt diff --git a/mirai-core-api/src/commonMain/kotlin/contact/TempUser.kt b/mirai-core-api/src/commonMain/kotlin/contact/TempUser.kt new file mode 100644 index 000000000..b278434de --- /dev/null +++ b/mirai-core-api/src/commonMain/kotlin/contact/TempUser.kt @@ -0,0 +1,20 @@ +/* + * 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 + */ + +package net.mamoe.mirai.contact + +import net.mamoe.mirai.utils.MiraiInternalApi + +/** + * 临时会话用户, 非群成员. + * + * [#429](https://github.com/mamoe/mirai/issues/429) + */ +@MiraiInternalApi("其他渠道的临时会话暂未支持. ") +public interface TempUser : User \ No newline at end of file diff --git a/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt b/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt index 15dad5ef8..6a20d70bb 100644 --- a/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt +++ b/mirai-core-api/src/commonMain/kotlin/event/MessageSubscribersBuilder.kt @@ -270,7 +270,12 @@ public open class MessageSubscribersBuilder EventChannel<*>.subscribeFriendMessages( return createBuilder(::FriendMessageSubscribersBuilder, coroutineContext, concurrencyKind, priority).run(listeners) } -public typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder, Unit, Unit> +@Deprecated( + "mirai 正计划支持其他渠道发起的临时会话, 届时此定义会变动. 请使用 GroupTempMessageSubscribersBuilder", + ReplaceWith( + "GroupTempMessageSubscribersBuilder", + "net.mamoe.mirai.event.GroupTempMessageSubscribersBuilder" + ), + DeprecationLevel.ERROR +) +public typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder, Unit, Unit> /** * 通过 DSL 订阅来自所有 [Bot] 的所有临时会话消息事件. DSL 语法查看 [subscribeMessages]. @@ -127,14 +135,38 @@ public typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder EventChannel<*>.subscribeTempMessages( coroutineContext: CoroutineContext = EmptyCoroutineContext, concurrencyKind: ConcurrencyKind = CONCURRENT, priority: EventPriority = EventPriority.MONITOR, - listeners: TempMessageSubscribersBuilder.() -> R + listeners: GroupTempMessageSubscribersBuilder.() -> R +): R = subscribeGroupTempMessages(coroutineContext, concurrencyKind, priority, listeners) + +public typealias GroupTempMessageSubscribersBuilder = MessageSubscribersBuilder, Unit, Unit> + +/** + * 通过 DSL 订阅来自所有 [Bot] 的所有 [GroupTempMessageEvent]. DSL 语法查看 [subscribeMessages]. + * + * @see EventChannel.subscribe 事件监听基础 + * @see EventChannel 事件通道 + */ +public fun EventChannel<*>.subscribeGroupTempMessages( + coroutineContext: CoroutineContext = EmptyCoroutineContext, + concurrencyKind: ConcurrencyKind = CONCURRENT, + priority: EventPriority = EventPriority.MONITOR, + listeners: GroupTempMessageSubscribersBuilder.() -> R ): R { contract { callsInPlace(listeners, InvocationKind.EXACTLY_ONCE) } - return createBuilder(::TempMessageSubscribersBuilder, coroutineContext, concurrencyKind, priority).run(listeners) + return createBuilder(::GroupTempMessageSubscribersBuilder, coroutineContext, concurrencyKind, priority) + .run(listeners) } diff --git a/mirai-core-api/src/commonMain/kotlin/message/data/MessageSourceBuilder.kt b/mirai-core-api/src/commonMain/kotlin/message/data/MessageSourceBuilder.kt index ddcd7a8f0..4460a0e6f 100644 --- a/mirai-core-api/src/commonMain/kotlin/message/data/MessageSourceBuilder.kt +++ b/mirai-core-api/src/commonMain/kotlin/message/data/MessageSourceBuilder.kt @@ -207,7 +207,7 @@ public open class MessageSourceBuilder internal constructor() { * 设置发信人 */ public fun sender(sender: ContactOrBot): MessageSourceBuilder = apply { - this.fromId = Mirai.getUin(sender) + this.fromId = sender.id } /** @@ -221,7 +221,7 @@ public open class MessageSourceBuilder internal constructor() { * 设置发信目标 */ public fun target(target: ContactOrBot): MessageSourceBuilder = apply { - this.targetId = Mirai.getUin(target) + this.targetId = target.id } /** diff --git a/mirai-core/src/commonMain/kotlin/contact/util.kt b/mirai-core/src/commonMain/kotlin/contact/util.kt index 8cc22e94d..7148e9c66 100644 --- a/mirai-core/src/commonMain/kotlin/contact/util.kt +++ b/mirai-core/src/commonMain/kotlin/contact/util.kt @@ -177,7 +177,7 @@ internal fun net.mamoe.mirai.event.events.MessageEvent.logMessageReceived() { is net.mamoe.mirai.event.events.GroupMessageEvent -> bot.logger.verbose { renderGroupMessage(group, senderName, sender, message) } - is net.mamoe.mirai.event.events.TempMessageEvent -> bot.logger.verbose { + is net.mamoe.mirai.event.events.GroupTempMessageEvent -> bot.logger.verbose { "[${group.name}(${group.id})] $senderName(Temp ${sender.id}) -> $message".replaceMagicCodes() } is net.mamoe.mirai.event.events.StrangerMessageEvent -> bot.logger.verbose { diff --git a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt b/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt index 343068608..6717dc8cd 100644 --- a/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt +++ b/mirai-core/src/commonMain/kotlin/network/protocol/packet/chat/receive/MessageSvc.PbGetMsg.kt @@ -466,7 +466,7 @@ internal suspend fun MsgComm.Msg.transform(bot: QQAndroidBot): Packet? { member.lastMessageSequence.loop { instant -> if (msgHead.msgSeq > instant) { if (member.lastMessageSequence.compareAndSet(instant, msgHead.msgSeq)) { - return TempMessageEvent( + return GroupTempMessageEvent( member, toMessageChain( bot,