- Now the status of EventEnv is a State array that infers the state history
- State can be OK or CANCELED, and can be set multiple times
- state method can get the last state set, and status method can get the state history
- Default EventListener.executeFilter implementation is changed to true if stats is null
- add consume[T](T=>Unit) for EventEnv, to simplifying the old consume[T](Class[T])(T=>Unit)
- changed execution sort of EventListener in EventListenerManager. Now atEventPost method will be run after all events' normal listeners complete.
- cha OnMedicationNotifyApply will only tag event as OK when the refresh function works (fixed part of the wrong OK state)
- cha MornyOnUpdateTimestampOffsetLock tag event CANCELED but not OK to fix part of the wrong OK state
- add err handler for UpdateListener in MornyCoeur
- for network-related exception, will only output exception basic message and not report.
- for other type of exception, will output all message of exception and do report.
- Scheduler's runnerName now is `$classBaseName@$hashCode`
- add for EventEnv a timeStartup field
- cha EventListener and EventListenerManager
- add for EventListener a method executeFilter used to manager if an event should be run. This replaced the condition statement inside the EventListenerManager
- add for EventListener a method atEventPost, this will run at current event listener is on complete
- add for MornyConfig a reportZone field
- can be set by `--report-zone`
- used for controlling Morny Report daemon uses the zoned time to send report. default is system default time zone.
- add for MornyReport new EventStatistics and DailyReportTask
- add for MornyInformation command new subcommand `event` to manually show MornyReport.EventStatistics info.
- add WatchDog and MornyCoeur.watchDog, used for checking if the machine is in sleep mode and notify the MornyCoeur.tasks to avoid timing problem
- fix CronTask frequency got initialize problem
- add slf4j-nop for project
- add lib cron-utils: v9.2.0
- add CronTask
- add CronTask's test
- change MedicationTimer using cron as time calculation backend (not using CronTask)
- change OnQuestionMarkReply support `⸘`
- minor SchedulerTest "immediately" test logic changes
## 📇 Function & Mechanisms
- add for /encrypt
- add urlencode / urldecode sub-command: they process text input only
- add alias /enc
- add for InlineBilibiliShare
- add b23.tv share-link parse
- add b23.tv video link parse
## 🔩 for self-hosted/developer
- cha EventListener use EventEnv instead of Update
- new LogLevel NOTICE(notice) and ATTION(attention)
- with new formatter
- add MornyLogLevels with new log level NOTICE(notice) and ATTION(attention)
- make mechanic and morny (but not coeur) related INFO to NOTICE, warn to ATTION
- add MornyFormatterConsole to support the formatted time display, and some other formatter changed
- now startup key output will hide key except the starting and ending 4 chars
- change the function definition of consume in EventEnv
- removed src/test/scala/live/LiveMain
- and added gitignore for src/test/scala/live
## 📇 Function & Mechanisms
- cha 尊嘟假嘟 from full match to endswith match
## 🧯 Bug Fix
- fix MedicationTimer thread controller fault
## 🔩 for self-hosted/developer
- change param --outdated-block to --outdated-ignore
- deprecated param --outdated-block
## 📇 Function & Mechanisms
- new /info command
- root /info command with new introduction page design
- /start command with new design like new /info
- /version and /runtime merged to /info
- old command still available though been hidden
- new "/x?" in random tools
- new function: reply ? for a ?
## 🔌 for Trusted/Admin
- new MornyReport report exceptions or startup/exit events to telegram chat
- cha *msg supported body-less send check
## 🔩 for self-hosted/developer
- Project port to Scala
- add Dockerfile & docker-compose.yml
- add param for Medication Timer
- param: --medication-notify-chat / -medc
- param:--medication-notify-timezone / -medtz
- param: --medication-notify-times / -medt
- cha unset default params (--master ect. is -1 as default)
- add ID_501 as Morny function return while not supported by provided master
## 🧯 Bug Fix
- fix unclosed quote will cause exceptions while parsing command.
- fix some hidden command cannot execute due to no support to non-ascii command name. (also changed its behavor while I won't tell too much here)
- fix error while converting millisecond to nanosecond in Medication Timer
- inline query ShareBilibiliVideo now will not receive illegal av/BV id which can cause exceptions.
- /nbnhhsh will now send 404 when there's no input text.
- fix --trusted-chat -1 will caused MornyTrusted throws exception, now it will judge(ignore) the value as design.
- fixed --report-to -1 not process normally
- added missing --dinner-chat startup param.
- Some minor fixes while porting coeur to scala is not listed.
unset the following defaults value:
- master
- trusted chat
- dinner chat id
- report to chat
- medication notify to chat
and make the related function can be shutdown by the new -1 defaults:
- MedicationTimer daemon will not run when medication-notify-to-chat or notify-at-hour is not set
- MornyReport will do not report when report-to is not set
- OnCallMe will send ID_501 when there's no master
- OnCallMe.requestLastDinner will send ID_501 when there's no dinner-chat
fix when using universal command parse may throw exception
- refactor ExtraAction to TelegramExtensions
- make exec a TelegramBot extension
- refactor isUserInGroup to Chat extension hasMember and memberHasPermission
- added LimBoUser and LimboChat for capability
- deleted TelegramUpdatesListener, and make EventListenerManager implemented UpdatesListener
- change some value definition, change startup and exit process in MornyCoeur
- removed updatesListener, extract its manager to eventManager in Coeur
- added account.shutdown before other's
- moved Morny's startup/exit report to Coeur
- change exitCleanup thread name from "morny-exiting" to "system-exit"