Skip to content

Releases: sopel-irc/sopel

7.1.1

20 Jun 01:44
@dgw dgw
Compare
Choose a tag to compare

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 with default=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

29 May 22:32
@dgw dgw
Compare
Choose a tag to compare

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 into wiktionary plugin [#1178,
    [#2064][]]
  • admin:
    • reply on save [[#1913][]]
    • add .chanlist command to show Sopel's channel memberships [[#1961][]]
  • adminchannel:
    • use TOPICLEN if server advertises it [[#1956][]]
    • allow non-op .topic in channels without mode +t [[#1981][]]
  • announce: speed up by sending to multiple channels if the server supports it
    [[#1859][], [#2048][]]
  • choose: safely handle formatted choices [[#1965][]]
  • currency:
    • added thousands separator & better handling of small numbers [[#1988][]]
    • improved error handling [[#2053][]]
    • updated API endpoints [[#1988][], [#2060][], [#2074][]]
  • 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:
    • prepare to handle unstable releases again [[#1955][]]
    • improve error handling [[#2052][], [#2056][]]
  • 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:
    • added handling for r/all and r/popular [[#1763][]]
    • fixed incorrect behavior in r/ and u/ handling [[#1889][]]
    • added basic handling for gallery view [[#1914][]]
    • fixed a floating-point issue [[#1987][]]
    • fixed grammar [[#2025][]]
  • 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:
    • can now fetch section snippets [#1163]
    • language preferences per-channel and per-nick are now stored in the
      database, and manageable with commands [[#1916][]]
  • 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][]]
    • Also fixed some broken functionality related to this feature [[#1882][],
      [#1900][]]
  • 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
  • The intent decorator is replaced by ctcp, and trigger objects now have
    a ctcp 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
  • 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
  • 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 to tools [[#1938][]]
    • This offers a less error-prone alternative to using a plain SopelMemory,
      which often requires manually casting user input to the Identifier type
  • New plugin.require_bot_privilege decorator and bot.has_channel_privilege
    method [[#1982][]]
  • Added plugin.find and plugin.search decorators [[#1881][]]
  • Added plugin.rule_lazy, plugin.find_lazy, and plugin.search_lazy
    decorators [[#2037][]]
    • These are for plugins to define rules that depend on the contents of
      Sopel's settings object (bot.config)
  • bot.say now allows even more control over variable-length content via
    optional truncation and trailing parameters [[#1958][], [#2050][]]
  • bot.trigger now has a plain 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 with parse=bool is now considered deprecated
      so we can remove the monkey-patching in a future release, and will raise a
      warning if used
  • Added a SecretAttribute setting type, and is_secret parameter to
    ValidatedAttribute [[#1879][]]
  • plugin.example now supports running plugin tests with [VCR.py][pypi-vcrpy]
    support [[#1853][]]
  • bot.isupport will return an empty CHANMODES if unadvertised [[#2015][]]
  • Make tools.time and tools.web submodules available with just from sopel import tools [[#1948][]]
  • Added new optional warning_in and stack_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

[#1763...

Read more

7.0.7

14 Nov 07:36
@dgw dgw
Compare
Choose a tag to compare

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 in urllib3 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

04 Aug 17:40
@dgw dgw
Compare
Choose a tag to compare

Changes between 7.0.5 and 7.0.6

Core changes

  • Tweak reddit plugin's requirements to mitigate install problems on older
    versions of Python [#1919]

[Note: Nuked and re-tagged before publishing to PyPI due to a Git mix-up. Sorry for the double email notification!]

7.0.5

26 Jul 05:20
@dgw dgw
Compare
Choose a tag to compare

Changes between 7.0.4 and 7.0.5

Core changes

  • Update ip plugin's requirements to prevent install problems on older
    versions of Python [#1909]
    • Also includes a tweak to one of DuckDuckGo's tests in the search plugin,
      and a backported update to the ip plugin's tests.

7.0.4

24 May 22:59
@dgw dgw
Compare
Choose a tag to compare

Changes between 7.0.3 and 7.0.4

Plugin changes

  • Relax DuckDuckGo test in search plugin that was causing CI issues

Core changes

  • Fix plugin name in bot's internal command-group tracking [#1863]

7.0.3

01 May 08:34
@dgw dgw
Compare
Choose a tag to compare

Changes between 7.0.2 and 7.0.3

Plugin changes

  • Tweak Bing result matching in search plugin again [#1854]

Core changes

  • Fix URL callbacks missing required attributes [#1855]

7.0.2

30 Apr 19:14
@dgw dgw
Compare
Choose a tag to compare

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

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 from requests) 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

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