mirror of
https://github.com/Eyre-S/Coeur-Morny-Cono.git
synced 2024-11-26 13:07:40 +08:00
use EventEnv as event encapsulate instead of Update
- make MornyOnTelegramCommand provides InputCommand - change OnUniMeowTrigger consume InputCommand
This commit is contained in:
parent
1b3a847fc8
commit
9c433ba0ab
@ -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.1
|
VERSION = 1.1.1.xiongan-dev1
|
||||||
|
|
||||||
USE_DELTA = false
|
USE_DELTA = false
|
||||||
VERSION_DELTA =
|
VERSION_DELTA =
|
||||||
|
43
src/main/scala/cc/sukazyo/cono/morny/bot/api/EventEnv.scala
Normal file
43
src/main/scala/cc/sukazyo/cono/morny/bot/api/EventEnv.scala
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package cc.sukazyo.cono.morny.bot.api
|
||||||
|
|
||||||
|
import com.pengrad.telegrambot.model.Update
|
||||||
|
|
||||||
|
import scala.collection.mutable
|
||||||
|
import scala.reflect.ClassTag
|
||||||
|
import scala.util.boundary
|
||||||
|
|
||||||
|
class EventEnv (
|
||||||
|
|
||||||
|
val update: Update
|
||||||
|
|
||||||
|
) {
|
||||||
|
|
||||||
|
private var _isOk: Int = 0
|
||||||
|
private val variables: mutable.HashMap[Class[?], Any] = mutable.HashMap.empty
|
||||||
|
|
||||||
|
def isEventOk: Boolean = _isOk > 0
|
||||||
|
|
||||||
|
//noinspection UnitMethodIsParameterless
|
||||||
|
def setEventOk: Unit =
|
||||||
|
_isOk = _isOk + 1
|
||||||
|
|
||||||
|
def provide (i: Any): Unit =
|
||||||
|
variables += (i.getClass -> i)
|
||||||
|
|
||||||
|
def use [T] (t: Class[T]): ConsumeProvider[T] = ConsumeProvider(t)
|
||||||
|
|
||||||
|
class ConsumeProvider[T] (t: Class[T]) {
|
||||||
|
def consume (consumer: T => Unit): ConsumeResult = {
|
||||||
|
variables get t match
|
||||||
|
case Some(i) => consumer(i.asInstanceOf[T]); ConsumeResult(true)
|
||||||
|
case None => ConsumeResult(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ConsumeResult (success: Boolean) {
|
||||||
|
def onfail (processor: => Unit): Unit = {
|
||||||
|
if !success then processor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,22 +1,20 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.api
|
package cc.sukazyo.cono.morny.bot.api
|
||||||
|
|
||||||
import com.pengrad.telegrambot.model.Update
|
|
||||||
|
|
||||||
trait EventListener () {
|
trait EventListener () {
|
||||||
|
|
||||||
def onMessage (using Update): Boolean = false
|
def onMessage (using EventEnv): Unit = {}
|
||||||
def onEditedMessage (using Update): Boolean = false
|
def onEditedMessage (using EventEnv): Unit = {}
|
||||||
def onChannelPost (using Update): Boolean = false
|
def onChannelPost (using EventEnv): Unit = {}
|
||||||
def onEditedChannelPost (using Update): Boolean = false
|
def onEditedChannelPost (using EventEnv): Unit = {}
|
||||||
def onInlineQuery (using Update): Boolean = false
|
def onInlineQuery (using EventEnv): Unit = {}
|
||||||
def onChosenInlineResult (using Update): Boolean = false
|
def onChosenInlineResult (using EventEnv): Unit = {}
|
||||||
def onCallbackQuery (using Update): Boolean = false
|
def onCallbackQuery (using EventEnv): Unit = {}
|
||||||
def onShippingQuery (using Update): Boolean = false
|
def onShippingQuery (using EventEnv): Unit = {}
|
||||||
def onPreCheckoutQuery (using Update): Boolean = false
|
def onPreCheckoutQuery (using EventEnv): Unit = {}
|
||||||
def onPoll (using Update): Boolean = false
|
def onPoll (using EventEnv): Unit = {}
|
||||||
def onPollAnswer (using Update): Boolean = false
|
def onPollAnswer (using EventEnv): Unit = {}
|
||||||
def onMyChatMemberUpdated (using Update): Boolean = false
|
def onMyChatMemberUpdated (using EventEnv): Unit = {}
|
||||||
def onChatMemberUpdated (using Update): Boolean = false
|
def onChatMemberUpdated (using EventEnv): Unit = {}
|
||||||
def onChatJoinRequest (using Update): Boolean = false
|
def onChatJoinRequest (using EventEnv): Unit = {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import com.pengrad.telegrambot.UpdatesListener
|
|||||||
|
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
import scala.language.postfixOps
|
import scala.language.postfixOps
|
||||||
|
import scala.util.boundary
|
||||||
|
|
||||||
/** Contains a [[mutable.Queue]] of [[EventListener]], and delivery telegram [[Update]].
|
/** Contains a [[mutable.Queue]] of [[EventListener]], and delivery telegram [[Update]].
|
||||||
*
|
*
|
||||||
@ -23,46 +24,43 @@ class EventListenerManager (using coeur: MornyCoeur) extends UpdatesListener {
|
|||||||
def register (listeners: EventListener*): Unit =
|
def register (listeners: EventListener*): Unit =
|
||||||
this.listeners ++= listeners
|
this.listeners ++= listeners
|
||||||
|
|
||||||
private class EventRunner (using event: Update) extends Thread {
|
private class EventRunner (using update: Update) extends Thread {
|
||||||
this setName s"evt-${event.updateId()}-nn"
|
this setName s"upd-${update.updateId()}-nn"
|
||||||
private def updateThreadName (t: String): Unit =
|
private def updateThreadName (t: String): Unit =
|
||||||
this setName s"evt-${event.updateId()}-$t"
|
this setName s"upd-${update.updateId()}-$t"
|
||||||
|
|
||||||
override def run (): Unit = {
|
override def run (): Unit = {
|
||||||
for (i <- listeners) {
|
given env: EventEnv = EventEnv(update)
|
||||||
object status:
|
boundary { for (i <- listeners) {
|
||||||
var _status = 0
|
|
||||||
def isOk: Boolean = _status > 0
|
|
||||||
def check (u: Boolean): Unit = if u then _status = _status + 1
|
|
||||||
try {
|
try {
|
||||||
updateThreadName("message")
|
updateThreadName("message")
|
||||||
if event.message ne null then status check i.onMessage
|
if update.message ne null then i.onMessage
|
||||||
updateThreadName("edited-message")
|
updateThreadName("edited-message")
|
||||||
if event.editedMessage ne null then status check i.onEditedMessage
|
if update.editedMessage ne null then i.onEditedMessage
|
||||||
updateThreadName("channel-post")
|
updateThreadName("channel-post")
|
||||||
if event.channelPost ne null then status check i.onChannelPost
|
if update.channelPost ne null then i.onChannelPost
|
||||||
updateThreadName("edited-channel-post")
|
updateThreadName("edited-channel-post")
|
||||||
if event.editedChannelPost ne null then status check i.onEditedChannelPost
|
if update.editedChannelPost ne null then i.onEditedChannelPost
|
||||||
updateThreadName("inline-query")
|
updateThreadName("inline-query")
|
||||||
if event.inlineQuery ne null then status check i.onInlineQuery
|
if update.inlineQuery ne null then i.onInlineQuery
|
||||||
updateThreadName("chosen-inline-result")
|
updateThreadName("chosen-inline-result")
|
||||||
if event.chosenInlineResult ne null then status check i.onChosenInlineResult
|
if update.chosenInlineResult ne null then i.onChosenInlineResult
|
||||||
updateThreadName("callback-query")
|
updateThreadName("callback-query")
|
||||||
if event.callbackQuery ne null then status check i.onCallbackQuery
|
if update.callbackQuery ne null then i.onCallbackQuery
|
||||||
updateThreadName("shipping-query")
|
updateThreadName("shipping-query")
|
||||||
if event.shippingQuery ne null then status check i.onShippingQuery
|
if update.shippingQuery ne null then i.onShippingQuery
|
||||||
updateThreadName("pre-checkout-query")
|
updateThreadName("pre-checkout-query")
|
||||||
if event.preCheckoutQuery ne null then status check i.onPreCheckoutQuery
|
if update.preCheckoutQuery ne null then i.onPreCheckoutQuery
|
||||||
updateThreadName("poll")
|
updateThreadName("poll")
|
||||||
if event.poll ne null then status check i.onPoll
|
if update.poll ne null then i.onPoll
|
||||||
updateThreadName("poll-answer")
|
updateThreadName("poll-answer")
|
||||||
if event.pollAnswer ne null then status check i.onPollAnswer
|
if update.pollAnswer ne null then i.onPollAnswer
|
||||||
updateThreadName("my-chat-member")
|
updateThreadName("my-chat-member")
|
||||||
if event.myChatMember ne null then status check i.onMyChatMemberUpdated
|
if update.myChatMember ne null then i.onMyChatMemberUpdated
|
||||||
updateThreadName("chat-member")
|
updateThreadName("chat-member")
|
||||||
if event.chatMember ne null then status check i.onChatMemberUpdated
|
if update.chatMember ne null then i.onChatMemberUpdated
|
||||||
updateThreadName("chat-join-request")
|
updateThreadName("chat-join-request")
|
||||||
if event.chatJoinRequest ne null then status check i.onChatJoinRequest
|
if update.chatJoinRequest ne null then i.onChatJoinRequest
|
||||||
} catch case e => {
|
} catch case e => {
|
||||||
val errorMessage = StringBuilder()
|
val errorMessage = StringBuilder()
|
||||||
errorMessage ++= "Event throws unexpected exception:\n"
|
errorMessage ++= "Event throws unexpected exception:\n"
|
||||||
@ -77,8 +75,8 @@ class EventListenerManager (using coeur: MornyCoeur) extends UpdatesListener {
|
|||||||
logger error errorMessage.toString
|
logger error errorMessage.toString
|
||||||
coeur.daemons.reporter.exception(e, "on event running")
|
coeur.daemons.reporter.exception(e, "on event running")
|
||||||
}
|
}
|
||||||
if (status isOk) return
|
if env.isEventOk then boundary.break()
|
||||||
}
|
}}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, EventListener}
|
||||||
import cc.sukazyo.cono.morny.bot.query.{InlineQueryUnit, MornyQueries}
|
import cc.sukazyo.cono.morny.bot.query.{InlineQueryUnit, MornyQueries}
|
||||||
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
|
||||||
@ -14,7 +14,8 @@ import scala.reflect.ClassTag
|
|||||||
|
|
||||||
class MornyOnInlineQuery (using queryManager: MornyQueries) (using coeur: MornyCoeur) extends EventListener {
|
class MornyOnInlineQuery (using queryManager: MornyQueries) (using coeur: MornyCoeur) extends EventListener {
|
||||||
|
|
||||||
override def onInlineQuery (using update: Update): Boolean = {
|
override def onInlineQuery (using event: EventEnv): Unit = {
|
||||||
|
import event.update
|
||||||
|
|
||||||
val results: List[InlineQueryUnit[_]] = queryManager query update
|
val results: List[InlineQueryUnit[_]] = queryManager query update
|
||||||
|
|
||||||
@ -27,12 +28,13 @@ class MornyOnInlineQuery (using queryManager: MornyQueries) (using coeur: MornyC
|
|||||||
resultAnswers += r.result
|
resultAnswers += r.result
|
||||||
}
|
}
|
||||||
|
|
||||||
if (results isEmpty) return false
|
if (results isEmpty) return;
|
||||||
|
|
||||||
coeur.account exec AnswerInlineQuery(
|
coeur.account exec AnswerInlineQuery(
|
||||||
update.inlineQuery.id, resultAnswers toArray:_*
|
update.inlineQuery.id, resultAnswers toArray:_*
|
||||||
).cacheTime(cacheTime).isPersonal(isPersonal)
|
).cacheTime(cacheTime).isPersonal(isPersonal)
|
||||||
true
|
|
||||||
|
event.setEventOk
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, EventListener}
|
||||||
import cc.sukazyo.cono.morny.Log.logger
|
import cc.sukazyo.cono.morny.Log.logger
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import cc.sukazyo.cono.morny.bot.command.MornyCommands
|
import cc.sukazyo.cono.morny.bot.command.MornyCommands
|
||||||
@ -9,7 +9,8 @@ import com.pengrad.telegrambot.model.{Message, Update}
|
|||||||
|
|
||||||
class MornyOnTelegramCommand (using commandManager: MornyCommands) (using coeur: MornyCoeur) extends EventListener {
|
class MornyOnTelegramCommand (using commandManager: MornyCommands) (using coeur: MornyCoeur) extends EventListener {
|
||||||
|
|
||||||
override def onMessage (using update: Update): Boolean = {
|
override def onMessage (using event: EventEnv): Unit = {
|
||||||
|
given update: Update = event.update
|
||||||
|
|
||||||
def _isCommandMessage(message: Message): Boolean =
|
def _isCommandMessage(message: Message): Boolean =
|
||||||
if message.text eq null then false
|
if message.text eq null then false
|
||||||
@ -17,17 +18,19 @@ class MornyOnTelegramCommand (using commandManager: MornyCommands) (using coeur:
|
|||||||
else if message.text startsWith "/ " then false
|
else if message.text startsWith "/ " then false
|
||||||
else true
|
else true
|
||||||
|
|
||||||
if !_isCommandMessage(update.message) then return false
|
if !_isCommandMessage(update.message) then return
|
||||||
val inputCommand = InputCommand(update.message.text drop 1)
|
val inputCommand = InputCommand(update.message.text drop 1)
|
||||||
|
event provide inputCommand
|
||||||
|
logger trace ":provided InputCommand for event"
|
||||||
|
|
||||||
if (!(inputCommand.command matches "^\\w+$"))
|
if (!(inputCommand.command matches "^\\w+$"))
|
||||||
logger debug "not command"
|
logger debug "not command"
|
||||||
false
|
|
||||||
else if ((inputCommand.target ne null) && (inputCommand.target != coeur.username))
|
else if ((inputCommand.target ne null) && (inputCommand.target != coeur.username))
|
||||||
logger debug "not morny command"
|
logger debug "not morny command"
|
||||||
false
|
|
||||||
else
|
else
|
||||||
logger debug "is command"
|
logger debug "is command"
|
||||||
commandManager.execute(using inputCommand)
|
if commandManager.execute(using inputCommand) then
|
||||||
|
event.setEventOk
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, EventListener}
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import com.pengrad.telegrambot.model.Update
|
import com.pengrad.telegrambot.model.Update
|
||||||
|
|
||||||
class MornyOnUpdateTimestampOffsetLock (using coeur: MornyCoeur) extends EventListener {
|
class MornyOnUpdateTimestampOffsetLock (using coeur: MornyCoeur) extends EventListener {
|
||||||
|
|
||||||
private def isOutdated (timestamp: Int): Boolean =
|
private def checkOutdated (timestamp: Int)(using event: EventEnv): Unit =
|
||||||
coeur.config.eventIgnoreOutdated && (timestamp < (coeur.coeurStartTimestamp/1000))
|
if coeur.config.eventIgnoreOutdated && (timestamp < (coeur.coeurStartTimestamp/1000)) then
|
||||||
|
event.setEventOk
|
||||||
|
|
||||||
override def onMessage (using update: Update): Boolean = isOutdated(update.message.date)
|
override def onMessage (using event: EventEnv): Unit = checkOutdated(event.update.message.date)
|
||||||
override def onEditedMessage (using update: Update): Boolean = isOutdated(update.editedMessage.date)
|
override def onEditedMessage (using event: EventEnv): Unit = checkOutdated(event.update.editedMessage.date)
|
||||||
override def onChannelPost (using update: Update): Boolean = isOutdated(update.channelPost.date)
|
override def onChannelPost (using event: EventEnv): Unit = checkOutdated(event.update.channelPost.date)
|
||||||
override def onEditedChannelPost (using update: Update): Boolean = isOutdated(update.editedChannelPost.date)
|
override def onEditedChannelPost (using event: EventEnv): Unit = checkOutdated(event.update.editedChannelPost.date)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, EventListener}
|
||||||
import cc.sukazyo.cono.morny.data.TelegramStickers
|
import cc.sukazyo.cono.morny.data.TelegramStickers
|
||||||
import cc.sukazyo.cono.morny.util.tgapi.formatting.TelegramFormatter.*
|
import cc.sukazyo.cono.morny.util.tgapi.formatting.TelegramFormatter.*
|
||||||
import cc.sukazyo.cono.morny.util.tgapi.TelegramExtensions.Bot.exec
|
import cc.sukazyo.cono.morny.util.tgapi.TelegramExtensions.Bot.exec
|
||||||
@ -15,10 +15,11 @@ class OnCallMe (using coeur: MornyCoeur) extends EventListener {
|
|||||||
|
|
||||||
private val me = coeur.config.trustedMaster
|
private val me = coeur.config.trustedMaster
|
||||||
|
|
||||||
override def onMessage (using update: Update): Boolean = {
|
override def onMessage (using event: EventEnv): Unit = {
|
||||||
|
import event.update
|
||||||
|
|
||||||
if update.message.text == null then return false
|
if update.message.text == null then return;
|
||||||
if update.message.chat.`type` != (Chat.Type Private) then return false
|
if update.message.chat.`type` != (Chat.Type Private) then return
|
||||||
|
|
||||||
//noinspection ScalaUnnecessaryParentheses
|
//noinspection ScalaUnnecessaryParentheses
|
||||||
val success = if me == -1 then false else
|
val success = if me == -1 then false else
|
||||||
@ -32,7 +33,7 @@ class OnCallMe (using coeur: MornyCoeur) extends EventListener {
|
|||||||
case cc if cc startsWith "cc::" =>
|
case cc if cc startsWith "cc::" =>
|
||||||
requestCustom(update.message)
|
requestCustom(update.message)
|
||||||
case _ =>
|
case _ =>
|
||||||
return false
|
return;
|
||||||
|
|
||||||
if success then
|
if success then
|
||||||
coeur.account exec SendSticker(
|
coeur.account exec SendSticker(
|
||||||
@ -45,7 +46,7 @@ class OnCallMe (using coeur: MornyCoeur) extends EventListener {
|
|||||||
TelegramStickers ID_501
|
TelegramStickers ID_501
|
||||||
).replyToMessageId(update.message.messageId)
|
).replyToMessageId(update.message.messageId)
|
||||||
|
|
||||||
true
|
event.setEventOk
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, EventListener}
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import cc.sukazyo.cono.morny.data.TelegramStickers
|
import cc.sukazyo.cono.morny.data.TelegramStickers
|
||||||
import cc.sukazyo.cono.morny.util.tgapi.TelegramExtensions.Bot.exec
|
import cc.sukazyo.cono.morny.util.tgapi.TelegramExtensions.Bot.exec
|
||||||
@ -52,26 +52,28 @@ class OnCallMsgSend (using coeur: MornyCoeur) extends EventListener {
|
|||||||
case _ => null
|
case _ => null
|
||||||
}
|
}
|
||||||
|
|
||||||
override def onMessage (using update: Update): Boolean = {
|
override def onMessage (using event: EventEnv): Unit = {
|
||||||
|
import event.update
|
||||||
|
|
||||||
val message = update.message
|
val message = update.message
|
||||||
|
|
||||||
if message.chat.`type` != Chat.Type.Private then return false
|
if message.chat.`type` != Chat.Type.Private then return;
|
||||||
if message.text eq null then return false
|
if message.text eq null then return;
|
||||||
if !(message.text startsWith "*msg") then return false
|
if !(message.text startsWith "*msg") then return;
|
||||||
|
|
||||||
if (!(coeur.trusted isTrusted message.from.id))
|
if (!(coeur.trusted isTrusted message.from.id))
|
||||||
coeur.account exec SendSticker(
|
coeur.account exec SendSticker(
|
||||||
message.chat.id,
|
message.chat.id,
|
||||||
TelegramStickers ID_403
|
TelegramStickers ID_403
|
||||||
).replyToMessageId(message.messageId)
|
).replyToMessageId(message.messageId)
|
||||||
return true
|
event.setEventOk
|
||||||
|
return;
|
||||||
|
|
||||||
if (message.text == "*msgsend") {
|
if (message.text == "*msgsend") {
|
||||||
|
|
||||||
if (message.replyToMessage eq null) return answer404
|
if (message.replyToMessage eq null) { answer404; return }
|
||||||
val messageToSend = MessageToSend from message.replyToMessage
|
val messageToSend = MessageToSend from message.replyToMessage
|
||||||
if ((messageToSend eq null) || (messageToSend.message eq null)) return answer404
|
if ((messageToSend eq null) || (messageToSend.message eq null)) { answer404; return }
|
||||||
val sendResponse = coeur.account execute messageToSend.toSendMessage()
|
val sendResponse = coeur.account execute messageToSend.toSendMessage()
|
||||||
|
|
||||||
if (sendResponse isOk) {
|
if (sendResponse isOk) {
|
||||||
@ -89,20 +91,21 @@ class OnCallMsgSend (using coeur: MornyCoeur) extends EventListener {
|
|||||||
).replyToMessageId(update.message.messageId).parseMode(ParseMode HTML)
|
).replyToMessageId(update.message.messageId).parseMode(ParseMode HTML)
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
event.setEventOk
|
||||||
|
return
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val messageToSend: MessageToSend =
|
val messageToSend: MessageToSend =
|
||||||
val raw: Message =
|
val raw: Message =
|
||||||
if (message.text == "*msg")
|
if (message.text == "*msg")
|
||||||
if message.replyToMessage eq null then return answer404
|
if message.replyToMessage eq null then { answer404; return }
|
||||||
else message.replyToMessage
|
else message.replyToMessage
|
||||||
else if (message.text startsWith "*msg")
|
else if (message.text startsWith "*msg")
|
||||||
message
|
message
|
||||||
else return answer404
|
else { answer404; return }
|
||||||
val _toSend = MessageToSend from raw
|
val _toSend = MessageToSend from raw
|
||||||
if _toSend eq null then return answer404
|
if _toSend eq null then { answer404; return }
|
||||||
else _toSend
|
else _toSend
|
||||||
|
|
||||||
val targetChatResponse = coeur.account execute GetChat(messageToSend.targetId)
|
val targetChatResponse = coeur.account execute GetChat(messageToSend.targetId)
|
||||||
@ -128,7 +131,7 @@ class OnCallMsgSend (using coeur: MornyCoeur) extends EventListener {
|
|||||||
).parseMode(ParseMode HTML).replyToMessageId(update.message.messageId)
|
).parseMode(ParseMode HTML).replyToMessageId(update.message.messageId)
|
||||||
}
|
}
|
||||||
|
|
||||||
if messageToSend.message eq null then return true
|
if messageToSend.message eq null then { answer404; return }
|
||||||
val testSendResponse = coeur.account execute
|
val testSendResponse = coeur.account execute
|
||||||
messageToSend.toSendMessage(update.message.chat.id).replyToMessageId(update.message.messageId)
|
messageToSend.toSendMessage(update.message.chat.id).replyToMessageId(update.message.messageId)
|
||||||
if (!(testSendResponse isOk))
|
if (!(testSendResponse isOk))
|
||||||
@ -140,15 +143,15 @@ class OnCallMsgSend (using coeur: MornyCoeur) extends EventListener {
|
|||||||
.stripMargin
|
.stripMargin
|
||||||
).parseMode(ParseMode HTML).replyToMessageId(update.message.messageId)
|
).parseMode(ParseMode HTML).replyToMessageId(update.message.messageId)
|
||||||
|
|
||||||
true
|
event.setEventOk
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private def answer404 (using update: Update): Boolean =
|
private def answer404 (using event: EventEnv): Unit =
|
||||||
coeur.account exec SendSticker(
|
coeur.account exec SendSticker(
|
||||||
update.message.chat.id,
|
event.update.message.chat.id,
|
||||||
TelegramStickers ID_404
|
TelegramStickers ID_404
|
||||||
).replyToMessageId(update.message.messageId)
|
).replyToMessageId(event.update.message.messageId)
|
||||||
true
|
event.setEventOk
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, EventListener}
|
||||||
import cc.sukazyo.cono.morny.Log.logger
|
import cc.sukazyo.cono.morny.Log.logger
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
@ -13,35 +13,38 @@ import scala.language.postfixOps
|
|||||||
|
|
||||||
class OnEventHackHandle (using coeur: MornyCoeur) extends EventListener {
|
class OnEventHackHandle (using coeur: MornyCoeur) extends EventListener {
|
||||||
|
|
||||||
import coeur.daemons.eventHack.trigger
|
private def trigger (chat_id: Long, from_id: Long)(using event: EventEnv): Unit =
|
||||||
|
given Update = event.update
|
||||||
|
if coeur.daemons.eventHack.trigger(chat_id, from_id) then
|
||||||
|
event.setEventOk
|
||||||
|
|
||||||
override def onMessage (using update: Update): Boolean =
|
override def onMessage (using event: EventEnv): Unit =
|
||||||
trigger(update.message.chat.id, update.message.from.id)
|
trigger(event.update.message.chat.id, event.update.message.from.id)
|
||||||
override def onEditedMessage (using update: Update): Boolean =
|
override def onEditedMessage (using event: EventEnv): Unit =
|
||||||
trigger(update.editedMessage.chat.id, update.editedMessage.from.id)
|
trigger(event.update.editedMessage.chat.id, event.update.editedMessage.from.id)
|
||||||
override def onChannelPost (using update: Update): Boolean =
|
override def onChannelPost (using event: EventEnv): Unit =
|
||||||
trigger(update.channelPost.chat.id, 0)
|
trigger(event.update.channelPost.chat.id, 0)
|
||||||
override def onEditedChannelPost (using update: Update): Boolean =
|
override def onEditedChannelPost (using event: EventEnv): Unit =
|
||||||
trigger(update.editedChannelPost.chat.id, 0)
|
trigger(event.update.editedChannelPost.chat.id, 0)
|
||||||
override def onInlineQuery (using update: Update): Boolean =
|
override def onInlineQuery (using event: EventEnv): Unit =
|
||||||
trigger(0, update.inlineQuery.from.id)
|
trigger(0, event.update.inlineQuery.from.id)
|
||||||
override def onChosenInlineResult (using update: Update): Boolean =
|
override def onChosenInlineResult (using event: EventEnv): Unit =
|
||||||
trigger(0, update.chosenInlineResult.from.id)
|
trigger(0, event.update.chosenInlineResult.from.id)
|
||||||
override def onCallbackQuery (using update: Update): Boolean =
|
override def onCallbackQuery (using event: EventEnv): Unit =
|
||||||
trigger(0, update.callbackQuery.from.id)
|
trigger(0, event.update.callbackQuery.from.id)
|
||||||
override def onShippingQuery (using update: Update): Boolean =
|
override def onShippingQuery (using event: EventEnv): Unit =
|
||||||
trigger(0, update.shippingQuery.from.id)
|
trigger(0, event.update.shippingQuery.from.id)
|
||||||
override def onPreCheckoutQuery (using update: Update): Boolean =
|
override def onPreCheckoutQuery (using event: EventEnv): Unit =
|
||||||
trigger(0, update.preCheckoutQuery.from.id)
|
trigger(0, event.update.preCheckoutQuery.from.id)
|
||||||
override def onPoll (using update: Update): Boolean =
|
override def onPoll (using event: EventEnv): Unit =
|
||||||
trigger(0, 0)
|
trigger(0, 0)
|
||||||
override def onPollAnswer (using update: Update): Boolean =
|
override def onPollAnswer (using event: EventEnv): Unit =
|
||||||
trigger(0, update.pollAnswer.user.id)
|
trigger(0, event.update.pollAnswer.user.id)
|
||||||
override def onMyChatMemberUpdated (using update: Update): Boolean =
|
override def onMyChatMemberUpdated (using event: EventEnv): Unit =
|
||||||
trigger(update.myChatMember.chat.id, update.myChatMember.from.id)
|
trigger(event.update.myChatMember.chat.id, event.update.myChatMember.from.id)
|
||||||
override def onChatMemberUpdated (using update: Update): Boolean =
|
override def onChatMemberUpdated (using event: EventEnv): Unit =
|
||||||
trigger(update.chatMember.chat.id, update.chatMember.from.id)
|
trigger(event.update.chatMember.chat.id, event.update.chatMember.from.id)
|
||||||
override def onChatJoinRequest (using update: Update): Boolean =
|
override def onChatJoinRequest (using event: EventEnv): Unit =
|
||||||
trigger(update.chatJoinRequest.chat.id, update.chatJoinRequest.from.id)
|
trigger(event.update.chatJoinRequest.chat.id, event.update.chatJoinRequest.from.id)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, EventListener}
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import cc.sukazyo.cono.morny.daemon.{MedicationTimer, MornyDaemons}
|
import cc.sukazyo.cono.morny.daemon.{MedicationTimer, MornyDaemons}
|
||||||
import com.pengrad.telegrambot.model.{Message, Update}
|
import com.pengrad.telegrambot.model.{Message, Update}
|
||||||
|
|
||||||
class OnMedicationNotifyApply (using coeur: MornyCoeur) extends EventListener {
|
class OnMedicationNotifyApply (using coeur: MornyCoeur) extends EventListener {
|
||||||
|
|
||||||
override def onEditedMessage (using event: Update): Boolean =
|
override def onEditedMessage (using event: EventEnv): Unit =
|
||||||
editedMessageProcess(event.editedMessage)
|
editedMessageProcess(event.update.editedMessage)
|
||||||
override def onEditedChannelPost (using event: Update): Boolean =
|
override def onEditedChannelPost (using event: EventEnv): Unit =
|
||||||
editedMessageProcess(event.editedChannelPost)
|
editedMessageProcess(event.update.editedChannelPost)
|
||||||
|
|
||||||
private def editedMessageProcess (edited: Message): Boolean = {
|
private def editedMessageProcess (edited: Message)(using event: EventEnv): Unit = {
|
||||||
if edited.chat.id != coeur.config.medicationNotifyToChat then return false
|
if edited.chat.id != coeur.config.medicationNotifyToChat then return;
|
||||||
coeur.daemons.medicationTimer.refreshNotificationWrite(edited)
|
coeur.daemons.medicationTimer.refreshNotificationWrite(edited)
|
||||||
true
|
event.setEventOk
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, EventListener}
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import cc.sukazyo.cono.morny.bot.event.OnQuestionMarkReply.isAllMessageMark
|
import cc.sukazyo.cono.morny.bot.event.OnQuestionMarkReply.isAllMessageMark
|
||||||
import cc.sukazyo.cono.morny.util.tgapi.TelegramExtensions.Bot.exec
|
import cc.sukazyo.cono.morny.util.tgapi.TelegramExtensions.Bot.exec
|
||||||
@ -12,19 +12,20 @@ import scala.util.boundary
|
|||||||
|
|
||||||
class OnQuestionMarkReply (using coeur: MornyCoeur) extends EventListener {
|
class OnQuestionMarkReply (using coeur: MornyCoeur) extends EventListener {
|
||||||
|
|
||||||
override def onMessage (using event: Update): Boolean = {
|
override def onMessage (using event: EventEnv): Unit = {
|
||||||
|
import event.update
|
||||||
|
|
||||||
if event.message.text eq null then return false
|
if update.message.text eq null then return
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.util.UseMath.over
|
import cc.sukazyo.cono.morny.util.UseMath.over
|
||||||
import cc.sukazyo.cono.morny.util.UseRandom.chance_is
|
import cc.sukazyo.cono.morny.util.UseRandom.chance_is
|
||||||
if (1 over 8) chance_is false then return false
|
if (1 over 8) chance_is false then return;
|
||||||
if !isAllMessageMark(using event.message.text) then return false
|
if !isAllMessageMark(using update.message.text) then return;
|
||||||
|
|
||||||
coeur.account exec SendMessage(
|
coeur.account exec SendMessage(
|
||||||
event.message.chat.id, event.message.text
|
update.message.chat.id, update.message.text
|
||||||
).replyToMessageId(event.message.messageId)
|
).replyToMessageId(update.message.messageId)
|
||||||
true
|
event.setEventOk
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,23 +1,28 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, EventListener}
|
||||||
import cc.sukazyo.cono.morny.bot.command.MornyCommands
|
import cc.sukazyo.cono.morny.bot.command.MornyCommands
|
||||||
import cc.sukazyo.cono.morny.util.tgapi.InputCommand
|
import cc.sukazyo.cono.morny.util.tgapi.InputCommand
|
||||||
|
import cc.sukazyo.cono.morny.Log.logger
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import com.pengrad.telegrambot.model.Update
|
import com.pengrad.telegrambot.model.Update
|
||||||
|
|
||||||
class OnUniMeowTrigger (using commands: MornyCommands) (using coeur: MornyCoeur) extends EventListener {
|
class OnUniMeowTrigger (using commands: MornyCommands) (using coeur: MornyCoeur) extends EventListener {
|
||||||
|
|
||||||
override def onMessage (using update: Update): Boolean = {
|
override def onMessage (using event: EventEnv): Unit = {
|
||||||
|
|
||||||
if update.message.text eq null then return false
|
event use classOf[InputCommand] consume { input =>
|
||||||
var ok = false
|
logger trace s"got input command {$input} from event-context"
|
||||||
for ((name, command) <- commands.commands_uni)
|
|
||||||
val _name = "/"+name
|
for ((name, command_instance) <- commands.commands_uni) {
|
||||||
if (_name == update.message.text)
|
logger trace s"checking uni-meow $name"
|
||||||
command.execute(using InputCommand(_name))
|
if (name == input.command)
|
||||||
ok = true
|
logger trace "checked"
|
||||||
ok
|
command_instance.execute(using input, event.update)
|
||||||
|
event.setEventOk
|
||||||
|
}
|
||||||
|
|
||||||
|
} onfail { logger trace "not command (for uni-meow)" }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, 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.SendMessage
|
||||||
@ -17,10 +17,11 @@ class OnUserRandom (using coeur: MornyCoeur) {
|
|||||||
private val USER_OR_QUERY = "^(.+)(?:还是|or)(.+)$" r
|
private val USER_OR_QUERY = "^(.+)(?:还是|or)(.+)$" r
|
||||||
private val USER_IF_QUERY = "^(.+)(?:吗\\?|?|\\?|吗?)$" r
|
private val USER_IF_QUERY = "^(.+)(?:吗\\?|?|\\?|吗?)$" r
|
||||||
|
|
||||||
override def onMessage (using update: Update): Boolean = {
|
override def onMessage (using event: EventEnv): Unit = {
|
||||||
|
import event.update
|
||||||
|
|
||||||
if update.message.text == null then return false
|
if update.message.text == null then return;
|
||||||
if !(update.message.text startsWith "/") then return false
|
if !(update.message.text startsWith "/") then return
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.util.UseRandom.rand_half
|
import cc.sukazyo.cono.morny.util.UseRandom.rand_half
|
||||||
val query = update.message.text substring 1
|
val query = update.message.text substring 1
|
||||||
@ -29,17 +30,17 @@ class OnUserRandom (using coeur: MornyCoeur) {
|
|||||||
if rand_half then _con1 else _con2
|
if rand_half then _con1 else _con2
|
||||||
case USER_IF_QUERY(_con) =>
|
case USER_IF_QUERY(_con) =>
|
||||||
// for capability with [[OnQuestionMarkReply]]
|
// for capability with [[OnQuestionMarkReply]]
|
||||||
if OnQuestionMarkReply.isAllMessageMark(using _con) then return false
|
if OnQuestionMarkReply.isAllMessageMark(using _con) then return;
|
||||||
(if rand_half then "不" else "") + _con
|
(if rand_half then "不" else "") + _con
|
||||||
case _ => null
|
case _ => null
|
||||||
|
|
||||||
//noinspection DuplicatedCode
|
if result == null then return;
|
||||||
if result == null then return false
|
|
||||||
|
|
||||||
coeur.account exec SendMessage(
|
coeur.account exec SendMessage(
|
||||||
update.message.chat.id, result
|
update.message.chat.id,
|
||||||
|
result
|
||||||
).replyToMessageId(update.message.messageId)
|
).replyToMessageId(update.message.messageId)
|
||||||
true
|
event.setEventOk
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,23 +52,23 @@ class OnUserRandom (using coeur: MornyCoeur) {
|
|||||||
private val word_pattern = "^([\\w\\W]*)?(?:尊嘟假嘟|(?:O\\.o|o\\.O))$"r
|
private val word_pattern = "^([\\w\\W]*)?(?:尊嘟假嘟|(?:O\\.o|o\\.O))$"r
|
||||||
private val keywords = Array("尊嘟假嘟", "O.o", "o.O")
|
private val keywords = Array("尊嘟假嘟", "O.o", "o.O")
|
||||||
|
|
||||||
override def onMessage (using event: Update): Boolean = {
|
override def onMessage (using event: EventEnv): Unit = {
|
||||||
|
import event.update
|
||||||
|
|
||||||
if event.message.text == null then return false
|
if update.message.text == null then return
|
||||||
|
|
||||||
var result: String|Null = null
|
var result: String|Null = null
|
||||||
import cc.sukazyo.cono.morny.util.UseRandom.rand_half
|
import cc.sukazyo.cono.morny.util.UseRandom.rand_half
|
||||||
for (k <- keywords)
|
for (k <- keywords)
|
||||||
if event.message.text endsWith k then
|
if update.message.text endsWith k then
|
||||||
result = if rand_half then "尊嘟" else "假嘟"
|
result = if rand_half then "尊嘟" else "假嘟"
|
||||||
//noinspection DuplicatedCode
|
if result == null then return;
|
||||||
if result == null then return false
|
|
||||||
|
|
||||||
coeur.account exec SendMessage(
|
coeur.account exec SendMessage(
|
||||||
event.message.chat.id,
|
update.message.chat.id,
|
||||||
result
|
result
|
||||||
).replyToMessageId(event.message.messageId)
|
).replyToMessageId(update.message.messageId)
|
||||||
true
|
event.setEventOk
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.event
|
package cc.sukazyo.cono.morny.bot.event
|
||||||
|
|
||||||
import cc.sukazyo.cono.morny.MornyCoeur
|
import cc.sukazyo.cono.morny.MornyCoeur
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener
|
import cc.sukazyo.cono.morny.bot.api.{EventEnv, EventListener}
|
||||||
import cc.sukazyo.cono.morny.util.tgapi.formatting.TelegramFormatter.*
|
import cc.sukazyo.cono.morny.util.tgapi.formatting.TelegramFormatter.*
|
||||||
import cc.sukazyo.cono.morny.util.tgapi.formatting.TelegramParseEscape.escapeHtml as h
|
import cc.sukazyo.cono.morny.util.tgapi.formatting.TelegramParseEscape.escapeHtml as h
|
||||||
import cc.sukazyo.cono.morny.util.UniversalCommand
|
import cc.sukazyo.cono.morny.util.UniversalCommand
|
||||||
@ -16,10 +16,11 @@ class OnUserSlashAction (using coeur: MornyCoeur) extends EventListener {
|
|||||||
|
|
||||||
private val TG_FORMAT = "^\\w+(@\\w+)?$"r
|
private val TG_FORMAT = "^\\w+(@\\w+)?$"r
|
||||||
|
|
||||||
override def onMessage (using update: Update): Boolean = {
|
override def onMessage (using event: EventEnv): Unit = {
|
||||||
|
|
||||||
|
import event.update
|
||||||
val text = update.message.text
|
val text = update.message.text
|
||||||
if text == null then return false
|
if text == null then return;
|
||||||
|
|
||||||
if (text startsWith "/") {
|
if (text startsWith "/") {
|
||||||
|
|
||||||
@ -39,14 +40,14 @@ class OnUserSlashAction (using coeur: MornyCoeur) extends EventListener {
|
|||||||
actions(0) match
|
actions(0) match
|
||||||
// ignore Telegram command like
|
// ignore Telegram command like
|
||||||
case TG_FORMAT(_) =>
|
case TG_FORMAT(_) =>
|
||||||
return false
|
return;
|
||||||
// ignore Path link
|
// ignore Path link
|
||||||
case x if x contains "/" => return false
|
case x if x contains "/" => return;
|
||||||
case _ =>
|
case _ =>
|
||||||
|
|
||||||
val isHardParse = actions(0) isBlank
|
val isHardParse = actions(0) isBlank
|
||||||
def hp_len(i: Int) = if isHardParse then i+1 else i
|
def hp_len(i: Int) = if isHardParse then i+1 else i
|
||||||
if isHardParse && actions.length < 2 then return false
|
if isHardParse && actions.length < 2 then return
|
||||||
val v_verb = actions(hp_len(0))
|
val v_verb = actions(hp_len(0))
|
||||||
val hasObject = actions.length != hp_len(1)
|
val hasObject = actions.length != hp_len(1)
|
||||||
val v_object =
|
val v_object =
|
||||||
@ -70,9 +71,9 @@ class OnUserSlashAction (using coeur: MornyCoeur) extends EventListener {
|
|||||||
if hasObject then h(v_object+" ") else ""
|
if hasObject then h(v_object+" ") else ""
|
||||||
)
|
)
|
||||||
).parseMode(ParseMode HTML).replyToMessageId(update.message.messageId)
|
).parseMode(ParseMode HTML).replyToMessageId(update.message.messageId)
|
||||||
true
|
event.setEventOk
|
||||||
|
|
||||||
} else false
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
package live
|
package live
|
||||||
|
|
||||||
|
import cc.sukazyo.cono.morny.bot.api.EventEnv
|
||||||
import cc.sukazyo.cono.morny.test.utils.BiliToolTest
|
import cc.sukazyo.cono.morny.test.utils.BiliToolTest
|
||||||
|
|
||||||
@main def LiveMain (args: String*): Unit = {
|
@main def LiveMain (args: String*): Unit = {
|
||||||
|
|
||||||
org.scalatest.run(BiliToolTest())
|
val env: EventEnv = EventEnv(null)
|
||||||
|
|
||||||
|
env provide "abcdefg"
|
||||||
|
|
||||||
|
env use classOf[String] consume { (str: String) => println(str) } onfail { println("no str found in the env") }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user