Skip to content

Releases: sopel-irc/sopel

7.0.1

06 Apr 05:54
@dgw dgw
Compare
Choose a tag to compare

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

  • Hotfixed a crash that could occur if the connection was lost [#1820]
  • Sopel now prints the used config file path at startup [#1822]

7.0.0

30 Jan 11:17
@dgw dgw
Compare
Choose a tag to compare

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][]]
    • An updated version with added features and tweaks, based on aspell, is
      installable separately [from PyPI][spellcheck-pypi] [[#1164][], [#1545][]]
    • See [#1142][] & [#1642][] for background on why we decided to separate
      spellcheck into a separate package (tl;dr: dependency hell)
  • 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]
  • The .choose/.choice command has been moved from dice into a standalone
    plugin, aptly named choose [[#1679][]]
  • Moved .py into its own plugin, named py [[#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
  • 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)
  • 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
  • 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
  • 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
  • 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)
  • 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
  • The .at command (in remind) 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!
  • A new tell plugin setting allows delivering messages privately [[#1694][]]
  • The reddit plugin now also handles short redd.it links, direct links to
    comments, inline u/ and r/ 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".
  • 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
  • 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 the admin 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
  • 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
  • The db_filename config setting (for SQLite) is now interpreted as relative
    to the config's homedir 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
  • 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
  • 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, and configure) replace many
      of the old --options, cleaning up the syntax
    • The legacy --options will continue to work for the life of Sopel 7.x, and
      will be removed in Sopel 8
  • 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 to sopel is considered deprecate...
Read more

7.0.0 RC2

27 Jan 05:45
@dgw dgw
Compare
Choose a tag to compare
7.0.0 RC2 Pre-release
Pre-release

This is a pre-release tag, intended to help verify the release process itself.

Assuming the build succeeds, it will also publish to PyPI, making available a near-final copy of Sopel 7.0 for use by developers in testing updates to their plugins.


RC2 includes tweaks to the PyPI description (README) and database API backward compatibility.

7.0.0 RC1

22 Jan 00:48
@dgw dgw
Compare
Choose a tag to compare
7.0.0 RC1 Pre-release
Pre-release

This is a pre-release tag, intended to help verify the release process itself.

Assuming the build succeeds, it will also publish to PyPI, making available a near-final copy of Sopel 7.0 for use by developers in testing updates to their plugins.

6.6.9

01 Jun 15:57
@dgw dgw
Compare
Choose a tag to compare

Changes between 6.6.8 and 6.6.9

Module changes

  • Also block changing core.owner_account setting in admin plugin [#1599]
  • Fixed instagram parsing after changes to the website [#1608]
  • tld plugin decodes HTML entities before output [#1612]
  • Handle an error condition when querying ip module using nickname [#1631]

Core changes

  • Fixed populating user & host in the bot's user database when NAMES reply
    arrives first [#1630]

6.6.8

09 May 05:09
@dgw dgw
Compare
Choose a tag to compare

Changes between 6.6.7 and 6.6.8

Module changes

  • admin module no longer allows setting core.owner value [#1587]
    • Allowing any bot admin to change the owner opened Sopel to a
      privilege-escalation attack
    • Even with this patch, you still should add only users you really trust to
      the admins list, for obvious reasons

API changes

  • Fixed some content & formatting errors in documentation [#1589]

6.6.7

30 Apr 22:01
@dgw dgw
Compare
Choose a tag to compare

Changes between 6.6.6 and 6.6.7

Fixing this bug, which was discovered after the previous release, serves to
exorcise the curse brought upon us by version 6.6.6.

Core changes

  • Fixed incorrect MODE message parsing that could lead to Sopel thinking
    some users had higher channel privileges than they did [#1575]

6.6.6

15 Apr 19:42
@dgw dgw
v6.6.6
Compare
Choose a tag to compare

Changes between 6.6.5 and 6.6.6

This slightly cursed version of Sopel is brought to you by the following happy
coincidences. When this release cycle began:

  • 6.6.6 was the next patch version number
  • Tax Day (in the U.S.) was just a few weeks off — the perfect release date

As it happens, the v6.6.6 GitHub milestone ended up with 13 closed
issues/PRs in total. We definitely didn't try to plan any of this. Promise.

Module changes

  • Potential denial-of-service via repeated long output in the .py and .calc
    commands was mitigated [#1552]
  • admin module's .set command no longer throws an exception if missing
    arguments [#1520]
  • Fixed admin module's .mode command sending invalid raw line [#1549]
  • Tweaked output-formatting code in the meetbot & reddit modules [#1516]
    • The most visible effect of this is that moderators' names will now appear
      green in reddit's output, like on the site, instead of the old brown/purple
  • Updated example/test output for .ip command [#1523]

Core changes

  • Flood protection delay is now capped at 2 seconds [#1552]
    • The flood delay penalty is calculated using the message length before
      truncation. Very long command output could thus "hang" the bot for many
      minutes at a time, meaning some modules could be used to DoS the bot.
    • Sopel 7 will add configuration for flood protection and perhaps reorganize
      the logic to reduce silly bugs like this. (See: #1518, #1559)
  • Fixed a few cases where keyboard interrupt (Control + C) wasn't handled
    correctly [#1534, #1558]
  • Fixed invalid MODE command sent during connection phase [#1544]

API changes

  • Fixed a regression in testing modules by running them directly [#1529]
  • Fixed that bot output methods (say, reply, etc.) would cause errors
    during tests if passed certain keyword arguments [#1538]

6.6.5

24 Mar 19:05
@dgw dgw
Compare
Choose a tag to compare

Changes between 6.6.4 and 6.6.5

Module changes

  • Fixed url module not cleaning punctuation when auto-titling [#1515]
  • Fixed url module's punctuation-cleaning on Python 2 [#1517]
  • Fixed .redditor command with newer praw versions (4.0+) [#1506]
  • Reloading modules now runs their shutdown() routines [#1412]

6.6.4

10 Mar 02:14
@dgw dgw
Compare
Choose a tag to compare

Changes between 6.6.3 and 6.6.4

Module changes

  • Replaced help pastebin with clbin.com
    • ptpb.pw shut down due to abuse — see ptpb/pb#246 for more
    • More news on this front (reducing Sopel's dependence on specific pastebins)
      in a future release. Several ideas are under consideration.
  • Cleaned up code in instagram and unicode modules
  • Core modules now use bot.channels instead of deprecated bot.privileges

Core changes

  • Privilege tracking now always updates both bot.channels & bot.privileges,
    where before some handlers only updated one or the other
    • This should have zero effect on behavior, but do report any observed.