📢 PhantomBot v3.6.4 is now available as a stable build
✅ Added:
➡️ Added support for customizing all subscription tiers individually in subscribeHandler (gmt2001)
➡️ Added the ability to define 1 level of sub-array in the globalTransformerRequiredLabels
input of $.transformers.tags
, creating an or over all possible combinations (gmt2001)
➡️ Added standard functions string $.subscription.planToTier(string plan)
which converts plan names from Twitch into a string of the Tier number (or 'Prime' for prime) and string $.subscription.tierToPlan(string tier)
which converts Tier numbers (or 'Prime') to Twitch plan names (gmt2001)
➡️ Added the debug function $.findcaller(boolean forceIfDebuggingOff)
which returns the name and file of the calling function if debugging is enabled, or true
is passed in as the first parameter (gmt2001)
➡️ Added helpful IllegalArgumentException to many DiscordAPI methods to indicate when a null, empty, or whitespace parameter was passed and which one it was (gmt2001)
➡️ Added String event.getGiftedMonths()
, which indicates the number of months that were just gifted (ie. GenerousViewer just gifted 6 months of Tier 1 to OtherViewer!), to the gift-sub-related events (gmt2001 gmt2001#215)
➡️ Added the command tag (giftmonths)
to Gift Sub and Anon Gift Sub response messages in subscribeHandler, which indicates the number of months that were just gifted (ie. GenerousViewer just gifted 6 months of Tier 1 to OtherViewer!) (gmt2001 gmt2001#215)
➡️ Added helpers.parseJSONValues(object obj, array keys)
to the panel to check the defined keys in obj
for JSON and parse them in-place into JS objects (gmt2001)
➡️ Added an automatic heap dump on OutOfMemoryError (gmt2001)
➡️ Added a manual heap dump console command dumpheap
(gmt2001)
🌀 Changed:
➡️ Changed Prime subscriptions to additionally send TwitchSubscriberEvent (gmt2001)
➡️ Changed subscribeHandler to allow (customemote)
in all response messages (gmt2001)
➡️ Changed subscribeHandler to handle Prime subscriptions with the regular New Subscriber event (gmt2001)
➡️ Changed the command tags to use standardized labels based on platform and event (gmt2001)
➡️ Changed subscribeHandler to use the new command tags system (gmt2001)
➡️ Changed the subscription responses to work with all noevent
command tags, plus subscription-specific tags based on the alert type (gmt2001)
➡️ Changed the alerts overlay page to preload all audio, images, and videos before playing them to improve synchronization (gmt2001)
➡️ Changed TMI, Host TMI, and PubSub to ensure they start connecting when a new OAuth is provided, if not currently connected (gmt2001)
➡️ Changed the alerts overlay page to support HTML passed in to the (alert)
command tag (gmt2001 #2864)
➡️ Changed the time string functions in timeSystem to return useful error messages when an invalid Timezone ID is used (gmt2001 #2862)
➡️ Changed the Ticket Raffle panel to display tickets as Bought Tickets (+Bonus)
(Sartharon #2878)
🛠️ Fixed:
➡️ Fixed TwitchWSIRCParser directly calling ScriptEventManager.onEvent, blocking the parser thread, instead of submitting to the EventBus (gmt2001)
➡️ Fixed TwitchWSIRCParser holding references to singletons (gmt2001)
➡️ Fixed an issue where generating new OAuths could fail due to spaces at the beginning of the Client ID or Client Secret not being trimmed (gmt2001)
➡️ Fixed an issue where Helix endpoints that return HTTP 204 on success would cause an exception to be thrown due to no body content (gmt2001)
➡️ Fixed the Host TMI connection spamming reconnects if the APIOAuth is not set to the caster (gmt2001, reported by therentabrain #2628)
➡️ Fixed an issue where the gambling script was not working due to a typo in a function name (Sartharon #2870)
➡️ Fixed an issue where commandRegister functions were not case-insensitive (gmt2001 gmt2001#219)
➡️ Fixed an issue where StreamElements API calls could fail due to spaces at the beginning or end of the JWT or Account ID (gmt2001 #2868)
➡️ Fixed an issue where DiscordCommandEvent firing too early during startup could throw NPE (gmt2001 #2861)
➡️ Fixed logRotate calculating the target number of days incorrectly, leading to no actual log rotation and a DateTimeException (gmt2001 rb#2761)
➡️ Fixed the Ticket Raffle bonus calculation (Sartharon #2878)
➡️ Fixed an issue in Ticket Raffle where users could buy more tickets than the limit (Sartharon #2878)
➡️ Fixed an NPE if using a console command early in bot startup (gmt2001)
🗑️ Deprecated:
➡️ com.gmt2001.HttpRequest
is Deprecated and should not be used for new development. com.gmt2001.httpclient.HttpClient
should be used instead
➡️ tv.phantombot.PhantomBot.getProperties()
is deprecated and should not be used for new development. tv.phantombot.CaselessProperties.instance()
should be used instead
🛑 Removed:
➡️ Removed the Prime subscription enable toggle from subscribeHandler since it is now handled with the regular New Subscriber and Resubscriber events (gmt2001)
➡️ Removed the disabling of hostHandler when Host TMI fails to connect with the correct APIOAuth (gmt2001)
🐞 Known Issues:
➡️ Twitter is Broken
🌐 Download It:
➡️ Downloads attached to the bottom of this release notice
❗ Remember to install to a separate folder, then copy over the config dir, as well as any custom scripts or files in addons
➡️ PhantomBot official builds are available on GitHub Container Registry at ghcr.io/phantombot/phantombot and ghcr.io/phantombot/nightly-build
➡️ PhantomBot official builds are available on DockerHub at gmt2001/phantombot-stable and gmt2001/phantombot-nightly. See the readme text on the appropriate Docker Hub pages for Docker Compose files
🗒️ Notes:
➡️ We have guides on PhantomBot. You can contribute by submitting a Pull Request adding or editing .md files in the /docs/guides/content folder of the repo. See the guides for info about formatting.
➡️ $.inidb.executeSql
is designed for personal, custom script use where the DataStore backend being used is known and will not change. Issues can, and will, occur if the SQL is written for one DataStore backend and the statement is then executed on a different backend.