8.0.0
Re-published due to broken automation. Do not adjust your television set; there is no cause for alarm.
Changes between 7.1.9 and 8.0.0
Highlights
Detailed coverage of the major changes can be found in the dedicated Sopel 8 upgrade guide.
For users:
- Python 3.8+ is now required
- IRC connections are made with TLS on port 6697 if not configured
- SASL EXTERNAL authentication is now supported
- Plugins in
~/.sopel/modulesare no longer loaded by default- Use the
core.extrasetting to add this directory back if needed
- Use the
- Database options can be configured all at once in new
db_urlsetting (useful for managed cloud hosting such as Heroku) .blockscommand accepts "nick" and "host" types now, and no longer lies about supporting "hostmasks" (further improvements to come)- Sopel no longer supports loading (very!) old Phenny/Jenni plugins
- Several built-in plugins have been converted to external packages, to simplify maintenance and release-management going forward
For developers:
Identifierwas moved tosopel.tools.identifiersand now supports dynamic casemapping; an optionalcasemappingoridentifier_factorykwarg has been added to many object types to help manage this at runtime- You can usually just pass
bot.make_identifieras the factory function and things will Just Work™ - Feel free to use
bot.make_identifier()yourself to get anIdentifierrepresenting any nick or channel name you get, e.g. as input to a command
- You can usually just pass
- The
core.nicksetting value is now returned as astr, not anIdentifier - Capability negotiation is a first-class plugin API feature (see
plugin.capabilityand the related documentation chapter) trigger.senderattribute as passed to plugin callables is nowNonein cases where its value is meaningless (events with no channel/query context)- Numerous deprecated API features were removed:
bot.privileges(usebot.channels)bot.msg()(usebot.say())sopel.websubmodule (usesopel.tools.web)
- Messages from other bots are ignored by default on supported networks, but
plugins can opt back in with the
@plugin.allow_botsdecorator STATUSMSGprefix is removed fromtrigger.senderif present and stored in a separatetrigger.status_prefixattribute- See documentation for
bot.SopelWrapper.default_destination
- See documentation for
bot.connection_registeredis now the way to check whether the bot is connected to IRC, registered with the network, and ready for your plugin to send commands
Plugin changes
- admin:
- Added
.rawcommand to make Sopel send a raw IRC line [#2104]
- Added
- adminchannel:
- bugzilla:
- Extracted to its own package [#2481]
- calc:
Core changes
- Removed support for EOL Python versions (2.7, 3.3, 3.4, 3.5, 3.6, & 3.7), added testing on newer Python versions (up to 3.12), and modernized coding standards [#2062, #2073, #2123, #2124, #2134, #2136, #2138, #2205, #2213, #2227, , , , , , , , ]
API changes
- Importing
sopel.modulenow emits a deprecation warning [#2170] - Removed support for Phenny/Jenni plugin style [#2126]
- Stopped searching
bot.memory['url_callbacks']for link handlers [#2121] - Deprecated
bot.search_url_callbacks()[#2121, #2156, #2581] - Deprecated
db.execute()[#2243] - Cleaned up parts of
sopel.toolsnamespace- Deprecated
tools.web.entity()and itsr_entityconstant, to be removed in Sopel 9.0 [#2205]
- Deprecated