refactor: use plugins to combine multiple functions #1

Merged
trle5 merged 250 commits from alpha into main 2025-11-05 23:05:51 +08:00
Owner

project changes:

the bot part

  • separate the components
  • database modularization support
  • supports multiple inline command, users can set the default plugin
  • add check functions for update type, message type and message attributes
  • redis database for storing user data and usages
  • add a help handle to allow users to view plugin help
  • add recover function to catch panic and print the stack trace
  • show build info when init and /version command
  • add multiple error handling package flaterr
  • created a package to handle errors and provide error message templates
  • add inline query parser in inline_utils
  • add Makefile to compile bot
  • add zerolog as logger
  • add a limiter package to limit the request rate

the plugin part

  • split modules into sub-packages
  • add a generic yaml database read/save handler for plugins
  • plugins need to handle the database themselves, and now need to be stored separately
  • now to add or remove plugins, just delete the corresponding source code file in the plugin folder before compile
  • plugins need to be registered in a unique init() function or manually initialize in InitPlugins() function
  • plugins can register types to select the update scope they can access, like handler_params.Message, handler_params.InlineQuery
  • allows use bot instances to perform certain actions when registering plugins
  • plugins can register state handler, aka FSM
  • by message type handler can set AllowAutoTrigger flag, but if there is more than one handler of the same type, a menu will be sent
  • plugins can register handler by message chat ID or message type

plugin changes:

udonese

  • when a user send message as a channel, channel information can be recorded
  • no longer case-sensitive when recording already-existing words
  • move udonese(no prefix) command as a slash command /udonese
  • add a keyboard to allow manager to add or remove words and meanings

forwardonly (rename to limit_message)

  • it has been upgraded and is now renamed to "limit_message"
  • it can auto delete messages based on message type or attributes, depending on how the user configures it
  • now it has an inline keyboard, users can use it more conveniently

voicelist (deprecated)

  • it works fine, but its contents are now included in the channel public collection of savedmessage plugin

saved_message

  • support more message types (Text, Audio, Document, Gif, Photo, Sticker, Video, VideoNote, Voice and Mpeg4gif)
  • support keyword search
  • support pagination
  • add by message type handler to quickly save message
  • use meilisearch as database
  • support channel mode to auto save all new message in target channel
  • add sub-package message_index allow index message (use bot.ForwardMessage method to index message)
  • separate user and public channel saved message into two inline handlers
  • after save a channel message, bot will send a action keyboard to the target chat

