Releases: sopel-irc/sopel
7.1.1
Changes between 7.1.0 and 7.1.1
Plugin changes
- safety: fixed loading bad-domains list on py2 [#2103]
- tell: fixed hard-coded verb when trying to
.ask
the bot [#2106] - tld: fixed
.tldcache clear
command corrupting internal state [#2077]
Core changes
- Fixed
BooleanAttribute
withdefault=True
[#2084] - Ignore invalid URLs when triggering URL callbacks [#2086]
- Fixed infinite loop in WHO tracking on certain networks [#2091]
- Ignore problematic environment variables in tests [#2094]
- Improved MODE tracking even more [#2097, #2098]
- Updated, clarified, and expanded even more documentation [#2090,
#2096, #2105, #2108]
7.1.0
Changes between 7.0.7 and 7.1.0
Admittedly a few months later than originally intended, Sopel 7.1.0 is ready
to go. We've focused on polish this time around, both in documentation and
features. Lots of little fixes add up to make something good—over 140 pull
requests were merged for this release.
We will now begin work on Sopel 8.0, focusing primarily on
modernization—dropping the end-of-life Python versions that 7.x still
supports—and on unbundling the core plugins so they can be updated separately.
None of these plans are new, but we figured a reminder was in order as it's
been some months since they last came up in Sopel 7.0's release notes!
As always, you can keep up with development and give us feedback on
[GitHub][sopel-github], [IRC][sopel-irc], or [Twitter][sopel-twitter].
Important note: Sopel's IRC channel has moved from freenode to Libera Chat
([#2072][]). You will find us in #sopel
as always, but at a new network
address: irc.libera.chat
. At least some of the old guard will remain on
freenode for the foreseeable future, to guide anyone running an older Sopel
version to the new channel (and encourage them to update Sopel, too).
Plugin changes
- Removed
instagram
plugin, as it was not possible to fix after changes to
the site [[#2000][]] - Merged
etymology
plugin functionality intowiktionary
plugin [#1178,
[#2064][]] - admin:
- adminchannel:
- announce: speed up by sending to multiple channels if the server supports it
[[#1859][], [#2048][]] - choose: safely handle formatted choices [[#1965][]]
- currency:
- emoticons: added
.smirk
command & action responses [[#1899][]] - find: accept either
/
or|
as delimiter, and format replacement text as
bold so it's easier to see the correction [[#1993][], [#2014][],
[#2066][]] - find_updates:
- ip: querying by nickname is no longer case-sensitive [[#1915][]]
- isup: be more specific about what's wrong if the site looks down [[#1940][],
[#1950][], [#2063][]] - meetbot: tweaked handling of path settings [[#1959][]]
- ping: added
.ping
command [[#1875][]] - pronouns: now understands two-word aliases for the full pronoun groups
[[#2069][]] - reddit:
- remind: added commands to count/forget reminders [[#2007][]]
- safety: switched away from obsolete list source [[#2012][]]
- tell: strip
@
from the start of nicknames [[#1994][]] - tld: rewritten to be more robust [[#1939][], [#1949][], [#1968][],
[#1970][], [#1985][], [#2076][]] - url:
- tweaked to improve reliability of title fetching [[#1871][]]
- added a setting to control automatic titles [[#1897][]]
- adapted to upstream dependency changes [[#1989][]]
- add
.urlexclude
/.urlallow
commands [[#2028][]] - auto-title now ignores URLs in any other command [[#2028][]]
- fixed showing an error when appropriate [[#2029][]]
- wikipedia:
- xkcd: show latest comic when base URL is linked [[#1858][]]
- Built-in plugins' output formats were checked for consistency [[#1937][]]
- Improved plugin documentation/help [[#1878][], [#1952][], [#1954][],
[#2002][], [#2035][]] - Updated some plugins to use new API features [[#1879][], [#1892][],
[#1894][], [#1995][]] - Minor code style fixes and cleanup [[#1856][], [#1880][], [#1910][],
[#1953][], [#1960][]]
Core changes
- Sopel's outbound flooding protection is now configurable [[#1929][]]
core.modes
setting now only assumes+
if no sign is included in its
value [[#1941][]]- Improved documentation of core configuration settings [[#1861][], [#1866][],
[#2006][]] - Documented use of environment variables to override parts of Sopel's
configuration [[#1901][]] - Improved command-line error messages [[#2047][]]
- Unexpected settings in config files will now generate warnings [[#1973][]]
- Improved SASL handling [[#1928][], [#1971][], [#1976][], [#1977][]]
- Change/recover in-use nick; fix
USER
syntax [[#1930][]] - Improved channel mode tracking [[#1980][]]
- Improved channel member tracking [[#1997][]]
- Reduced log spam from core
MODE
handling logic [[#1951][]] - Refactored the Rule system [[#1873][], [#1894][], [#1904][], [#2011][]]
- Reworked IRC connection timeout management [[#2041][]]
- Fixed loading callables that should be ignored from plugins [[#1936][]]
- Streamlined how the bot generates help text for plugin commands [[#2071][]]
- Fixed signal handling (e.g.
^C
) if bot is not connected [[#1893][]] - Fixed crash if a plugin tries to
sys.exit()
[[#1943][]] - Fixed crash if IRC backend is uninitialized and logging to a channel is
enabled [[#2020][]] - Improved scheduled job handling [[#1891][], [#1927][]]
- Improved test coverage [[#1983][], [#1984][]]
- Improved test infrastructure [[#1905][]]
- Minor code style fixes and refactoring [[#1864][], [#1890][], [#1933][],
[#1942][], [#1969][], [#1998][], [#2005][], [#2023][]]
API changes
- Moved plugin decorators to
sopel.plugin
;sopel.module
is now deprecated
[[#1898][], [#1906][], [#1924][], [#1967][]]- Decorators that are new in Sopel 7.1 or later will appear only in
sopel.plugin
;sopel.module
contains only a snapshot of what was
available in Sopel 7.0 and will not be updated - The old
sopel.module
imports will be removed in Sopel 9.0
- Decorators that are new in Sopel 7.1 or later will appear only in
- The
intent
decorator is replaced byctcp
, andtrigger
objects now have
actcp
property [[#1975][]]- "Intents" were an IRCv3 spec idea that never took off, and the draft specs
for them are now long abandoned - See [#1683][] for the full deprecation and removal plan
- "Intents" were an IRCv3 spec idea that never took off, and the draft specs
sopel.tools
functions related to command patterns/regex are now deprecated
[[#1944][], [#2027][], [#2034][]]tools.get_input
is now deprecated [[#1872][]]bot.(un)register_url_callback
functions are deprecated [[#2049][]]- These are simply no longer necessary after the Rule system rewrite
test_tools
submodule is now deprecated [[#2003][]]- Sopel now provides a
pytest
plugin; use that instead
- Sopel now provides a
- The use of whitespace after
$nick
placeholders in plugin rules is now less
confusing [[#1920][]] - Sopel now explicitly supports running plugins' event handlers before/after
core has processed the event [[#2018][]] - Added more tools related to
tools.time.seconds_to_human
[[#2026][]] - Added a warning when plugins use
bot.memory['url_callbacks']
[[#2033][]] - Added
SopelIdentifierMemory
class totools
[[#1938][]]- This offers a less error-prone alternative to using a plain
SopelMemory
,
which often requires manually casting user input to theIdentifier
type
- This offers a less error-prone alternative to using a plain
- New
plugin.require_bot_privilege
decorator andbot.has_channel_privilege
method [[#1982][]] - Added
plugin.find
andplugin.search
decorators [[#1881][]] - Added
plugin.rule_lazy
,plugin.find_lazy
, andplugin.search_lazy
decorators [[#2037][]]- These are for plugins to define rules that depend on the contents of
Sopel's settings object (bot.config
)
- These are for plugins to define rules that depend on the contents of
bot.say
now allows even more control over variable-length content via
optionaltruncation
andtrailing
parameters [[#1958][], [#2050][]]bot.trigger
now has aplain
attribute, containing the received line with
formatting stripped [[#1918][]]Channel
objects now contain information about channel modes [[#1980][]]- Added a
BooleanAttribute
setting type [[#2044][], [#2059][]]- Use of
ValidatedAttribute
withparse=bool
is now considered deprecated
so we can remove the monkey-patching in a future release, and will raise a
warning if used
- Use of
- Added a
SecretAttribute
setting type, andis_secret
parameter to
ValidatedAttribute
[[#1879][]] plugin.example
now supports running plugin tests with [VCR.py][pypi-vcrpy]
support [[#1853][]]bot.isupport
will return an emptyCHANMODES
if unadvertised [[#2015][]]- Make
tools.time
andtools.web
submodules available with justfrom sopel import tools
[[#1948][]] - Added new optional
warning_in
andstack_frame
parameters to the
tools.deprecated
decorator, which now outputs its warning via logging
[[#1872][], [#2046][], [#2058][]] MockIRCServer
methods now block by default [[#2065][]]- Improved documentation for writing & testing plugins [[#1923][], [#1964][],
[#2013][], [#2067][]] - Improved documentation of various Sopel components:
- Tweaked documentation styles for easier readability [[#1932][]]
- Note: We plan to change the documentation theme entirely for Sopel 8, to
something much more modern
- Note: We plan to change the documentation theme entirely for Sopel 8, to
[#1763...
7.0.7
Changes between 7.0.6 and 7.0.7
Core changes
- Make sure Sopel continues to install smoothly on all of its supported Python
versions after November 2020 changes inurllib3
1.26 - Updated a few spots in tests and documentation to keep our 7.0.x maintenance
branch in tip-top shape
7.0.6
7.0.5
7.0.4
7.0.3
7.0.2
Changes between 7.0.1 and 7.0.2
Plugin changes
- Fix version comparison in
find_updates
plugin [#1832] - Suppress link when
xkcd
plugin is triggered by a URL [#1848] - Fix
reddit
grammar when post/comment only has 1 point [#1849] - Handle missing data when
safety
plugin uses VirusTotal [#1851] - Update
search
plugin for changed Bing SERPs [#1852]- Also fixes
xkcd
plugin's find-comic-by-keywords functionality
- Also fixes
Core changes
- Fixed that per-channel configuration didn't work as documented for some
plugin types [#1840] - Show how to use channel key (password) in configuration examples [#1844]
- Fixed URL callbacks bypassing user/channel restrictions [#1845]
- Capped
urllib3
(transitive dependency fromrequests
) version on Python
3.3 to avoid a recent release breaking things - Meta: Fixed incorrect links in changelog entry for 7.0.1
API changes
- Handle 0 seconds properly in
tools.time.seconds_to_human()
[#1843]
7.0.1
Changes between 7.0.0 and 7.0.1
Sopel 7.0.1 contains small fixes and tweaks for core code, core plugins, and
documentation. As this is a maintenance release, there are no new API features
or deprecations to report—but stay tuned for a few new things in version 7.1.0.
Plugin changes
- The
reddit
plugin now displays when a redditor is an admin [#1764] - When triggered by a native media link,
reddit
plugin output will include a
link to the submission page (comments view) [#1814] - Fixed
reddit
plugin not matching links with encoded characters [#1827] clock
plugin's.setchanneltz
command now emits an error message if an
unprivileged user attempts to use it [#1828]- Fixed the
units
plugin's handling of 16 ounces / 1 pound [#1829] - Fixed loading
remind
database with reminder(s) containing certain IRC
formatting characters [#1831]
Core changes
7.0.0
Changes between 6.6.9 and 7.0.0
Sopel 7.0 contains numerous fixes, tweaks, new features, and internal
improvements. While we maintain no official statistics on such things, it's
probably the biggest release the project has ever seen.
The full, detailed list of changes is below, but you can just read the
[migration guide][sopel-7-migration] if all you care about is the really
important stuff. All breaking changes (including those planned for the next
release) are explained there.
Plugin changes
- The
spellcheck
plugin has been removed to simplify dependencies [[#1675][]] - Similarly, the
ipython
plugin is now an external package, eliminating from
Sopel itself a dependency which most users will never need [[#1684][]]- Find the new
sopel-ipython
package [on PyPI][ipython-pypi]
- Find the new
- The
.choose
/.choice
command has been moved fromdice
into a standalone
plugin, aptly namedchoose
[[#1679][]] - Moved
.py
into its own plugin, namedpy
[[#1710][], [#1711][], [#1712][]]- In case of issues with our "official" instance, there's now a setting to
configure the address of your own [Oblique][oblique] service
- In case of issues with our "official" instance, there's now a setting to
- The
currency
plugin changed data sources to support more currencies, and
can optionally use Fixer.io for even more [[#1430][], [#1627][], [#1629][]]- Fixer.io requires a free API key, which gives plenty of calls per month
(the plugin caches exchange rates for 24 hours)
- Fixer.io requires a free API key, which gives plenty of calls per month
- Choose any of five pastebin services for
help
output [[#1451][], [#1651][]]- This is intended mostly for resilience (so one pastebin service going
down, as ptpb did during the 6.6.x life-cycle, won't force a new Sopel
release), but it's also just good to have choices
- This is intended mostly for resilience (so one pastebin service going
- Optionally hide IRC server name/address in
help
command listing [[#1459][]] - New
help
plugin setting,reply_method
[[#1700][]] wiktionary
now supports many more parts of speech [[#1443][]]- Definitions can be retrieved for things like proper nouns, prepositional
phrases, and punctuation marks—things that were unsupported in Sopel 6.x - This means that the
wiktionary
plugin is now somewhat case-sensitive, to
account for common and proper nouns that differ only in capitalization
- Definitions can be retrieved for things like proper nouns, prepositional
url
will now ignore "private" addresses by default [[#1439][], [#1624][]]- New config settings for the
url
plugin allow overriding the checks, in
cases where loading previews of e.g. LAN servers is safe - The default is off, so users don't unwittingly open themselves to attackers
fishing for running HTTP services on the local machine or network
- New config settings for the
url
now correctly ignores invalid URLs (e.g.http://*\.com
) [[#1788][]]- Various improvements to the
clock
functions [[#1592][]]- Improved guessing in
.t
/.time
command, which no longer falls back all
the way to the bot's default timezone if given an unrecognized argument - New
.tz
command, to explicitly get time for a timezone name (in case of
conflict between a known nick and a timezone name)
- Improved guessing in
- The
tell
&remind
plugins' ".db" files have changed names [[#1699][]]- Both will attempt automatic migration of existing files, if they exist,
and output debugging information if the migration fails
- Both will attempt automatic migration of existing files, if they exist,
- The
.at
command (inremind
) understands dates now [[#1590][], [#1736][]]- Finally, it's possible to set a reminder more than 24 hours ahead without
first converting the future date/time to a duration for use with.in
!
- Finally, it's possible to set a reminder more than 24 hours ahead without
- A new
tell
plugin setting allows delivering messages privately [[#1694][]] - The
reddit
plugin now also handles shortredd.it
links, direct links to
comments, inlineu/
andr/
references, & reddit-hosted image/video links
[[#1503][], [#1720][], [#1722][], [#1734][], [#1760][], [#1773][]] - Spoilers & NSFW are now separate concepts in the
reddit
plugin [[#1620][]]- Reddit implemented spoilers as a distinct post flag some time ago. Sopel's
plugin supports independently setting channels as "SFW" or "spoiler-free".
- Reddit implemented spoilers as a distinct post flag some time ago. Sopel's
- Rolling
.dice
now officially supports trailing# comments
[[#1577][]] - Python version is now included in
.version
command output [[#1462][]] - The
.version
command's output format is improved [[#1633][]] - Using the
.reload
command shows the specific file reloaded [[#1762][]] - The
.seen
command's output now uses relative time [[#1661][]] - Readability of
.choose
command output is significantly improved [[#1425][]] - Added
.invite
command [[#1497][]]- Both Sopel and the inviting user must have privileges in the target channel
- A
.restart
command is added [[#1333][]]- Usable by admins only, just like
.quit
- Usable by admins only, just like
- The
.msg
command is now known as.say
[[#1606][]].msg
will continue to work for now, likely until being removed in Sopel 8
- The
admin
plugin auto-saves channels when using.join
/.part
, and added
.tmpjoin
/.tmppart
commands to bypass this behavior [[#1492][]] - Added command to
.unset
config values in theadmin
plugin [[#1556][]] - Restored commands in
adminchannel
plugin for managing op/voice [[#1498][]]- These were removed some time ago, seemingly without reason, by the
project's previous maintainers - Since there was some desire from users to have them back, we restored them
- These were removed some time ago, seemingly without reason, by the
- Fixed/tweaked hostmask handling in
adminchannel
ban functions [[#1791][]] find
also collects Sopel's own messages now, so users can "correct" the bot
if they wish to be extra cheeky [[#1470][]]- Fixed that the
url
plugin had to be enabled or some link-handling functions
wouldn't work [[#1510][]] - Tweaked
.ddg
command output so it's less likely to mangle URLs [[#1713][]] remind
commands now "reply" with error messages [[#1715][]]- Fixed
etymology
plugin error with empty argument [[#1677][]] - Fixed an uncaught exception in
instagram
plugin [[#1702][]] - Handle JSON fetch/parse errors in
find_updates
plugin [[#1779][]] - Removed nonsensical uses of the
core.verify_ssl
setting [[#1706][]] - Unused
clock
plugin settings have been removed [[#1696][]] - Updated MaxMind database handling in
ip
plugin [[#1797][]] - Reworked
safety
plugin's cache management [[#1753][], [#1802][]] - General code cleanup and tweaks all around [[#1402][], [#1486][], [#1505][],
[#1569][], [#1573][], [#1578][], [#1579][], [#1581][], [#1592][], [#1606][],
[#1607][], [#1609][], [#1678][], [#1681][], [#1696][], [#1717][], [#1721][],
[#1725][], [#1735][], [#1741][], [#1754][]]
Core changes
- Brought back support for non-SQLite databases by switching to SQLAlchemy
[[#1446][], [#1652][], [#1729][], [#1755][], [#1774][], [#1777][], [#1783][]]- For details on using non-SQLite databases, see the [README][readme-db] or
[configuration instructions][db-config-docs] - You will probably need to install additional dependencies if you wish to
use something other than SQLite - Migrating an existing database from SQLite to your chosen option is
probably easy, but we do not offer instructions for doing so - Be aware that plugins written for older versions of Sopel might not work
properly with non-SQLite databases
- For details on using non-SQLite databases, see the [README][readme-db] or
- The
db_filename
config setting (for SQLite) is now interpreted as relative
to the config'shomedir
setting [[#1574][]]homedir
itself has a default value that will be used if not set
- Added separate server & nickname authentication options [[#1513][]]
- See [authentication configuration docs][auth-config-docs]
- Added
commands_on_connect
setting to send a list of commands automatically
when Sopel's IRC connection is successfully established [[#1528][]] - Log files have become much more configurable [[#1678][], [#1714][]]
- Logs are named based on the config name
- Many, many new settings added to customize logging
- The default log format includes timestamp, source package, & level (which
will make logs much more useful when reporting bugs)
- Logs now have information about which plugin file was reloaded [[#1762][]]
- This is helpful for owners of Sopel instances with multiple versions of a
plugin available for testing or development purposes
- This is helpful for owners of Sopel instances with multiple versions of a
- Sopel's own rate-limiting & flood protection parameters are now configurable,
and can even be turned off entirely if Sopel is behind a bouncer or other IRC
proxy that handles flood protection itself [[#1518][], [#1638][]] - Added more control over JOIN throttling [[#1751][]]
- Includes a new
throttle_wait
setting instead of a hard-coded time value
- Includes a new
- Log timestamp and log line formats are now configurable [[#1512][]]
- See details in [the logging configuration docs][logging-config-docs]
- Log filenames now include the config name, to help keep track of logs from
multiple Sopel instances [[#1547][]] - Home directory is no longer assumed to be
~/.sopel
on first run [[#1404][]] - Restarting Sopel via CLI is added [[#1333][]]
- Sopel's CLI is restructured [[#1493][], [#1509][], [#1718][]]
- New subcommands (
start
,stop
,restart
, andconfigure
) replace many
of the old--option
s, cleaning up the syntax - The legacy
--option
s will continue to work for the life of Sopel 7.x, and
will be removed in Sopel 8
- New subcommands (
- New
--config-dir
common option [[#1598][]] - Added a new
sopel-config
command for working with config files [[#1507][]]- Currently supports
list
(existing files),init
(new config file), and
get
(config value) actions - The old
--list
argument tosopel
is considered deprecate...
- Currently supports