diff --git a/src/main/scala/cc/sukazyo/cono/morny/bot/api/EventEnv.scala b/src/main/scala/cc/sukazyo/cono/morny/bot/api/EventEnv.scala index 33750c6..9feb720 100644 --- a/src/main/scala/cc/sukazyo/cono/morny/bot/api/EventEnv.scala +++ b/src/main/scala/cc/sukazyo/cono/morny/bot/api/EventEnv.scala @@ -51,6 +51,20 @@ class EventEnv ( case None => ConsumeResult(false) } + // fixme: defined() series is not tested yet + + def defined [T: ClassTag]: Boolean = { + variables get classTag[T].runtimeClass match + case Some(_) => true + case None => false + } + + def defined [T] (t: Class[T]): Boolean = { + variables get t match + case Some(_) => true + case None => false + } + def consume [T: ClassTag] (consumer: T => Unit): ConsumeResult = variables get classTag[T].runtimeClass match case Some(i) => consumer(i.asInstanceOf[T]); ConsumeResult(true) diff --git a/src/main/scala/cc/sukazyo/cono/morny/bot/event/MornyEventListeners.scala b/src/main/scala/cc/sukazyo/cono/morny/bot/event/MornyEventListeners.scala index 0e05d4c..744437f 100644 --- a/src/main/scala/cc/sukazyo/cono/morny/bot/event/MornyEventListeners.scala +++ b/src/main/scala/cc/sukazyo/cono/morny/bot/event/MornyEventListeners.scala @@ -11,10 +11,10 @@ class MornyEventListeners (using manager: EventListenerManager) (using coeur: Mo // KUOHUANHUAN_NEED_SLEEP OnOnAlias(), OnUniMeowTrigger(using coeur.commands), + OnQuestionMarkReply(), $OnUserRandom.RandomSelect, //noinspection NonAsciiCharacters $OnUserRandom.尊嘟假嘟, - OnQuestionMarkReply(), OnUserSlashAction(), OnCallMe(), OnCallMsgSend(), diff --git a/src/main/scala/cc/sukazyo/cono/morny/bot/event/OnQuestionMarkReply.scala b/src/main/scala/cc/sukazyo/cono/morny/bot/event/OnQuestionMarkReply.scala index 177f400..f12d258 100644 --- a/src/main/scala/cc/sukazyo/cono/morny/bot/event/OnQuestionMarkReply.scala +++ b/src/main/scala/cc/sukazyo/cono/morny/bot/event/OnQuestionMarkReply.scala @@ -16,12 +16,7 @@ class OnQuestionMarkReply (using coeur: MornyCoeur) extends EventListener { import event.update // FIXME: not tested yet, due to cannot connect to test bot - if boundary[Boolean] { - event.consume[MornyOnUpdateTimestampOffsetLock.ExpiredEvent.type] { _ => - boundary.break(true) - } - false - } then { + if event.defined[MornyOnUpdateTimestampOffsetLock.ExpiredEvent.type] then { logger.debug("OnQuestionMarkReply: expired event, skipped") return } else { @@ -32,8 +27,12 @@ class OnQuestionMarkReply (using coeur: MornyCoeur) extends EventListener { import cc.sukazyo.cono.morny.util.UseMath.over import cc.sukazyo.cono.morny.util.UseRandom.chance_is - if (1 over 8) chance_is false then return; if !isAllMessageMark(using update.message.text) then return; + // provide a mark to notify the following event + // that the current event is all made of question marks + event.provide(OnQuestionMarkReply.Marked) + + if (1 over 8) chance_is false then return; if (update.message.hasProtectedContent) { // Copy the message @@ -77,4 +76,6 @@ object OnQuestionMarkReply { } } + object Marked + } diff --git a/src/main/scala/cc/sukazyo/cono/morny/bot/event/OnUserRandom.scala b/src/main/scala/cc/sukazyo/cono/morny/bot/event/OnUserRandom.scala index ac05d02..55b5dd0 100644 --- a/src/main/scala/cc/sukazyo/cono/morny/bot/event/OnUserRandom.scala +++ b/src/main/scala/cc/sukazyo/cono/morny/bot/event/OnUserRandom.scala @@ -29,7 +29,8 @@ class OnUserRandom (using coeur: MornyCoeur) { if rand_half then _con1 else _con2 case USER_IF_QUERY(_con) => // for capability with [[OnQuestionMarkReply]] - if OnQuestionMarkReply.isAllMessageMark(using _con) then return; + // fixme: not tested yet + if event.defined[OnQuestionMarkReply.Marked.type] then return; (if rand_half then "不" else "") + _con case _ => null