Releases: sopel-irc/sopel
Releases · sopel-irc/sopel
8.0.1
Changes between 8.0.0 and 8.0.1
Plugin changes
Core changes
- Use distribution name to query version of entry-point plugins [#2594]
- Added plugin version number in
sopel-plugins show
output [#2638] - Fixed loading folder-style plugins with relative imports [#2633]
- Fixed rate-limiting behavior for rules without a rate limit [#2629]
config.types.ChoiceAttribute
logs invalid values for debugging [#2624]- Also remove null (
\x00
) inirc.utils.safe()
function [#2620]
Housekeeping changes
- Document advanced tip about arbitrarily scheduling code [#2617]
- Include
versionadded
notes for more methods inirc.AbstractBot
[#2642] - Start moving from
typing.Optional
to the| None
convention [#2642] - Minor updates to keep up with type-checking ecosystem [#2614, #2628]
- Start checking for incomplete type annotations [#2616]
- Added tests to
find
plugin [#2589] - Fixed slowdown in
@plugin.example
tests withrepeat
enabled [#2630]
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][sopel-8-migration].
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/modules
are no longer loaded by default- Use the
core.extra
setting to add this directory back if needed
- Use the
- Database options can be configured all at once in new
db_url
setting (useful
for managed cloud hosting such as Heroku) .blocks
command 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:
Identifier
was moved tosopel.tools.identifiers
and now supports dynamic
casemapping; an optionalcasemapping
oridentifier_factory
kwarg has been
added to many object types to help manage this at runtime- You can usually just pass
bot.make_identifier
as the factory function and
things will Just Work™ - Feel free to use
bot.make_identifier()
yourself to get anIdentifier
representing any nick or channel name you get, e.g. as input to a command
- You can usually just pass
- The
core.nick
setting value is now returned as astr
, not anIdentifier
- Capability negotiation is a first-class plugin API feature (see
plugin.capability
and the [related documentation chapter][cap-mgmt-8]) trigger.sender
attribute as passed to plugin callables is nowNone
in
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.web
submodule (usesopel.tools.web
)
- Messages from other bots are ignored by default on supported networks, but
plugins can opt back in with the@plugin.allow_bots
decorator STATUSMSG
prefix is removed fromtrigger.sender
if present and stored in a
separatetrigger.status_prefix
attribute- See documentation for
bot.SopelWrapper.default_destination
- See documentation for
bot.connection_registered
is 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
.raw
command to make Sopel send a raw IRC line [[#2104][]]
- Added
- adminchannel:
- bugzilla:
- Extracted to [its own package][sopel-bugzilla] [[#2481][]]
- calc:
- clock:
- Added
unset
commands for user & channel time zone/format [[#2181][]]
- Added
- coretasks:
- currency:
- dice:
- Refactoring, bugfixes, and improved test coverage [[#2532][]]
- emoticons:
- find:
- help:
- Now updatable independently from [its own package][sopel-help], but still
installs with Sopel as a dependency [[#2332][]]
- Now updatable independently from [its own package][sopel-help], but still
- ip:
- meetbot:
- Extracted to [its own package][sopel-meetbot] [[#2477][]]
- pronouns:
- Accept abbreviated pronoun sets [[#2070][]]
- Added
.clearpronouns
command [[#2154][]] - Fetch pronoun list dynamically at startup [[#2130][]]
- Support configurable pronoun backend [[#2437][], [#2438][]]
- The old backend at
pronoun.is
went down and never came back, so now you
can use [our replacement][pronoun-ours] or [host your own][pronoun-base]
- The old backend at
- py:
- reddit:
- reload:
- remind:
- safety:
- search:
- seen:
- tell:
- Fixed edge cases in cleanup of tellee argument [[#2584][]]
- translate:
- Improved help output [[#2453][]]
- unicode_info:
- url:
- Improved interaction between
.title
command and link handlers [[#2282][]] - Removed traceback from debug log when URL fetch fails [[#2280][]]
- Made channel-privilege-based access to
.urlexclude
command and friends
configurable [[#2352][]] - Cleaned up code [[#2304][], [#2307][], [#2433][]]
- Added better error handling for DNS lookups [[#2428][]]
- Ignore invalid hostnames [[#2472][]]
- Improved interaction between
- version:
- Support retrieving plugin versions with
.version pluginname
[[#2133][]]
- Support retrieving plugin versions with
- wikipedia:
- Commands are now
.wp
,.wikipedia
; old commands (.w
,.wik
, &.wiki
)
were removed [[#1966][]] - Remove deprecated
lang_per_channel
setting [[#2142][]] - Work around excessive whitespace in math formulas [[#2286][]]
- Don't ping the user who posted a URL that fails to load [[#2315][]]
- Output image description if URL has an image viewer fragment [[#2388][]]
- Handle query strings in article links [[#2414][]]
- Fail gracefully on
Special:
namespace links [[#2575][]]
- Commands are now
- xkcd:
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][], [#2298][], [#2326][], [#2327][],
[#2342][], [#2384][], [#2464][], [#2500][], [#2516][]] - Modified default settings:
- IRC backend refactored to use
asyncio
[[#2256][]]- Just in time, too: The
asynchat
module was removed in Python 3.12
- Just in time, too: The
- Improved IRC connection error handling [[#2430][], [#2431][]]
SopelDB
adapted to SQLAlchemy 2.x style [[#2243][]]- Database can be configured all at once with a new
db_url
setting [[#2087][]] - Replaced
pkg_resources
withimportlib.metadata
[[#2261][], [#2268][]] - Added support for several new IRC features and IRCv3 specifications:
- SASL EXTERNAL client certificate authentication [[#2100][], [#2561][]]
- Sopel uses [the Bot Mode specification][bot-mode-spec] to mark itself as a
bot and track other users that are flagged as bots [[#2088][], [#2448][]] userhost-in-names
capability and the legacyUHNAMES
feature [[#2102][]]chghost
capability [[#2116][]]
- Improved SASL handling when auth fails [[#2187][], [#2191][]]
- Added automatic
CASEMAPPING
handling based onRPL_ISUPPORT
[[#2231][]] - Plugins in
~/.sopel/modules
are no longer loaded by default [[#2119][]] - Removed support for Phenny/Jenni plugin style [[#2126][]]
- Ignore
bot
-tagged messages by default [[#2089][], [#2272][]] - Privilege tracking (MODE event handling) refactored [[#2131][]]
- Maintain ordering of
ISupport.PREFIX
property [[#2200][]] - Added
__slots__
toChannel
andUser
objects [[#2233][]] - Improved handling of the bot's nick getting changed [[#2240][]]
- Improved tracking and enforcement of rate limits [[#2297][]]
- Prevent infinite loop on connection failure [[#2306][]]
- Added
ssl_ciphers
andssl_minimum_version
settings [[#2246][], [#2306][]] - Added
antiloop_repeat_text
,antiloop_silent_after
,antiloop_threshold
,
andantiloop_window
settings to control command-loop prevention [[#2320][]] - Using
,
inListAttribute
values logs a warning [[#2252][]]- Write lists with newlines instead; Sopel 9 will remove splitting on
,
- Write lists with newlines instead; Sopel 9 will remove splitting on
- IRC connections use TLS on port 6697 by default [[#2277][]]
- Potentially a breaking change, but the configuration wizard has long
written these settings to the final config file even if they were left at
the default values
- Potentially a breaking change, but the configuration wizard has long
- Fixed
UHNAMES
race condition caused by joining channels too soon [[#2321][]] - Removed hunting for CA root store [[#2278][], [#2303][]]
...
7.1.9
7.1.8
Changes between 7.1.7 and 7.1.8
Plugin changes
- isup: ensure compatibility with newer
requests
versions [#2235] - reddit: handle image preview links [#2245]
- search: per tests of both back-ends, warn more consistently about multiple
site:
operators [#2254] - translate: fix accepting language hints for Chinese [#2242]
- url:
- wikipedia: refine handling of sections with "hatnote" templates [#2225]
- xkcd: improve reliability of comic search [#2247]
Core changes
- Formatting tweaks in IRC logging output [#2250]
- Requirement tweaks to make sure installing on Python 3.4 still works
(but if you're still using that, please update your Python)
API changes
- Fix/improve more documentation [#2251]
7.1.7
Changes between 7.1.6 and 7.1.7
Plugin changes
- adminchannel: fix a very old bug in NUH (hostmask) handling [#2221]
- reddit:
- wiktionary: correctly handle multi-paragraph etymologies [#2214]
Core changes
- Added an alert if the IRC server registers the bot as a client using a
different nickname than what's set incore.nick
[#2215]
7.1.6
Changes between 7.1.5 and 7.1.6
Plugin changes
- reddit: fix regression in shortlink (
redd.it/<postID>
) handling [#2201] - url: fix tripping on HTML character entities like
'
if running on
Python 3.4+ [#2204] - wikipedia: add mobile links to URL handling [#2201]
Core changes
- Detect UTF-8 locale on Windows [#2174]
API changes
7.1.5
Changes between 7.1.4 and 7.1.5
Since 7.1.4 was released, an expiring TLS root certificate caused us some problems in the old CI system we're still using for Sopel 7.1.x to run tests against EOL versions of Python. Our workaround in #2192 (basically "Workaround 1" from this OpenSSL blog post) might be of use to anyone still running Sopel on an old system.
Core changes
7.1.4
7.1.3
Changes between 7.1.2 and 7.1.3
Plugin changes
- announce: fix Python 3 compatibility [#2166]
- reddit: fix handling post links with parameters, e.g. sorting [#2163]
- reddit: silence PRAW update notices [#2171]
- tell: don't strip IRC formatting at message start [#2162]
- translate: better error handling in
.mangle
[#2160] - wikipedia: skip messagebox template contents for cleaner snippets [#2159]
- wikipedia: improve handling of links to transcluded sections [#2168]
Core changes
- Fixed showing plugin information in
sopel-plugins
CLI tool even if loading
the plugin fails [#2135] - Stop warning about
parse == bool
configuration settings in 7.x [#2164]- This warning will return in Sopel 8.0, a major release which will be a
more natural time for plugin maintainers to release compatibility updates.
- This warning will return in Sopel 8.0, a major release which will be a
- Fixed
requests
requirement on Python 3.3 [#2172]
7.1.2
Accidentally tagged to the wrong branch at first, but corrected before any package was published to PyPI.
Changes between 7.1.1 and 7.1.2
Plugin changes
- invite: handle invalid arguments better [#2151]
- translate: handle failed API requests better [#2153]
- wikipedia: warn if deprecated
lang_per_channel
setting is used [#2143]