Nugde stability update

This commit is contained in:
Karlatemp 2020-10-03 22:12:49 +08:00
parent 16623aec65
commit c1f609d0de
No known key found for this signature in database
GPG Key ID: 21FBDDF664FF06F8
3 changed files with 180 additions and 5 deletions

View File

@ -262,7 +262,12 @@ private object Transformers732 : Map<Int, Lambda732> by mapOf(
} }
} }
if (target.id == bot.id) { if (target.id == bot.id) {
return@lambda732 sequenceOf(BotNudgedEvent(from, action, suffix)) return@lambda732 sequenceOf(
if (from.id == bot.id)
BotNudgedEvent.InGroup.ByBot(action, suffix, group)
else
BotNudgedEvent.InGroup.ByMember(action, suffix, from)
)
} }
return@lambda732 sequenceOf(MemberNudgedEvent(from, target, action, suffix)) return@lambda732 sequenceOf(MemberNudgedEvent(from, target, action, suffix))
} }
@ -519,8 +524,20 @@ internal object Transformers528 : Map<Long, Lambda528> by mapOf(
"suffix_str" -> suffix = value "suffix_str" -> suffix = value
} }
} }
return@lambda528 sequenceOf(BotNudgedEvent(from, action, suffix))
return@lambda528 sequenceOf(
if (target.id == bot.id) {
if (from.id == bot.id)
BotNudgedEvent.InPrivateSession.ByBot(target, action, suffix)
else
BotNudgedEvent.InPrivateSession.ByFriend(target, action, suffix)
} else {
if (from.id == bot.id)
FriendNudgedEvent.NudgedByBot(action, suffix, target)
else
FriendNudgedEvent.NudgedByHimself(action, suffix, target)
}
)
} }
else -> { else -> {
bot.logger.debug { bot.logger.debug {

View File

@ -14,9 +14,9 @@
package net.mamoe.mirai.event.events package net.mamoe.mirai.event.events
import net.mamoe.mirai.Bot import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.User import net.mamoe.mirai.contact.*
import net.mamoe.mirai.event.AbstractEvent import net.mamoe.mirai.event.AbstractEvent
import net.mamoe.mirai.message.action.Nudge import net.mamoe.mirai.message.MessageEvent
import net.mamoe.mirai.qqandroid.network.Packet import net.mamoe.mirai.qqandroid.network.Packet
import net.mamoe.mirai.utils.MiraiExperimentalAPI import net.mamoe.mirai.utils.MiraiExperimentalAPI
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
@ -126,6 +126,93 @@ public data class BotNickChangedEvent(
public val to: String public val to: String
) : BotEvent, Packet, AbstractEvent() ) : BotEvent, Packet, AbstractEvent()
@MiraiExperimentalAPI
@SinceMirai("1.3.0")
public sealed class BotNudgedEvent : AbstractEvent(), BotEvent, Packet {
/**
* 戳一戳的发起人 [Bot] 的某一好友, 或某一群员, [Bot.selfQQ]
*/
public abstract val from: User
/** 戳一戳的动作名称 */
public abstract val action: String
/** 戳一戳中设置的自定义后缀 */
public abstract val suffix: String
@MiraiExperimentalAPI
@SinceMirai("2.0.0")
/** [Bot] 在群聊中被戳 */
public sealed class InGroup : BotNudgedEvent(), GroupMemberEvent {
abstract override val from: Member
override val bot: Bot get() = from.bot
/** [Bot] 在 [Group] 中被 [Member] 戳了 */
public data class ByMember internal constructor(
override val action: String,
override val suffix: String,
override val member: Member
) : InGroup() {
override val from: Member
get() = member
override fun toString(): String {
return "BotNudgedEvent.InGroup.ByMember(member=$member, action=$action, suffix=$suffix)"
}
}
/** [Bot] 在 [Group] 中自己戳了自己 */
public data class ByBot internal constructor(
override val action: String,
override val suffix: String,
override val group: Group
) : InGroup() {
override val member: Member get() = group.botAsMember
override val from: Member get() = member
override fun toString(): String {
return "BotNudgedEvent.InGroup.ByBot(group=$group, action=$action, suffix=$suffix)"
}
}
}
@MiraiExperimentalAPI
@SinceMirai("2.0.0")
/** [Bot] 在私聊中被戳 */
public sealed class InPrivateSession : BotNudgedEvent(), FriendEvent {
abstract override val from: Friend
override val bot: Bot get() = from.bot
override val friend: Friend get() = from
/** 在私聊中 [Friend] 戳了 [Bot] */
public data class ByFriend internal constructor(
override val friend: Friend,
override val action: String,
override val suffix: String
) : InPrivateSession() {
override val from: Friend get() = friend
override fun toString(): String {
return "BotNudgedEvent.InPrivateSession.ByFriend(friend=$friend, action=$action, suffix=$suffix)"
}
}
/** [Bot] 在私聊中自己戳了自己 */
public data class ByBot internal constructor(
/** [Bot] 的对话对象 */
override val friend: Friend,
override val action: String,
override val suffix: String
) : InPrivateSession() {
override val from: Friend get() = bot.selfQQ
override fun toString(): String {
return "BotNudgedEvent.InPrivateSession.ByBot(friend=$friend, action=$action, suffix=$suffix)"
}
}
}
}
/*
/** /**
* [Bot] [][Nudge] 的事件. * [Bot] [][Nudge] 的事件.
*/ */
@ -133,7 +220,7 @@ public data class BotNickChangedEvent(
@SinceMirai("1.3.0") @SinceMirai("1.3.0")
public data class BotNudgedEvent internal constructor( public data class BotNudgedEvent internal constructor(
/** /**
* 戳一戳的发起人 [Bot] 的某一好友, 或某一群员 * 戳一戳的发起人 [Bot] 的某一好友, 或某一群员, [Bot.selfQQ]
*/ */
public val from: User, public val from: User,
/** /**
@ -149,7 +236,22 @@ public data class BotNudgedEvent internal constructor(
* 戳一戳的目标 * 戳一戳的目标
*/ */
public override val bot: Bot get() = from.bot public override val bot: Bot get() = from.bot
} }
*/
/**
* 戳一戳发起的会话环境, 可能是 [Friend] 或者 [Group]
*
* @see MessageEvent.subject
*/
@MiraiExperimentalAPI
@SinceMirai("1.3.2")
public val BotNudgedEvent.subject: Contact
get() = when (val inlineFrom = from) {
is Member -> inlineFrom.group
else -> inlineFrom
}
// region 图片 // region 图片

View File

@ -20,7 +20,9 @@ import net.mamoe.mirai.contact.Group
import net.mamoe.mirai.contact.User import net.mamoe.mirai.contact.User
import net.mamoe.mirai.event.AbstractEvent import net.mamoe.mirai.event.AbstractEvent
import net.mamoe.mirai.event.internal.MiraiAtomicBoolean import net.mamoe.mirai.event.internal.MiraiAtomicBoolean
import net.mamoe.mirai.message.action.Nudge
import net.mamoe.mirai.qqandroid.network.Packet import net.mamoe.mirai.qqandroid.network.Packet
import net.mamoe.mirai.utils.MiraiExperimentalAPI
import net.mamoe.mirai.utils.SinceMirai import net.mamoe.mirai.utils.SinceMirai
import net.mamoe.mirai.utils.internal.runBlocking import net.mamoe.mirai.utils.internal.runBlocking
import kotlin.jvm.* import kotlin.jvm.*
@ -132,3 +134,57 @@ public data class FriendInputStatusChangedEvent internal constructor(
public val inputting: Boolean public val inputting: Boolean
) : FriendEvent, Packet, AbstractEvent() ) : FriendEvent, Packet, AbstractEvent()
/**
* [Friend] [Bot] 的对话中, [Friend] [][Nudge] 事件
*
* : 此事件仅可能在私聊中发生
*/
@SinceMirai("2.0.0")
@MiraiExperimentalAPI
public sealed class FriendNudgedEvent : AbstractEvent(), FriendEvent, Packet {
/**
* 戳一戳的发起人, [Bot] 的某一好友, 或是 [Bot.selfQQ]
*/
public abstract val from: Friend
/**
* 戳一戳的动作名称
*/
public abstract val action: String
/**
* 戳一戳中设置的自定义后缀
*/
public abstract val suffix: String
/** 在 [Bot] 与 [Friend] 的对话中 [Friend] 戳了自己事件 */
@MiraiExperimentalAPI
public data class NudgedByHimself internal constructor(
override val action: String,
override val suffix: String,
override val friend: Friend
) : FriendNudgedEvent() {
override fun toString(): String {
return "FriendNudgedEvent.NudgedByHimself(friend=$friend, action=$action, suffix=$suffix)"
}
override val from: Friend
get() = friend
}
/** [Bot] 戳了 [Friend] */
@MiraiExperimentalAPI
public data class NudgedByBot internal constructor(
override val action: String,
override val suffix: String,
override val friend: Friend
) : FriendNudgedEvent() {
override fun toString(): String {
return "FriendNudgedEvent.NudgedByBot(friend=$friend, action=$action, suffix=$suffix)"
}
override val from: Friend
get() = bot.selfQQ
}
}