sticker

  • when user sends a single sticker, show the info of the stickerset
  • support downloading the entire sticker pack
  • add ability to convert WebM and mp4 to GIF, the conversion process is handled by ffmpeg
  • add ability to convert .tgs to GIF, the conversion process is handled by lottie-converter and gifski
  • add collect stickerset function, allows admin collect a stickerset to a channel, also record its info
  • add a mutex lock to prevent async sticker downloads
  • add hash to sticker packs to allow use of stickers from packaged zip files without further convert
  • sticker packs with more than 120 stickers are not allowed to be downloaded, such as [AnimatedEmojies] (https://t.me/addstickers/AnimatedEmojies)

detect_keyword (new)

  • listening to keywords set by users in channels or groups in real time
  • support group, supergroup and channel

teamspeak3 (new)

  • use polling to detect user changes and send notifications or edit pinned message
  • show error info and auto reconnect with increment delay
  • added a keyboard to allow users to set notification preferences

search_images (new)

## project changes: ### the bot part - separate the components - database modularization support - supports multiple inline command, users can set the default plugin - add check functions for update type, message type and message attributes - redis database for storing user data and usages - add a help handle to allow users to view plugin help - add recover function to catch panic and print the stack trace - show build info when init and `/version` command - add multiple error handling package `flaterr` - created a package to handle errors and provide error message templates - add inline query parser in `inline_utils` - add Makefile to compile bot - add [zerolog](https://github.com/rs/zerolog) as logger - add a `limiter` package to limit the request rate ### the plugin part - split modules into sub-packages - add a generic yaml database read/save handler for plugins - plugins need to handle the database themselves, and now need to be stored separately - now to add or remove plugins, just delete the corresponding source code file in the plugin folder before compile - plugins need to be registered in a unique `init()` function or manually initialize in `InitPlugins()` function - plugins can register types to select the update scope they can access, like `handler_params.Message`, `handler_params.InlineQuery` - allows use bot instances to perform certain actions when registering plugins - plugins can register state handler, aka `FSM` - by message type handler can set `AllowAutoTrigger` flag, but if there is more than one handler of the same type, a menu will be sent - plugins can register handler by message chat ID or message type ## plugin changes: ### `udonese` - when a user send message as a channel, channel information can be recorded - no longer case-sensitive when recording already-existing words - move `udonese`(no prefix) command as a slash command `/udonese` - add a keyboard to allow manager to add or remove words and meanings ### `forwardonly` (rename to `limit_message`) - it has been upgraded and is now renamed to "limit_message" - it can auto delete messages based on message type or attributes, depending on how the user configures it - now it has an inline keyboard, users can use it more conveniently ### `voicelist` (deprecated) - it works fine, but its contents are now included in the channel public collection of savedmessage plugin ### `saved_message` - support more message types (Text, Audio, Document, Gif, Photo, Sticker, Video, VideoNote, Voice and Mpeg4gif) - support keyword search - support pagination - add by message type handler to quickly save message - use `meilisearch` as database - support channel mode to auto save all new message in target channel - add sub-package `message_index` allow index message (use bot.ForwardMessage method to index message) - separate user and public channel saved message into two inline handlers - after save a channel message, bot will send a action keyboard to the target chat ### `sticker` - when user sends a single sticker, show the info of the stickerset - support downloading the entire sticker pack - add ability to convert `WebM` and `mp4` to `GIF`, the conversion process is handled by [ffmpeg](https://ffmpeg.org/) - add ability to convert `.tgs` to `GIF`, the conversion process is handled by [lottie-converter](https://github.com/ed-asriyan/lottie-converter) and [gifski](https://github.com/ImageOptim/gifski) - add collect stickerset function, allows admin collect a stickerset to a channel, also record its info - add a mutex lock to prevent async sticker downloads - add hash to sticker packs to allow use of stickers from packaged zip files without further convert - sticker packs with more than 120 stickers are not allowed to be downloaded, such as [AnimatedEmojies] (https://t.me/addstickers/AnimatedEmojies) ### `detect_keyword` (new) - listening to keywords set by users in channels or groups in real time - support group, supergroup and channel ### `teamspeak3` (new) - use polling to detect user changes and send notifications or edit pinned message - show error info and auto reconnect with increment delay - added a keyboard to allow users to set notification preferences ### `search_images` (new) - this feature is inspired by [@soutubot](https://t.me/soutubot)
trle5 added 33 commits 2025-04-03 21:45:23 +08:00
auto init plugins using package-specific `init()` func
todo: database can't use `init()` func
change voices urls
use strings.EqualFold to compare udonese word
add init() for plugin_sticker
move `/start via-inline_noreply` as build-in handler
ignore `/db_yaml/savedmessage` path
rename function in savedmessage
I didn't know how to modify the logical operators, so I left a switch
can set inline default command
add plugin handler nil check (while use, need precheck)
make udonese handler as a handler by chat id
remove pre callbackquery answer
trle5 added 3 commits 2025-04-03 22:49:26 +08:00
trle5 added 1 commit 2025-04-05 02:11:27 +08:00
trle5 added 1 commit 2025-04-05 23:22:23 +08:00
add RemoveIDPrefix() func in utils
ignore `/db_yaml/detectkeyword` folder
trle5 added 1 commit 2025-04-08 16:52:31 +08:00
add TextForTrueOrFalse() to package utils
trle5 added 1 commit 2025-04-09 00:24:28 +08:00
trle5 added 3 commits 2025-04-10 23:18:19 +08:00
trle5 added 1 commit 2025-04-10 23:41:55 +08:00
trle5 added 1 commit 2025-04-11 00:14:55 +08:00
trle5 added 1 commit 2025-04-11 00:35:08 +08:00
trle5 added 1 commit 2025-04-11 00:39:20 +08:00
trle5 changed title from WIP: refactor to refactor 2025-04-11 00:48:30 +08:00
trle5 added 1 commit 2025-04-13 00:53:34 +08:00
use single string var for default inline handler
fix empty meaning list panic for udonese
rename structs name in plugin_utils
stop add plugin without command or argument flag
add some check in utils
trle5 added 1 commit 2025-04-13 01:01:24 +08:00
trle5 added 2 commits 2025-04-14 00:54:29 +08:00
allow add keyword in group
stop add repeated keyword
add mention count
show message from in mention
can show msg from user as channel or group anonymous
trle5 added 2 commits 2025-04-14 21:40:39 +08:00
trle5 added 1 commit 2025-04-14 22:11:11 +08:00
trle5 added 2 commits 2025-04-14 23:45:38 +08:00
trle5 force-pushed alpha from 55eab58f07 to 066a28c0df 2025-04-15 15:16:31 +08:00 Compare
trle5 added 2 commits 2025-04-18 03:07:48 +08:00
trle5 added 1 commit 2025-04-19 02:26:06 +08:00
show sticker info when user send a sticker
also using sticker pack info as sticker filename
trle5 added 3 commits 2025-04-22 04:32:05 +08:00
move helpHandler and startHandler to build-in handler
add chat disable by admin description
fix when disabled for group, rebuild listen list will add duplicate user ID
trle5 added 1 commit 2025-04-27 14:27:59 +08:00
add inline button when saved message
trle5 added 1 commit 2025-04-27 21:41:28 +08:00
add debug script from v2ex
some comment
trle5 force-pushed alpha from 556f0aebc5 to b09f172f39 2025-04-27 21:42:03 +08:00 Compare
trle5 added 2 commits 2025-04-28 22:35:20 +08:00
trle5 added 2 commits 2025-04-30 02:00:48 +08:00
trle5 added 1 commit 2025-04-30 02:19:32 +08:00
trle5 added 4 commits 2025-04-30 22:50:52 +08:00
allow add reply markup in help text
add a `inline_default_noedit_` prefix for change default command for inline mode but not edit message
trle5 added 1 commit 2025-04-30 23:07:26 +08:00
trle5 added 1 commit 2025-04-30 23:21:57 +08:00
trle5 added 1 commit 2025-05-01 00:12:35 +08:00
trle5 added 2 commits 2025-05-08 21:37:22 +08:00
trle5 added 3 commits 2025-05-10 01:21:50 +08:00
trle5 added 1 commit 2025-05-10 01:33:11 +08:00
trle5 added 2 commits 2025-05-10 13:52:25 +08:00
trle5 added 4 commits 2025-05-13 00:41:27 +08:00
fix `helpCallbackHandler` can't show no plugin help alert
auto squash text or caption when its too long (maybe with some bug)
fix origin info from user error
trle5 added 1 commit 2025-05-13 00:46:26 +08:00
trle5 added 2 commits 2025-05-13 01:04:00 +08:00
trle5 added 1 commit 2025-05-14 20:58:33 +08:00
make polling interval as a variable
trle5 added 1 commit 2025-05-15 00:51:07 +08:00
structs `SubHandlerOpts` rename to `SubHandlerParams`
trle5 force-pushed alpha from 6165e4444d to 24acba0bba 2025-05-15 02:07:05 +08:00 Compare
trle5 added 1 commit 2025-05-16 00:05:05 +08:00
add a `(MessageType)InString()` func can output messtype as a `MessageTypeList` (string) type
refactor `handler_by_message_type` package
register `EchoStickerHandler()` func as a handler by message type handler
update no default handler by message type tips in private chat
trle5 added 3 commits 2025-05-18 00:06:28 +08:00
move remove handler by chat ID action into `listenUserStatus()` function
can show a keyboard when have more that one handler by message type
if  `AllowAutoTrigger` flag not true, also show a keyboard to let user select
add some comment
trle5 changed title from refactor to refactor: make the bot framework into a template 2025-05-18 00:27:28 +08:00
trle5 changed title from refactor: make the bot framework into a template to WIP: refactor: make the bot framework into a template 2025-06-07 21:53:52 +08:00
trle5 added 28 commits 2025-07-04 01:26:46 +08:00
add `SaveDatabase` and `ReadDatabase` database operate function
import `github.com/rs/zerolog` use as logger
move most config into yaml config file
use `filepath.Join()` to combine file path
separate some function from `utils`
move signal channel to `signals` package
make exit code in `SignalsHandler()`
change debug script output directory to `${workspaceFolder}/__debug_bin`
fix some redis error
database SaveDatabase and ReadDatabase  can be nil
add a `IsFromBusinessBot` flag to `message_attribute` package
add `GetUserOrSenderChatDict()` func in some case to replace `GetUserDict()` func
make error log use `Failed to` first
add full log to `plugin_sticker`
format redis database logs
only need single redis database
add convert webm to gif use external ffmpeg
use `update_utils.GetUpdateType()` get update type then run handlers
remove `IsDebugMode` flag
use mult writer and filter to save different level log to log file
add makefile to build and inject version info
use `github.com/pkg/errors` and zerolog to print stack and save it
update some log's level
show error when build without info
add commit tag to panic catcher
add log file level
adjust logger create and set level
use logger.Fatal() replace os.Exit(1)
use path to run ffmpeg
auto convent webm to gif if have ffmpeg path
fix callback query just return
change /version command
not need delete /version message
allow select chat after add keyword
some user interface change
add send document template
handlers.go:
    fix wrong var
utils/yaml/yaml.go
    remove fmt package
plugins/teamspeak:
    allow check online client failed 5 times before reinit
all and other:
    use err template
    plugin use yaml.Load() and yaml.Save() manage databases
    use mult error to recored all error
show message delete notice on test mode (whatever delete or not)
add some icon in main menu
display 3 message type button in one line
show photo file id when get photo message
plugin_sticker:
    add sticker collect to channel feature
    allow detected `addsticker` link and show download sticker set button
database:
    remove `IsInitialized` and `InitializedErr` in `DatabaseBackend` struct
    add `context.Context` params in `DatabaseBackend.Initializer`
yaml_db:
    using `yaml.LoadYAML()` and `yaml.SaveYAML()` to save database file
    using `zerolog` logger replace `log`
    fix database file protection logic
    remove `addToYamlDB()` func
    update `Database.UpdateTimestamp` when change some flag
handlers:
    fix `CustomSymbolCommand` trigger: use `strings.HasPrefix()` to replace `utils.CommandMaybeWithSuffixUsername()`, custom symbol command will not include robot username suffix
consts:
    rename `YAMLDataBasePath` to `YAMLDataBaseDir`
mess:
    remove `PrintLogAndSave()` func
Reviewed-on: #2
trle5 added 1 commit 2025-07-04 20:35:08 +08:00
trle5 added 1 commit 2025-07-06 01:52:37 +08:00
packages:
    rename `errt` to `err_template`
    rename `multe` to `flat_err`
    rename `handler_structs` to `handler_params` with changes
logger:
    move some fields to top logger
    create sub logger when need
handler and sub-handler:
    create sub params when need
plugin_utils:
    rename `CustomSymbolCommand` to `FullCommand`
    rename `SlashSymbolCommand` to `SlashCommand`
trle5 added 1 commit 2025-07-06 02:02:22 +08:00
trle5 added 1 commit 2025-07-06 21:42:53 +08:00
use `database.UpdateOperationStatus()` to update user `HasPendingCallbackQuery` status
`saved_message` use another file to init
trle5 added 1 commit 2025-07-06 22:44:22 +08:00
rename some add plugin function
change `/test` command link from group to channel
trle5 added 1 commit 2025-07-07 04:12:32 +08:00
client change no include bot anymore
start reconnect when check online client error is `not connected`
trle5 added 1 commit 2025-07-07 20:12:39 +08:00
trle5 added 1 commit 2025-07-07 21:39:56 +08:00
rename source code file
trle5 added 1 commit 2025-07-08 23:56:31 +08:00
change log message template as a string type
rename `handler_slash_start.go` to `handler_command_slash_start.go`
trle5 added 1 commit 2025-07-10 19:53:44 +08:00
trle5 added 1 commit 2025-07-10 23:42:55 +08:00
trle5 added 1 commit 2025-07-13 01:15:55 +08:00
`message_utils` and `update_utils`:
    rename `InString` method to `AsValue`
`handlers.go`:
    make select sub handler logic as function
`ByChatIDHandler` and `ByMessageTypeHandler`:
    remove `MessageHandler` field
`plugin_udonese.go`:
    fix double answer
    add break when matched
`handler_by_chatid.go`:
    add handler duplicate check
`handler_by_message_type.go`:
    add handler duplicate check
    support limit handler trigger for some chat only (by set chat ID)
trle5 added 3 commits 2025-07-14 22:45:04 +08:00
fix callback query log panic
`handler_by_message_type.go`:
   fix any chat ID handler trigger
trle5 added 1 commit 2025-07-15 19:39:57 +08:00
trle5 added 1 commit 2025-07-17 20:07:57 +08:00
show GIF and video file ID in log
trle5 added 1 commit 2025-07-18 01:18:55 +08:00
trle5 added 1 commit 2025-07-18 23:46:06 +08:00
trle5 added 1 commit 2025-07-19 20:52:32 +08:00
add `PinnedMessage` type in `message_utils`
trle5 added 1 commit 2025-07-19 23:45:13 +08:00
state example in `detect_keyword`
trle5 added 1 commit 2025-07-20 00:10:57 +08:00
trle5 added 1 commit 2025-07-20 22:25:47 +08:00
detect_keyword:
    use format error message
internal_plugin:
    add a `/cancle` command to let user know there is no state handler
handler_state:
    show plugin name when user send `/cancle` command
trle5 added 1 commit 2025-07-20 22:59:19 +08:00
internal_plugin:
    add a `delete_this_message` callback query handler to delete any message trigger it
handler_callback_query:
    fix `CallbackDatePrefix` field to `CallbackDataPrefix`
trle5 added 1 commit 2025-07-20 23:04:59 +08:00
trle5 added 1 commit 2025-07-21 00:35:30 +08:00
trle5 added 2 commits 2025-07-22 02:27:46 +08:00
multiple err use error template
move some field in top logger
other changes
trle5 added 1 commit 2025-07-22 02:42:51 +08:00
trle5 added 1 commit 2025-07-23 00:45:48 +08:00
trle5 added 1 commit 2025-07-23 01:23:20 +08:00
trle5 added 1 commit 2025-07-25 08:21:31 +08:00
trle5 force-pushed alpha from b8a689f5a4 to fd190b3a0f 2025-07-26 02:40:13 +08:00 Compare
trle5 added 1 commit 2025-07-26 03:05:56 +08:00
trle5 added 1 commit 2025-07-26 20:42:16 +08:00
utils.go:
    add GetChatAdminIDs function
plugin_udonese.go:
    reuse logger field
trle5 added 1 commit 2025-07-26 22:36:54 +08:00
trle5 added 1 commit 2025-07-27 10:23:32 +08:00
contain.go:
   fix the reversed parameters in`SubString` and `SubStringCaseInsensitive` functions
trle5 added 3 commits 2025-07-27 11:50:39 +08:00
trle5 added 1 commit 2025-07-29 00:42:03 +08:00
inline_utils:
    add inline query parser
configs:
    add `InlineCategorySymbol` config flag
handlers.go:
    show match prefix inline commands when user typing
saved_message:
    work with inline category feature
trle5 added 2 commits 2025-07-29 22:04:52 +08:00
update.Message:
    NewChatMembers
    LeftChatMember
update.ChatMember
trle5 added 2 commits 2025-07-30 00:05:34 +08:00
contain:
    remove `ChatType` func
    add `AnyType` func
internal_plugin:
    allow all chat types for `/start` and `/help` commands
    only show default help message in `private` chat type
    add underline suffix to `WithPrefixHandler.Prefix` field when checking command prefix
handler_command_slash_start.go:
    change default chat types
trle5 added 1 commit 2025-07-30 01:09:31 +08:00
detect_keyword:
    `/setkeyword` allow for any chat type
    add `msg.From` nil check in  `keywordDetector()` function
    add `detectkw_g_switch` error callback answer
    update message in group function manager keyboard
    send error message when failed to parse chat ID
handler_state.go:
    add `opts.Message.From` nil check in `RunStateHandler()` function
utils.go:
    add `msg.From` nil check in `GetMessageFromHyperLink()` function
trle5 added 1 commit 2025-07-30 01:42:53 +08:00
trle5 added 2 commits 2025-08-02 22:17:22 +08:00
trle5 added 1 commit 2025-08-04 23:31:48 +08:00
trle5 added 2 commits 2025-08-05 01:37:28 +08:00
handler_state.go:
    use chat ID to get handler
utils.go:
     `GetMessageFromHyperLink()` fix format
    add `TextBlockquoteMarkdown()` function
plugin_detect_keyword.go:
    stop convert text to lowercase
    use `contain.SubStringCaseInsensitive()` replace `strings.Contains()`
    use `models.ParseModeMarkdown` in `notifyUser()`
plugin_detect_keyword.go:
    keep use HTML parse mode
    fix init user bug
utils.go:
    add `GetChatIDLink()` and `IgnoreHTMLTags()` function
trle5 added 1 commit 2025-08-09 20:13:49 +08:00
plugin_utils:
    origin `handler_by_chatid` is fork as `handler_by_message_chat_id`
    rename `AddInlineHandlerHandlers` to `AddInlineHandlers`
trle5 added 1 commit 2025-08-10 02:45:24 +08:00
plugin_message_meilisearch:
    allow index message
    allow search mesage use command or inline mode
saved_message:
    test channel mode
    stop add more entities
    change main data list sturcts
utils:
    add `meilisearch_utils` package
handler_state:
    rename `StateHandler` to `MessageStateHandler`
register:
    add some field for `/chatinfo` command
inline_utils:
    add a `KeywordQuery()` method
trle5 added 1 commit 2025-08-11 22:53:11 +08:00
spilt `origin_info` as a package
disable `plugin_message_meilisearch`
trle5 added 1 commit 2025-08-11 23:07:24 +08:00
trle5 added 1 commit 2025-08-11 23:23:22 +08:00
trle5 added 1 commit 2025-08-11 23:42:43 +08:00
trle5 added 1 commit 2025-08-12 00:18:18 +08:00
trle5 added 1 commit 2025-08-12 00:22:33 +08:00
trle5 added 1 commit 2025-08-12 00:31:56 +08:00
trle5 added 1 commit 2025-08-13 23:05:31 +08:00
saved_message:
    fix nil user panic
trle5 added 1 commit 2025-08-14 00:31:57 +08:00
trle5 added 1 commit 2025-08-15 04:07:39 +08:00
handlers.go:
    add inline no command notice
saved_message:
    allow edit description
meilisearch_utils:
    add `omitempty` tag in MessageData struct
trle5 added 1 commit 2025-08-15 05:05:03 +08:00
message_type:
    rename `OnlyText` to `Text`
trle5 added 1 commit 2025-08-15 05:08:43 +08:00
trle5 added 1 commit 2025-08-15 05:19:38 +08:00
trle5 added 1 commit 2025-08-17 01:43:09 +08:00
plugin_message_meilisearch:
    become a sub-package of `saved_message`
meilisearch_utils:
    rename `MsgID` to `ID`
    rename `MsgType` to `Type`
saved_message:
    add search category map list
trle5 added 1 commit 2025-08-17 02:06:26 +08:00
origin_info:
    add json tag for `OriginInfo` struct
trle5 added 1 commit 2025-08-18 03:11:39 +08:00
saved_message:
    add `NoticeChatID` field to receive notice
    default use first admin as notice chat
utils:
    add `MsgLink` and `MsgLinkPrivate` function
origin_info:
    use `tg://user?id=<userID>` to link to a user
trle5 added 1 commit 2025-08-18 03:53:42 +08:00
saved_message:
    fix no `InlineQueryResultsButton` error
    add result list check
    stop fetch public content when result list reaches "configs.BotConfig.InlineResultsPerPage" limit
    remove result pagination step
    fix wrong HTML tag
plugin_teamspeak3:
    remove `expandable` attribute in pinned online user list
trle5 added 2 commits 2025-08-18 05:21:35 +08:00
trle5 added 1 commit 2025-08-19 05:18:43 +08:00
set `bot.WithErrorsHandler()` option to output log via `zerolog`
trle5 added 1 commit 2025-08-19 05:55:25 +08:00
trle5 changed title from WIP: refactor: make the bot framework into a template to refactor: make the bot framework into a template 2025-08-19 07:36:19 +08:00
trle5 added 1 commit 2025-08-19 08:11:53 +08:00
trle5 added 3 commits 2025-08-21 02:18:15 +08:00
database:
    move default database directory to `data/`
environment:
    add `WEBHOOL_ADDR`
    add `LOG_CHAT_ID`
    add `LOG_FILE_PATH`
    rename `CONFIG_PATH_TO_FILE` to `CONFIG_PATH`
    rename `CONFIG_DIRECTORY` to `CONFIG_DIR`
teamspeak3:
    add re-init timeout
trle5 added 1 commit 2025-08-21 02:23:22 +08:00
trle5 added 1 commit 2025-08-21 02:44:54 +08:00
trle5 added 1 commit 2025-08-24 21:56:03 +08:00
trle5 added 2 commits 2025-08-26 21:35:30 +08:00
trle5 added 1 commit 2025-08-28 05:54:06 +08:00
slash start command:
    fix notes
    remove prefix argument underline suffix check
trle5 added 1 commit 2025-08-28 07:01:08 +08:00
try using multiple workers?
trle5 added 1 commit 2025-08-28 08:20:46 +08:00
update help text for plugins
trle5 added 1 commit 2025-08-30 23:56:12 +08:00
trle5 added 2 commits 2025-08-31 02:33:35 +08:00
trle5 added 3 commits 2025-09-01 09:01:41 +08:00
trle5 added 2 commits 2025-09-04 13:06:10 +08:00
detect_keyword:
    fix remove by message chat ID handler
signals:
    also save plugin database when exit
trle5 added 1 commit 2025-09-04 13:33:57 +08:00
trle5 changed title from refactor: make the bot framework into a template to refactor: use plugins to combine multiple functions 2025-09-04 13:55:05 +08:00
trle5 changed title from refactor: make the bot framework into a template to refactor: use plugins to combine multiple functions 2025-09-04 13:55:05 +08:00
trle5 force-pushed alpha from f1ad8358e1 to fbb8fe04e2 2025-09-09 16:37:43 +08:00 Compare
trle5 force-pushed alpha from fbb8fe04e2 to 62cc4b320e 2025-09-09 16:42:19 +08:00 Compare
trle5 added 1 commit 2025-09-09 21:07:07 +08:00
trle5 added 1 commit 2025-09-09 21:20:32 +08:00
trle5 added 1 commit 2025-09-09 21:52:18 +08:00
trle5 added 1 commit 2025-09-11 21:51:44 +08:00
stop use timeout context after success reconnect
trle5 added 2 commits 2025-09-13 19:45:05 +08:00
trle5 added 1 commit 2025-09-14 09:19:55 +08:00
trle5 added 1 commit 2025-09-14 10:41:10 +08:00
trle5 added 1 commit 2025-09-14 20:06:57 +08:00
trle5 added 1 commit 2025-09-15 20:44:13 +08:00
trle5 added 1 commit 2025-09-18 16:05:30 +08:00
trle5 added 1 commit 2025-09-24 00:23:35 +08:00
trle5 added 1 commit 2025-09-24 13:44:26 +08:00
trle5 added 2 commits 2025-09-30 21:00:09 +08:00
trle5 added 1 commit 2025-09-30 21:09:20 +08:00
trle5 added 1 commit 2025-09-30 21:48:06 +08:00
trle5 added 1 commit 2025-10-09 17:13:34 +08:00
main:
    remove multiple worker
sticker:
    add download mutex lock
    add link for sticker set that exceed the size limit
trle5 added 1 commit 2025-10-09 20:22:38 +08:00
sticker:
    add missing error return
trle5 added 3 commits 2025-10-14 00:25:38 +08:00
send notice when user need to wait in queue
add chat action when downloading
check compressed file before iterating over sticker set
error:
    use `utils.IgnoreHTMLTags()` warp some error
collect sticker:
    show sticker count update
detect keyword:
    make sure notice message not too long
trle5 added 1 commit 2025-10-16 21:56:10 +08:00
sticker:
    delay zip file close function
internal:
    remove inline prefix handler `log`
    add slash command `log`
    add inline prefix handler `gc`
version:
    add `github.com/dustin/go-humanize` for memory
trle5 added 1 commit 2025-11-01 20:20:55 +08:00
Disable the download function for sticker packs containing more than 120 stickers.
trle5 added 1 commit 2025-11-01 21:59:32 +08:00
trle5 merged commit 2ddd7d35cd into main 2025-11-05 23:05:51 +08:00
trle5 deleted branch alpha 2025-11-05 23:05:51 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: trle5/trbot#1