Skip to content

Commit

Permalink
Last WIP changelog commit for 8.0! That's the whole list!
Browse files Browse the repository at this point in the history
  • Loading branch information
dgw committed Mar 16, 2024
1 parent 90581b8 commit f185cc9
Showing 1 changed file with 158 additions and 22 deletions.
180 changes: 158 additions & 22 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ Highlights
* `.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:**

Expand Down Expand Up @@ -56,30 +58,45 @@ Plugin changes
* adminchannel:
* Refactored hostmask handling & added code comments/tests [[#2222][]]
* Improved result of trying to kick the bot with `.kick` [[#2240][]]
* 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:
Expand All @@ -94,19 +111,27 @@ Plugin changes
* 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][]]
* 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:
Expand All @@ -117,6 +142,7 @@ Plugin changes
* 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][]]

Expand All @@ -127,16 +153,20 @@ Core changes
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][], [#2516][]]
[#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 authentication using client certificates [[#2100][]]
* Sopel automatically marks itself as a bot if the IRC server supports
[the Bot Mode specification][bot-mode-spec] [[#2088][]]
* 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][]]
Expand Down Expand Up @@ -169,6 +199,7 @@ Core changes
* See [ZNC issue #1224][znc/znc#1224]
* Override `get_version()` method for `EntryPointPlugin` [[#2313][]]
* Take advantage of `LINELEN` token if advertised in ISUPPORT [[#2346][]]
* Unescape ISUPPORT parameter values [[#2429][]]
* Keep track of user realnames via WHO/WHOX [[#2383][], [#2396][]]
* Raise error on receiving non-UTF-8 data if server advertises `UTF8ONLY`
[[#2365][], [#2369][], [#2372][]]
Expand All @@ -177,6 +208,9 @@ Core changes
* Add guardrails to channel logging [[#2419][]]
* Default is now always WARNING, regardless of file logging level
* DEBUG level is no longer available for channel logs; it is far too noisy
* Handle `core.modes` setting being `None` [[#2510][]]
* Handle broken symlinks to plugin files [[#2545][]]
* Fixed auto-saving changes to Sopel's ignore list with `.blocks` [[#2550][]]

API changes
-----------
Expand All @@ -196,22 +230,33 @@ API changes
* Moved `check_pid()` and `stderr()` functions to `cli.utils` [[#2385][]]
* Deprecated `tools.OutputRedirect` class left over from the days before
modern logging, to be removed in Sopel 8.1 [[#2385][]]
* Moved privilege constants into their own `sopel.privileges` submodule
[[#2179][], [#2352][]]
* The original constants in `sopel.plugin` are still available for now
* Sopel's API now uses `Enum` types where suitable:
* Moved channel privilege constants into their own `sopel.privileges` submodule
[[#2179][], [#2352][], [#2540][]]
* The new `sopel.privileges.AccessLevel` type encapsulates all levels in a
single object, which can support dynamic features in the future
* The original, individual constants in `sopel.plugin` are still available for
now, mapped to their corresponding `AccessLevel` values
* Sopel's API now uses enumerated types where suitable:
* `formatting.colors` [[#2122][]]
* `privileges.AccessLevel` [[#2540][]]
* `tools.events` [[#2127][]]
* `bot`-tagged messages are ignored by default [[#2089][]]
* `trigger.time` is offset-aware [[#2099][]]
* `tools.time.format_time()` accepts offset-aware `datetime` values [[#2132][]]
* `tools.time` improvements & changes:
* `format_time()` accepts offset-aware `datetime` values [[#2132][]]
* `seconds_to_split()` returns a `Duration` named tuple [[#2446][]]
* `validate_timezone()` now raises `ValueError` for `None` [[#2446][]]
* Added `plugin.allow_bots` decorator [[#2244][]]
* Added more rate-limit controls [[#2290][]]
* Added more rate-limit controls [[#2290][], [#2434][]]
* New `message` keyword-only argument to `plugin.rate` decorator, an optional
string sent via NOTICE when a command is rate-limited
* New `plugin.rate_user`, `plugin.rate_channel`, and `plugin.rate_global`
decorators provide simpler control over a single rate-limit type, with the
`rate` and `message` (optional) as positional parameters
* Messages support various placeholders that will be replaced with runtime
data about the triggering user, the rate limit in effect, and the
plugin/command that was limited; see [`plugin.rate`][rate-decorator]
decorator documentation for details
* Added `bot.safe_text_length()` method [[#2136][]]
* Added `RPL_WHOISBOT` to `tools.events` list [[#2145][]]
* Added `bot.plugins` property [[#2199][]]
Expand All @@ -224,6 +269,8 @@ API changes
helper method to automatically use the bot's knowledge about the current
server's configuration
* Added CHANTYPES support to `Identifier` [[#2236][]]
* Added `bot.make_identifier_memory()` helper to easily take advantage of the
bot's CASEMAPPING and CHANTYPES knowledge [[#2552][]]
* Changed reading `core.nick` from the bot's settings to return a `str` instead
of `Identifier` [[#2231][]]
* Depending on what your plugin does, you might need to use the result of
Expand All @@ -237,6 +284,8 @@ API changes
* Sopel 8.0 removes `intent` from `trigger.tags`; use `trigger.ctcp` instead
* Updated invite-related event names in `tools.events` [[#2270][]]
* Fixed checking if `None` exists in a `SopelIdentifierMemory` [[#2306][]]
* Fixed and tested `SopelIdentifierMemory` interactions with plainer-vanilla
dictionary types [[#2525][]]
* Reworked capability negotiation [[#2341][]]
* See [Managing Capability Negotiation][cap-mgmt-8] documentation chapter
* This replaces the `irc.utils.CapReq` interface, which is now deprecated
Expand All @@ -256,9 +305,18 @@ API changes
intercept actions that don't work prior to connecting [[#2394][]]
* Prohibited actions raise `RuntimeError` instead of falling through to a more
esoteric error type or—worse—silently failing
* Added `realname` field to `User` objects [[#2383][]]
* Added `realname` & `is_bot` fields to `User` objects [[#2383][], [#2448][]]
* Use of `plugin.require_privilege()` or `plugin.require_bot_privilege()`
decorators now implies `require_chanmsg()` [[#2405][], [#2580][]]
* Fixed an inconsistency between behavior and documentation for
`tools.calculation.pow_complexity()` [[#2543][]]
* Soft-deprecated `SopelWrapper` type [[#2521]]
* Long-term, we will phase out this subclass in favor of using `contextvars`;
see [#2460][] for the full timeline
* Moved `sopel.plugins` to `sopel.builtins` [[#2504][]]
* **We don't technically consider these to be part of the API**, but if this
isn't mentioned we just *know* someone will complain that the move broke
some custom plugin code
* Removed previously-deprecated API features [[#2128][], [#2129][], [#2141][],
[#2144][], [#2146][], [#2147][], [#2148][], [#2150][], [#2329][]]

Expand All @@ -267,29 +325,41 @@ Housekeeping changes

* Many, many improvements to documentation [[#1990][], [#2169][], [#2178][],
[#2182][], [#2226][], [#2238][], [#2239][], [#2257][], [#2275][], [#2276][],
[#2323][], [#2379][], [#2386][], [#2409][], [#2424][]]
* Switched from Travis CI to GitHub Actions and revamped testing infrastructure
[[#2075][], [#2078][], [#2123][], [#2188][], [#2335][], [#2342][], [#2381][]]
[#2323][], [#2379][], [#2386][], [#2409][], [#2424][], [#2426][], [#2442][],
[#2489][], [#2494][], [#2495][], [#2496][], [#2533][], [#2539][], [#2543][],
[#2550][], [#2558][], [#2574][]]
* Switched from Travis CI to GitHub Actions and incrementally improved tests
[[#2075][], [#2078][], [#2123][], [#2188][], [#2262][], [#2335][], [#2342][],
[#2381][], [#2452][], [#2453][], [#2458][], [#2505][], [#2519][], [#2543][]]
* Improved tooling for contributors, e.g. `Makefile` targets [[#2502][]]
* Modernized packaging [[#2328][]]
* Cleanup on aisle `contrib/` [[#2085][]]
* Cleanup of deprecated feature usage in core & built-in plugins [[#2117][]]
* Cleanup on aisle `contrib/` [[#2085][], [#2520][]]
* Cleanup of deprecated feature usage in core & built-in plugins [[#2117][],
[#2464][], [#2468][], [#2470][]]
* Import reorganization [[#2179][]]
* Miscellaneous code smell/style issues fixed [[#2186][], [#2220][], [#2231][],
[#2382][], [#2393][]]
* Miscellaneous logging improvements [[#2309][], [#2354][]]
* Miscellaneous test suite improvements [[#2262][]]
* Various code smell/style issues fixed [[#2186][], [#2220][], [#2231][],
[#2382][], [#2393][], [#2514][]]
* Various logging improvements [[#2309][], [#2354][], [#2473][], [#2569][]]
* Deprecation warnings for the corresponding stable release now begin to emit
logs in prerelease versions [[#2522][]]
* Removed legacy CLI run mode [[#2118][]]
* Removed obsolete, nonfunctional CLI argument `--quiet` [[#2404][]]
* Removed old `sopel.test_tools` [[#2139][], [#2177][]]
* Raw logs improved both output and decode failure handling [[#2095][]]
* Started our journey into the wonderful world of type checking [[#2185][]]
* Started our journey into the wonderful world of type checking [[#2185][],
[#2462][], [#2471][], [#2480][], [#2491][], [#2535][], [#2555][]]
* Many *many* PRs added or updated type hints in the course of adding/fixing
something else, so we won't *also* list all of them here

[bot-mode-spec]: https://ircv3.net/specs/extensions/bot-mode
[cap-mgmt-8]: https://sopel.chat/docs/plugin/advanced#managing-capability-negotiation
[pronoun-base]: https://github.com/lucasew/svelte-pronounisland
[pronoun-ours]: https://github.com/sopel-irc/pronoun-service
[rate-decorator]: https://sopel.chat/docs/plugin/decorators#sopel.plugin.rate
[sopel-bugzilla]: https://pypi.org/project/sopel-bugzilla/
[sopel-help]: https://pypi.org/project/sopel-help/
[sopel-iplookup]: https://pypi.org/project/sopel-iplookup/
[sopel-meetbot]: https://pypi.org/project/sopel-meetbot/
[sopel-py]: https://pypi.org/project/sopel-py/
[sopel-reddit]: https://pypi.org/project/sopel-reddit/
[sopel-remind]: https://pypi.org/project/sopel-remind/
Expand Down Expand Up @@ -470,14 +540,80 @@ Housekeeping changes
[#2419]: https://github.com/sopel-irc/sopel/pull/2419
[#2420]: https://github.com/sopel-irc/sopel/pull/2420
[#2424]: https://github.com/sopel-irc/sopel/pull/2424
[#2426]: https://github.com/sopel-irc/sopel/pull/2426
[#2428]: https://github.com/sopel-irc/sopel/pull/2428
[#2429]: https://github.com/sopel-irc/sopel/pull/2429
[#2430]: https://github.com/sopel-irc/sopel/pull/2430
[#2431]: https://github.com/sopel-irc/sopel/pull/2431
[#2433]: https://github.com/sopel-irc/sopel/pull/2433
[#2434]: https://github.com/sopel-irc/sopel/pull/2434
[#2437]: https://github.com/sopel-irc/sopel/pull/2437
[#2438]: https://github.com/sopel-irc/sopel/pull/2438
[#2439]: https://github.com/sopel-irc/sopel/pull/2439
[#2441]: https://github.com/sopel-irc/sopel/pull/2441
[#2442]: https://github.com/sopel-irc/sopel/pull/2442
[#2444]: https://github.com/sopel-irc/sopel/pull/2444
[#2446]: https://github.com/sopel-irc/sopel/pull/2446
[#2447]: https://github.com/sopel-irc/sopel/pull/2447
[#2448]: https://github.com/sopel-irc/sopel/pull/2448
[#2450]: https://github.com/sopel-irc/sopel/pull/2450
[#2452]: https://github.com/sopel-irc/sopel/pull/2452
[#2453]: https://github.com/sopel-irc/sopel/pull/2453
[#2455]: https://github.com/sopel-irc/sopel/pull/2455
[#2458]: https://github.com/sopel-irc/sopel/pull/2458
[#2460]: https://github.com/sopel-irc/sopel/issues/2460
[#2462]: https://github.com/sopel-irc/sopel/pull/2462
[#2464]: https://github.com/sopel-irc/sopel/pull/2464
[#2468]: https://github.com/sopel-irc/sopel/pull/2468
[#2470]: https://github.com/sopel-irc/sopel/pull/2470
[#2471]: https://github.com/sopel-irc/sopel/pull/2471
[#2472]: https://github.com/sopel-irc/sopel/pull/2472
[#2473]: https://github.com/sopel-irc/sopel/pull/2473
[#2477]: https://github.com/sopel-irc/sopel/pull/2477
[#2478]: https://github.com/sopel-irc/sopel/pull/2478
[#2480]: https://github.com/sopel-irc/sopel/pull/2480
[#2481]: https://github.com/sopel-irc/sopel/pull/2481
[#2489]: https://github.com/sopel-irc/sopel/pull/2489
[#2491]: https://github.com/sopel-irc/sopel/pull/2491
[#2494]: https://github.com/sopel-irc/sopel/pull/2494
[#2495]: https://github.com/sopel-irc/sopel/pull/2495
[#2496]: https://github.com/sopel-irc/sopel/pull/2496
[#2500]: https://github.com/sopel-irc/sopel/pull/2500
[#2502]: https://github.com/sopel-irc/sopel/pull/2502
[#2504]: https://github.com/sopel-irc/sopel/pull/2504
[#2505]: https://github.com/sopel-irc/sopel/pull/2505
[#2507]: https://github.com/sopel-irc/sopel/pull/2507
[#2510]: https://github.com/sopel-irc/sopel/pull/2510
[#2512]: https://github.com/sopel-irc/sopel/pull/2512
[#2513]: https://github.com/sopel-irc/sopel/pull/2513
[#2514]: https://github.com/sopel-irc/sopel/pull/2514
[#2516]: https://github.com/sopel-irc/sopel/pull/2516
[#2519]: https://github.com/sopel-irc/sopel/pull/2519
[#2520]: https://github.com/sopel-irc/sopel/pull/2520
[#2521]: https://github.com/sopel-irc/sopel/pull/2521
[#2522]: https://github.com/sopel-irc/sopel/pull/2522
[#2523]: https://github.com/sopel-irc/sopel/pull/2523
[#2525]: https://github.com/sopel-irc/sopel/pull/2525
[#2530]: https://github.com/sopel-irc/sopel/pull/2530
[#2531]: https://github.com/sopel-irc/sopel/pull/2531
[#2532]: https://github.com/sopel-irc/sopel/pull/2532
[#2533]: https://github.com/sopel-irc/sopel/pull/2533
[#2535]: https://github.com/sopel-irc/sopel/pull/2535
[#2539]: https://github.com/sopel-irc/sopel/pull/2539
[#2540]: https://github.com/sopel-irc/sopel/pull/2540
[#2543]: https://github.com/sopel-irc/sopel/pull/2543
[#2545]: https://github.com/sopel-irc/sopel/pull/2545
[#2550]: https://github.com/sopel-irc/sopel/pull/2550
[#2552]: https://github.com/sopel-irc/sopel/pull/2552
[#2555]: https://github.com/sopel-irc/sopel/pull/2555
[#2558]: https://github.com/sopel-irc/sopel/pull/2558
[#2561]: https://github.com/sopel-irc/sopel/pull/2561
[#2569]: https://github.com/sopel-irc/sopel/pull/2569
[#2574]: https://github.com/sopel-irc/sopel/pull/2574
[#2575]: https://github.com/sopel-irc/sopel/pull/2575
[#2580]: https://github.com/sopel-irc/sopel/pull/2580
[#2581]: https://github.com/sopel-irc/sopel/pull/2581
[#2584]: https://github.com/sopel-irc/sopel/pull/2584


Changes between 7.1.8 and 7.1.9
Expand Down

0 comments on commit f185cc9

Please sign in to comment.