📢 PhantomBot v3.6.5.0 is now available as a stable build
⭐ This build implements compliance with the new changes coming to Twitch Message Interface (TMI aka. IRC) on February 18, 2023
⚠️ Due to upcoming changes by Twitch, IRC slash/dot commands are now moved to the Helix Twitch API. These new endpoints require new OAuth scopes by Twitch to function. Both the Bot and Broadcaster OAuths must be re-done after updating to this version. This is also required for Purge/Timeout/Ban!
⚠️ The URL for the OAuth page has been normalized. If you are getting Parameter redirect_uri does not match registered URI, then you need to update the URI in your Twitch Developer Console. This is in step 1.6 of the OAuth instructions
➡️ New TMI client implementation using reactive-streams processors to interpret IRC/TMI commands
➡️ PING/PONG implemented according to RFC1459
➡️ Removed PING/PONG reconnect timer (We don't know for sure how often it may reliably come)
➡️ Re-implemented the TMI RateLimiter as defined in the Twitch docs
➡️ Changed TMI RateLimiter to allow 100 messages per 30 seconds (Moderator limit, since moderator status is required to use the bot)
➡️ Updated to conform to the new /command-less TMI specification
✅ Moderator detection performed via USERSTATE received on JOIN or send
✅ !botname moderate re-implemented as a PART/JOIN to trigger USERSTATE
✅ Implemented support for all commands listed at https://dev.twitch.tv/docs/irc/chat-commands as redirects to the appropriate Helix endpoints (Endpoints may also be used directly by acquiring the Helix instance)
‼️ Exceptions: /color, /disconnect, /help, host commands, /marker, mod/modlist commands, vip/viplist commands
✅ Implemented /announce commands, including colors, via Helix
⚠️ New OAuth required for both Bot and Broadcaster to use any /command endpoints due to new scopes required by Twitch
➡️ GLOBALUSERSTATE and ROOMSTATE are now forwarded to IrcPrivateMessage
‼️ Command name currently not provided, only tags/message, so identifying the actual command must be done by presence of specific tags
➡️ Added support for receiving CLEARMSG, the notification that /delete was used
✅ New hook ircClearmessage
✅ Event methods: event.getUsername()
, event.getMessage()
, event.getMsgId()
➡️ Improved auth fail timer. 20 seconds on startup, 15 seconds on reconnect
✅ Added:
➡️ Added a botlogin.txt settings httpclientdebug
which enables debugging output from HttpClient (gmt2001)
➡️ Added support for the /announce command with colors (gmt2001 gmt2001#222)
➡️ Added support for receiving incoming announcements as ircChannelMessage (gmt2001)
➡️ Added redirects from IRC slash/dot commands to Helix (gmt2001)
➡️ Added support for receiving the TMI CLEARMSG
(/delete) notification with a new hook ircClearmessage
(gmt2001)
➡️ Added support for the Helix endpoints (Un)Ban User, Delete Chat Messages, Start/Cancel Raid, Update Chat Settings, and Send Whisper (gmt2001)
➡️ Added a new Composite DNS Resolver that falls back to the Java default DNS resolver if the Netty one fails (gmt2001)
➡️ Added helper methods String UsernameCache.resolveBot()
, String UsernameCache.resolveCaster()
, String UsernameCache.getIDBot()
, and String UsernameCache.getIDCaster()
(gmt2001)
➡️ Added $.panelsocketserver.panelNotification(String type, String message, String title, Int timeout, Int extendedTimeout, Bool showProgressbar)
which triggers a toastr notification on the panel (gmt2001)
➡️ Added the ability to define the environment variables UID
and GID
to alter the service user account in Docker (Bonny1992 #2935)
🌀 Changed:
➡️ Replaced the TMI package with a new reactive-streams-based library (gmt2001)
➡️ Updated the OAuth page to the newest required scopes (gmt2001)
➡️ Changed the rate-limiter for TMI to match the implementation on the Twitch side (gmt2001)
➡️ Changed the rate-limit for TMI to 100/30 (gmt2001)
➡️ Changed !botName moderate
to detect mod status by leaving and rejoining the channel to trigger the TMI USERSTATE
command (gmt2001)
➡️ Changed UsernameCache to directly query Helix using async (gmt2001)
➡️ Changed UsernameCache to return the username if the Helix request does not complete in 2 seconds, but still cache the result if it eventually completes (gmt2001)
➡️ Changed UsernameCache to GC display names and IDs for usernames that haven't been requested in over an hour. May take up to 2 hours to actually trigger due to timer period (gmt2001)
➡️ Updated Helix to always add the error
string to the base JSONObject if an exception or error occurred during the HTTP Request phase. Note that the error string may not contain anything useful, but serves as an indicator (gmt2001)
➡️ Refactored TwitchCache to use Helix directly with async (gmt2001)
➡️ Changed TwitchCache to only check the channel logo for the panel once per hour, and only download it if last-modified or the URL changes (gmt2001)
➡️ Changed TwitchCache to keep detecting clips starting at the last clip, or 1 day ago, whichever is later (gmt2001)
➡️ Changed TwitchCache to send TwitchClipEvent for all clips returned that were created after the previous latest clip (gmt2001)
➡️ Changed the quoteSystem to allow using the search feature with 1-character queries (gmt2001, requested by ddugovic #2920)
🛠️ Fixed:
➡️ Fixed argument parsing for (writefile)
(gmt2001, reported by zpammer #2907)
➡️ Fixed some issues that were making the Discord promoteSystem unstable (gmt2001, reported by worldofmadness #2546)
➡️ Fixed a memory leak in the HTTPWSServer (gmt2001 gmt2001#212)
➡️ Fixed a Date parsing error that prevented GamesListUpdater from working (gmt2001 #2911)
➡️ Fixed the Discord connection fallback on rejected intents not working (gmt2001 gmt2001#220)
➡️ Fixed an issue where TwitchAPIv5.getStreams wasn't using the correct indexers, leading to scripts like promoteSystem to keep seeing others as online then offline (gmt2001)
➡️ Fixed !pausecommands
not being honored (Sartharon #2919)
➡️ Fixed TwitchValidate not refreshing the validation state or scopes of the OAuth tokens after manually authing from the /oauth page (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
➡️ com.gmt2001.TwitchAPIv5
is Deprecated and should not be used for new development. tv.phantombot.twitch.api.Helix
should be used instead
🛑 Removed:
➡️ Removed everything related to host detection, except previously recorded events in the Dashboard of the panel (gmt2001)
➡️ Removed the msglimit30
setting from botlogin.txt (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.