mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-04 15:40:13 +08:00
Deprecate TempMessageEvent and add GroupTempMessageEvent for #429
This commit is contained in:
parent
3c0e7e7834
commit
c074bef9c6
20
mirai-core-api/src/commonMain/kotlin/contact/TempUser.kt
Normal file
20
mirai-core-api/src/commonMain/kotlin/contact/TempUser.kt
Normal file
@ -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
|
@ -270,7 +270,12 @@ public open class MessageSubscribersBuilder<M : MessageEvent, out Ret, R : RR, R
|
|||||||
|
|
||||||
/** 如果是群临时会话消息 */
|
/** 如果是群临时会话消息 */
|
||||||
@MessageDsl
|
@MessageDsl
|
||||||
public fun sentByTemp(): ListeningFilter = newListeningFilter { this is TempMessageEvent }
|
@Deprecated("use sentByGroupTemp()", ReplaceWith("sentByGroupTemp()"), DeprecationLevel.ERROR)
|
||||||
|
public fun sentByTemp(): ListeningFilter = sentByGroupTemp()
|
||||||
|
|
||||||
|
/** 如果是群临时会话消息 */
|
||||||
|
@MessageDsl
|
||||||
|
public fun sentByGroupTemp(): ListeningFilter = newListeningFilter { this is GroupTempMessageEvent }
|
||||||
|
|
||||||
/** 如果是管理员或群主发的消息 */
|
/** 如果是管理员或群主发的消息 */
|
||||||
@MessageDsl
|
@MessageDsl
|
||||||
|
@ -34,7 +34,7 @@ import net.mamoe.mirai.utils.MiraiInternalApi
|
|||||||
*
|
*
|
||||||
* @see isContextIdenticalWith 判断语境相同
|
* @see isContextIdenticalWith 判断语境相同
|
||||||
*/
|
*/
|
||||||
public interface MessageEvent : Event, Packet, BotPassiveEvent {
|
public interface MessageEvent : Event, Packet, BotPassiveEvent { // TODO: 2021/1/11 Make sealed interface in Kotlin 1.5
|
||||||
/**
|
/**
|
||||||
* 与这个消息事件相关的 [Bot]
|
* 与这个消息事件相关的 [Bot]
|
||||||
*/
|
*/
|
||||||
@ -163,6 +163,9 @@ public class GroupMessageEvent(
|
|||||||
* 发送方权限.
|
* 发送方权限.
|
||||||
*/
|
*/
|
||||||
public val permission: MemberPermission,
|
public val permission: MemberPermission,
|
||||||
|
/**
|
||||||
|
* 发送人. 可能是 [NormalMember] 或 [AnonymousMember]
|
||||||
|
*/
|
||||||
public override val sender: Member,
|
public override val sender: Member,
|
||||||
public override val message: MessageChain,
|
public override val message: MessageChain,
|
||||||
public override val time: Int
|
public override val time: Int
|
||||||
@ -186,7 +189,12 @@ public class GroupMessageEvent(
|
|||||||
*
|
*
|
||||||
* @see MessageEvent
|
* @see MessageEvent
|
||||||
*/
|
*/
|
||||||
public class TempMessageEvent(
|
@Deprecated(
|
||||||
|
"mirai 正计划支持其他渠道发起的临时会话, 届时此事件会变动. 原 TempMessageEvent 已更改为 GroupTempMessageEvent",
|
||||||
|
replaceWith = ReplaceWith("GroupTempMessageEvent", "net.mamoe.mirai.event.events.GroupTempMessageEvent"),
|
||||||
|
DeprecationLevel.ERROR
|
||||||
|
)
|
||||||
|
public sealed class TempMessageEvent constructor(
|
||||||
public override val sender: NormalMember,
|
public override val sender: NormalMember,
|
||||||
public override val message: MessageChain,
|
public override val message: MessageChain,
|
||||||
public override val time: Int
|
public override val time: Int
|
||||||
@ -206,6 +214,38 @@ public class TempMessageEvent(
|
|||||||
"TempMessageEvent(sender=${sender.id} from group(${sender.group.id}), message=$message)"
|
"TempMessageEvent(sender=${sender.id} from group(${sender.group.id}), message=$message)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// support by mirai 2.1
|
||||||
|
//
|
||||||
|
//public class UserTempMessageEvent(
|
||||||
|
// sender: TempUser,
|
||||||
|
// message: MessageChain,
|
||||||
|
// time: Int
|
||||||
|
//) : @Suppress("DEPRECATION_ERROR") TempMessageEvent(sender, message, time), GroupAwareMessageEvent, UserMessageEvent {
|
||||||
|
//}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 群临时会话消息
|
||||||
|
*/
|
||||||
|
public class GroupTempMessageEvent(
|
||||||
|
public override val sender: NormalMember,
|
||||||
|
public override val message: MessageChain,
|
||||||
|
public override val time: Int
|
||||||
|
) : @Suppress("DEPRECATION_ERROR") TempMessageEvent(sender, message, time), GroupAwareMessageEvent, UserMessageEvent {
|
||||||
|
init {
|
||||||
|
val source = message[MessageSource] ?: error("Cannot find MessageSource from message")
|
||||||
|
check(source is OnlineMessageSource.Incoming.FromTemp) { "source provided to a TempMessageEvent must be an instance of OnlineMessageSource.Incoming.FromTemp" }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override val bot: Bot get() = sender.bot
|
||||||
|
public override val subject: NormalMember get() = sender
|
||||||
|
public override val group: Group get() = sender.group
|
||||||
|
public override val senderName: String get() = sender.nameCardOrNick
|
||||||
|
public override val source: OnlineMessageSource.Incoming.FromTemp get() = message.source as OnlineMessageSource.Incoming.FromTemp
|
||||||
|
|
||||||
|
public override fun toString(): String =
|
||||||
|
"GroupTempMessageEvent(sender=${sender.id} from group(${sender.group.id}), message=$message)"
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 机器人收到的陌生人消息的事件
|
* 机器人收到的陌生人消息的事件
|
||||||
*
|
*
|
||||||
|
@ -119,7 +119,15 @@ public fun <R> EventChannel<*>.subscribeFriendMessages(
|
|||||||
return createBuilder(::FriendMessageSubscribersBuilder, coroutineContext, concurrencyKind, priority).run(listeners)
|
return createBuilder(::FriendMessageSubscribersBuilder, coroutineContext, concurrencyKind, priority).run(listeners)
|
||||||
}
|
}
|
||||||
|
|
||||||
public typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder<TempMessageEvent, Listener<TempMessageEvent>, Unit, Unit>
|
@Deprecated(
|
||||||
|
"mirai 正计划支持其他渠道发起的临时会话, 届时此定义会变动. 请使用 GroupTempMessageSubscribersBuilder",
|
||||||
|
ReplaceWith(
|
||||||
|
"GroupTempMessageSubscribersBuilder",
|
||||||
|
"net.mamoe.mirai.event.GroupTempMessageSubscribersBuilder"
|
||||||
|
),
|
||||||
|
DeprecationLevel.ERROR
|
||||||
|
)
|
||||||
|
public typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder<GroupTempMessageEvent, Listener<GroupTempMessageEvent>, Unit, Unit>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过 DSL 订阅来自所有 [Bot] 的所有临时会话消息事件. DSL 语法查看 [subscribeMessages].
|
* 通过 DSL 订阅来自所有 [Bot] 的所有临时会话消息事件. DSL 语法查看 [subscribeMessages].
|
||||||
@ -127,14 +135,38 @@ public typealias TempMessageSubscribersBuilder = MessageSubscribersBuilder<TempM
|
|||||||
* @see EventChannel.subscribe 事件监听基础
|
* @see EventChannel.subscribe 事件监听基础
|
||||||
* @see EventChannel 事件通道
|
* @see EventChannel 事件通道
|
||||||
*/
|
*/
|
||||||
|
@Deprecated(
|
||||||
|
"mirai 正计划支持其他渠道发起的临时会话, 届时此方法会变动. 请使用 subscribeGroupTempMessages",
|
||||||
|
ReplaceWith(
|
||||||
|
"subscribeGroupTempMessages(coroutineContext, concurrencyKind, priority, listeners)",
|
||||||
|
"net.mamoe.mirai.event.subscribeGroupTempMessages"
|
||||||
|
),
|
||||||
|
DeprecationLevel.ERROR
|
||||||
|
)
|
||||||
public fun <R> EventChannel<*>.subscribeTempMessages(
|
public fun <R> EventChannel<*>.subscribeTempMessages(
|
||||||
coroutineContext: CoroutineContext = EmptyCoroutineContext,
|
coroutineContext: CoroutineContext = EmptyCoroutineContext,
|
||||||
concurrencyKind: ConcurrencyKind = CONCURRENT,
|
concurrencyKind: ConcurrencyKind = CONCURRENT,
|
||||||
priority: EventPriority = EventPriority.MONITOR,
|
priority: EventPriority = EventPriority.MONITOR,
|
||||||
listeners: TempMessageSubscribersBuilder.() -> R
|
listeners: GroupTempMessageSubscribersBuilder.() -> R
|
||||||
|
): R = subscribeGroupTempMessages(coroutineContext, concurrencyKind, priority, listeners)
|
||||||
|
|
||||||
|
public typealias GroupTempMessageSubscribersBuilder = MessageSubscribersBuilder<GroupTempMessageEvent, Listener<GroupTempMessageEvent>, Unit, Unit>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过 DSL 订阅来自所有 [Bot] 的所有 [GroupTempMessageEvent]. DSL 语法查看 [subscribeMessages].
|
||||||
|
*
|
||||||
|
* @see EventChannel.subscribe 事件监听基础
|
||||||
|
* @see EventChannel 事件通道
|
||||||
|
*/
|
||||||
|
public fun <R> EventChannel<*>.subscribeGroupTempMessages(
|
||||||
|
coroutineContext: CoroutineContext = EmptyCoroutineContext,
|
||||||
|
concurrencyKind: ConcurrencyKind = CONCURRENT,
|
||||||
|
priority: EventPriority = EventPriority.MONITOR,
|
||||||
|
listeners: GroupTempMessageSubscribersBuilder.() -> R
|
||||||
): R {
|
): R {
|
||||||
contract { callsInPlace(listeners, InvocationKind.EXACTLY_ONCE) }
|
contract { callsInPlace(listeners, InvocationKind.EXACTLY_ONCE) }
|
||||||
return createBuilder(::TempMessageSubscribersBuilder, coroutineContext, concurrencyKind, priority).run(listeners)
|
return createBuilder(::GroupTempMessageSubscribersBuilder, coroutineContext, concurrencyKind, priority)
|
||||||
|
.run(listeners)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ public open class MessageSourceBuilder internal constructor() {
|
|||||||
* 设置发信人
|
* 设置发信人
|
||||||
*/
|
*/
|
||||||
public fun sender(sender: ContactOrBot): MessageSourceBuilder = apply {
|
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 {
|
public fun target(target: ContactOrBot): MessageSourceBuilder = apply {
|
||||||
this.targetId = Mirai.getUin(target)
|
this.targetId = target.id
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -177,7 +177,7 @@ internal fun net.mamoe.mirai.event.events.MessageEvent.logMessageReceived() {
|
|||||||
is net.mamoe.mirai.event.events.GroupMessageEvent -> bot.logger.verbose {
|
is net.mamoe.mirai.event.events.GroupMessageEvent -> bot.logger.verbose {
|
||||||
renderGroupMessage(group, senderName, sender, message)
|
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()
|
"[${group.name}(${group.id})] $senderName(Temp ${sender.id}) -> $message".replaceMagicCodes()
|
||||||
}
|
}
|
||||||
is net.mamoe.mirai.event.events.StrangerMessageEvent -> bot.logger.verbose {
|
is net.mamoe.mirai.event.events.StrangerMessageEvent -> bot.logger.verbose {
|
||||||
|
@ -466,7 +466,7 @@ internal suspend fun MsgComm.Msg.transform(bot: QQAndroidBot): Packet? {
|
|||||||
member.lastMessageSequence.loop { instant ->
|
member.lastMessageSequence.loop { instant ->
|
||||||
if (msgHead.msgSeq > instant) {
|
if (msgHead.msgSeq > instant) {
|
||||||
if (member.lastMessageSequence.compareAndSet(instant, msgHead.msgSeq)) {
|
if (member.lastMessageSequence.compareAndSet(instant, msgHead.msgSeq)) {
|
||||||
return TempMessageEvent(
|
return GroupTempMessageEvent(
|
||||||
member,
|
member,
|
||||||
toMessageChain(
|
toMessageChain(
|
||||||
bot,
|
bot,
|
||||||
|
Loading…
Reference in New Issue
Block a user