- 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"
- add /info (without subcommand)
- add about pic
- add morny about links
- add MornyAssets to manager & use assets
- add TelegramImages to manager images that in use
- with a AssetsFileImage
- with IMG_ABOUT
- add MornyAbout
- changed MornyHello to MornyAbout
- add about links (used in /info)
- remove HelloOnStart
- added `--dinner-chat`/`-chd` startup param for setup dinner chat id
- fixed some unclosed resource
- TrackerDataManager changed method to get FileChannel (I don't know if it works)
- MornyCLI scanner uses try-with-resources
- declared directly used dependencies
- okhttp: 4.11.0
- gson: 2.10.1
- some minor refactors
- MornyCoeur.main rename to .init
- added package `internal` and move @BuildConfigField to it
- added new util class OkHttpPublic with MediaTypes in use
- added javadoc for TrackerDataManager
- and so on...
- add configs for medication timer
- medicationNotifyToChat
- default is -1001729016815L(Annie medication notify chat)
- add param --medication-notify-chat / -medc to set it, accept a long number.
- medicationTimerUseTimezone
- default is ZoneOffset.UTC(means +00:00)
- add param --medication-notify-timezone / -medtz to set it, accept a number that means timezone hours
- medicationNotifyAt
- default is a empty Set
- add param --medication-notify-times / -medt to set it, accept a hour(0~23) list seperated by ","
- now medication timer will exit if the notify-times is empty
- changed the Test data-source for MedicationTimer#calcNextRoutineTimestamp