Skip to content

Releases: sopel-irc/sopel

8.0.0

02 Jun 06:26
@dgw dgw
1237568
Compare
Choose a tag to compare

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
  • 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 to sopel.tools.identifiers and now supports dynamic
    casemapping; an optional casemapping or identifier_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 an Identifier
      representing any nick or channel name you get, e.g. as input to a command
  • The core.nick setting value is now returned as a str, not an Identifier
  • 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 now None in
    cases where its value is meaningless (events with no channel/query context)
  • Numerous deprecated API features were removed:
    • bot.privileges (use bot.channels)
    • bot.msg() (use bot.say())
    • sopel.web submodule (use sopel.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 from trigger.sender if present and stored in a
    separate trigger.status_prefix attribute
    • See documentation for bot.SopelWrapper.default_destination
  • 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][]]
  • adminchannel:
    • Refactored hostmask handling & added code comments/tests [[#2222][]]
    • Improved result of trying to kick the bot with .kick [[#2240][]]
    • Unified topic-mask management under .tmask with subcommands [[#2601][]]
  • bugzilla:
    • Extracted to [its own package][sopel-bugzilla] [[#2481][]]
  • calc:
    • Improved error handling [[#2507][]]
    • Improved help output & test coverage [[#2530][]]
  • clock:
    • Added unset commands for user & channel time zone/format [[#2181][]]
  • coretasks:
    • Replaced "hostmask" type with "host" in .blocks command [[#2344][]]
      • Real "hostmask" support is planned; see [#1355][]
    • Improved help output for .blocks [[#2345][]]
  • currency:
    • Added .currencies command to list known currency symbols [[#2439][]]
    • fiat_provider setting takes precedence over the existence of a
      fixer_io_key value [[#2330][]]
    • Switched from exchangerate.host to open.er-api.com [[#2512][]]
  • dice:
    • Refactoring, bugfixes, and improved test coverage [[#2532][]]
  • emoticons:
    • Added .tback alias for .unflip command [[#2287][]]
    • Made .unflip table more closely match the .tflip one [[#2287][]]
  • find:
    • Fixed use of flags when | is used as input separator [[#2447][]]
    • Code cleanup [[#2267][]]
  • help:
    • Now updatable independently from [its own package][sopel-help], but still
      installs with Sopel as a dependency [[#2332][]]
  • ip:
    • Miscellaneous code-style improvements [[#2393][]]
    • Extracted to [its own package][sopel-iplookup] [[#2523][]]
  • 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]
  • py:
    • Extracted to [its own package][sopel-py] [[#2411][], [#2415][]]
  • reddit:
    • Newer praw library allowed [[#2319][]]
    • Added configuration setting to turn off inline slash-references [[#2418][]]
    • Extracted to [its own package][sopel-reddit] [[#2444][]]
  • reload:
    • Remove unsupported .update command [[#2416][]]
    • Improve plugin help strings [[#2417][]]
  • remind:
    • Avoid trying to use IRC connection if it's not ready [[#2351][], [#2374][]]
    • Extracted to [its own package][sopel-remind] [[#2478][]]
  • safety:
    • Comprehensive rework improving caching, output, etc. [[#2279][]]
    • Ignore invalid hostnames [[#2472][]]
  • search:
    • Fix .suggest when there is only one result [[#2513][]]
    • Code style and dependency updates [[#2260][], [#2334][], [#2420][]]
  • seen:
    • Adapted to aware trigger.time [[#2265][]]
    • Prevent error spam if database is temporarily inaccessible [[#2338][]]
  • tell:
    • Fixed edge cases in cleanup of tellee argument [[#2584][]]
  • translate:
    • Improved help output [[#2453][]]
  • unicode_info:
    • Uses unicodedata2 if available [[#2349][], [#2361][]]
  • 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][]]
  • version:
    • Support retrieving plugin versions with .version pluginname [[#2133][]]
  • 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][]]
  • xkcd:
    • Switched keyword-search backend [[#2376][], [#2377][]]

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:
    • Removed default B mode from core.modes [[#2448][]]
    • Added space before timezone in default_time_format [[#2531][]]
  • IRC backend refactored to use asyncio [[#2256][]]
    • Just in time, too: The asynchat module was removed in Python 3.12
  • 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 with importlib.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 legacy UHNAMES feature [[#2102][]]
    • chghost capability [[#2116][]]
  • Improved SASL handling when auth fails [[#2187][], [#2191][]]
  • Added automatic CASEMAPPING handling based on RPL_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__ to Channel and User 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 and ssl_minimum_version settings [[#2246][], [#2306][]]
  • Added antiloop_repeat_text, antiloop_silent_after, antiloop_threshold,
    and antiloop_window settings to control command-loop prevention [[#2320][]]
  • Using , in ListAttribute values logs a warning [[#2252][]]
    • 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
  • Fixed UHNAMES race condition caused by joining channels too soon [[#2321][]]
  • Removed hunting for CA root store [[#2278][], [#2303][]]
    ...
Read more

7.1.9

01 May 06:33
@dgw dgw
Compare
Choose a tag to compare

Changes between 7.1.8 and 7.1.9

Plugin changes

  • search: replace deprecated git.io link in messaging [#2271]
  • tell: fix exception when message is missing [#2264]

7.1.8

21 Feb 07:00
@dgw dgw
Compare
Choose a tag to compare

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:
    • bump user-agent [#2218]
    • tweak logging levels to better reflect severity [#2249]
  • 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

11 Dec 13:29
@dgw dgw
Compare
Choose a tag to compare

Changes between 7.1.6 and 7.1.7

Plugin changes

  • adminchannel: fix a very old bug in NUH (hostmask) handling [#2221]
  • reddit:
    • add flair text to submission output [#2209]
    • further improve link matching [#2208, #2216]
  • 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 in core.nick [#2215]

7.1.6

04 Nov 22:32
@dgw dgw
Compare
Choose a tag to compare

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 &apos; 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

  • web.decode(): use Python's built-in HTML character entity decoder if
    available [#2204]
  • Fix minor documentation error [#2196]

7.1.5

12 Oct 05:16
@dgw dgw
Compare
Choose a tag to compare

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

  • Fixed incorrect behavior during unrecognized SASL authentication [#2190]
  • Ignore case when checking config sections for "defined" settings [#2193]

7.1.4

12 Sep 05:08
@dgw dgw
Compare
Choose a tag to compare

Changes between 7.1.3 and 7.1.4

Plugin changes

  • reddit: prevent comment links from also displaying post info [#2176]

7.1.3

16 Aug 22:26
@dgw dgw
Compare
Choose a tag to compare

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.
  • Fixed requests requirement on Python 3.3 [#2172]

7.1.2

11 Jul 22:56
@dgw dgw
Compare
Choose a tag to compare

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]

Core changes

  • Clarified documentation about owner and owner_account settings in core
    config section [#2112, #2125]

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]