fix OnQuestionMarkReply false-trigger, add 尊嘟假嘟

This commit is contained in:
A.C.Sukazyo Eyre 2023-10-09 21:51:22 +08:00
parent 253208e830
commit 692abb9f56
Signed by: Eyre_S
GPG Key ID: C17CE40291207874
5 changed files with 94 additions and 26 deletions

View File

@ -5,7 +5,7 @@ MORNY_ARCHIVE_NAME = morny-coeur
MORNY_CODE_STORE = https://github.com/Eyre-S/Coeur-Morny-Cono MORNY_CODE_STORE = https://github.com/Eyre-S/Coeur-Morny-Cono
MORNY_COMMIT_PATH = https://github.com/Eyre-S/Coeur-Morny-Cono/commit/%s MORNY_COMMIT_PATH = https://github.com/Eyre-S/Coeur-Morny-Cono/commit/%s
VERSION = 1.1.0-alpha1 VERSION = 1.1.0-alpha2
USE_DELTA = false USE_DELTA = false
VERSION_DELTA = VERSION_DELTA =

View File

@ -5,11 +5,14 @@ import cc.sukazyo.cono.morny.MornyCoeur
class MornyEventListeners (using manager: EventListenerManager) (using coeur: MornyCoeur) { class MornyEventListeners (using manager: EventListenerManager) (using coeur: MornyCoeur) {
private val $OnUserRandom = OnUserRandom()
manager.register( manager.register(
// ACTIVITY_RECORDER // ACTIVITY_RECORDER
// KUOHUANHUAN_NEED_SLEEP // KUOHUANHUAN_NEED_SLEEP
OnUniMeowTrigger(using coeur.commands), OnUniMeowTrigger(using coeur.commands),
OnUserRandom(), $OnUserRandom.RandomSelect,
//noinspection NonAsciiCharacters
$OnUserRandom.尊嘟假嘟,
OnQuestionMarkReply(), OnQuestionMarkReply(),
OnUserSlashAction(), OnUserSlashAction(),
OnCallMe(), OnCallMe(),

View File

@ -36,7 +36,9 @@ object OnQuestionMarkReply {
def isAllMessageMark (using text: String): Boolean = { def isAllMessageMark (using text: String): Boolean = {
boundary[Boolean] { boundary[Boolean] {
for (c <- text) if QUESTION_MARKS contains c then boundary.break(false) for (c <- text)
if !(QUESTION_MARKS contains c) then
boundary break false
true true
} }
} }

View File

@ -4,37 +4,65 @@ import cc.sukazyo.cono.morny.MornyCoeur
import cc.sukazyo.cono.morny.bot.api.EventListener import cc.sukazyo.cono.morny.bot.api.EventListener
import cc.sukazyo.cono.morny.util.tgapi.TelegramExtensions.Bot.exec import cc.sukazyo.cono.morny.util.tgapi.TelegramExtensions.Bot.exec
import com.pengrad.telegrambot.model.Update import com.pengrad.telegrambot.model.Update
import com.pengrad.telegrambot.request.SendMessage import com.pengrad.telegrambot.request.{AbstractSendRequest, SendMessage}
import com.pengrad.telegrambot.response.SendResponse
import scala.language.postfixOps import scala.language.postfixOps
class OnUserRandom (using coeur: MornyCoeur) extends EventListener { class OnUserRandom (using coeur: MornyCoeur) {
private val USER_OR_QUERY = "^(.+)(?:还是|or)(.+)$"r
private val USER_IF_QUERY = "^(.+)(?:吗\\?||\\?|吗?)$"r
override def onMessage(using update: Update): Boolean = { object RandomSelect extends EventListener {
if update.message.text == null then return false
if !(update.message.text startsWith "/") then return false
import cc.sukazyo.cono.morny.util.UseRandom.rand_half private val USER_OR_QUERY = "^(.+)(?:还是|or)(.+)$" r
val query = update.message.text substring 1 private val USER_IF_QUERY = "^(.+)(?:吗\\?||\\?|吗?)$" r
val result: String|Null = query match
case USER_OR_QUERY(_con1, _con2) =>
if rand_half then _con1 else _con2
case USER_IF_QUERY(_con) =>
// for capability with [[OnQuestionMarkReply]]
if OnQuestionMarkReply.isAllMessageMark(using _con) then return false
(if rand_half then "不" else "") + _con
case _ => null
if result == null then return false override def onMessage (using update: Update): Boolean = {
if update.message.text == null then return false
if !(update.message.text startsWith "/") then return false
import cc.sukazyo.cono.morny.util.UseRandom.rand_half
val query = update.message.text substring 1
val result: String | Null = query match
case USER_OR_QUERY(_con1, _con2) =>
if rand_half then _con1 else _con2
case USER_IF_QUERY(_con) =>
// for capability with [[OnQuestionMarkReply]]
if OnQuestionMarkReply.isAllMessageMark(using _con) then return false
(if rand_half then "不" else "") + _con
case _ => null
if result == null then return false
coeur.account exec SendMessage(
update.message.chat.id, result
).replyToMessageId(update.message.messageId)
true
}
coeur.account exec SendMessage( }
update.message.chat.id, result
).replyToMessageId(update.message.messageId) //noinspection NonAsciiCharacters
true object 尊嘟假嘟 extends EventListener {
private val keywords = Array("尊嘟假嘟", "O.o", "o.O")
override def onMessage (using event: Update): Boolean = {
if event.message.text == null then return false
if !(keywords contains event.message.text) then return false
import cc.sukazyo.cono.morny.util.UseRandom.rand_half
coeur.account exec SendMessage(
event.message.chat.id,
if rand_half then "尊嘟" else "假嘟"
).replyToMessageId(event.message.messageId)
true
}
} }

View File

@ -0,0 +1,35 @@
package cc.sukazyo.cono.morny.test.cc.sukazyo.cono.morny.event
import cc.sukazyo.cono.morny.bot.event.OnQuestionMarkReply
import cc.sukazyo.cono.morny.test.MornyTests
import org.scalatest.prop.TableDrivenPropertyChecks
class OnQuestionMarkReplyTest extends MornyTests with TableDrivenPropertyChecks {
"on replying a question mark :" - {
"on checking if a message is a question mark :" - {
val examples = Table(
("text", "is"),
("回来了", false),
("为什么?", false),
("?这不合理", false),
("??尊嘟假嘟", false),
("?????", true),
("?", true),
("", true),
("??❔", true),
)
forAll(examples) { (text, is) =>
s"$text should checked with result $is" in:
OnQuestionMarkReply.isAllMessageMark(using text) shouldEqual is
}
}
}
}