Skip to content

Releases: PyLink/PyLink

PyLink 3.1-beta1

30 Dec 21:19
Choose a tag to compare
PyLink 3.1-beta1 Pre-release

Feature changes

  • PyLink now requires Python >= 3.7
  • protocols/inspircd now defaults to InspIRCd 3.x mode (target_version=insp3)
  • Default to system IPv4/IPv6 preference when resolving hostnames. For existing users, this means that PyLink will most likely default to IPv6 when resolving hostnames if your server supports it!
    • You can override this by setting ipv6: false in your server config block or using an explicit bindhost. Connections made to IPs directly are not affected.
  • [SECURITY] exec and raw plugins are now locked behind config options, to disable running arbitrary code by admins
  • Implement path configuration for PyLink data files (#659)

Bug fixes

  • Various fixes detected by pylint, thanks to @Celelibi for reporting
  • ircs2s_common: fix parsing clash if the sender's nick matches an IRC command (e.g. on UnrealIRCd)
  • ircs2s_common: gracefully handle QUIT messages without a reason (seen on Anope / InspIRCd)
  • Properly handle EAGAIN in non-blocking sockets
  • relay: fix "channel not found" errors on LINK when the remote casemapping differs. This mainly affects channels with "|" and other RFC1459 special cases in their name
  • unreal: bounce attempts to CHGIDENT/HOST/NAME services clients
  • unreal: fix formatting of outgoing /kill (#671)
  • opercmds: remove double "Killed by" prefixes in the kill command

Internal improvements

  • Added best-effort tracking of user SSL/TLS status (#169)
  • Add support for oper notices (GLOBOPS/OPERWALL) (#511)
  • relay: better ident sanitizing for IRCd-Hybrid
  • Refactored UID generators to be more concise

PyLink 3.0.0

16 Aug 06:27
Choose a tag to compare

Changes since 3.0-rc1:

  • Added new install instructions via Docker
  • global: fix type-safety errors when connected to pylink-discord
  • Various code cleanup

For a broader summary of changes since 2.0.x, consult the below release notes for PyLink 3.0-rc1.

PyLink 3.0-rc1

23 Feb 08:03
Choose a tag to compare

PyLink 3.0 brings PyLink up to date with the latest IRCds (InspIRCd 3, UnrealIRCd 5), and introduces Discord integration via the pylink-discord contrib module. It also improves support for Unicode nicks in Relay and Clientbot.

Major changes since PyLink 2.0.x

  • Added support for InspIRCd 3 and UnrealIRCd 5.x:
    • To enable InspIRCd 3 link mode (highly recommended) on InspIRCd 3 networks, set the target_version: insp3 option in the relevant network's server block.
    • For UnrealIRCd 5 support, no changes in PyLink are necessary.
  • Updated list of required dependencies: added cachetools, removed ircmatch and expiringdict
  • Relay: added an optional dependency on unidecode, to translate Unicode nicks to ASCII on networks not supporting it.
    • Also, nick normalization is now skipped on protocols where it is not necessary (Clientbot, Discord)
  • Relay now tracks kill/mode/topic clashes and will stop relaying when it detects such a conflict (issue#23)
  • Changehost now supports network-specific configuration (issue#611) and listening for services account changes - this allows for consistent account based hostmasks for SASL gateways, etc.
  • Clientbot: added an option to continuously rejoin channels the bot is not in. issue#647
  • Antispam: added optional quit/part message filtering (issue#617)

API changes

  • API Break: Channel, Server, and User keys may now be type int - previously, they were always strings.
  • API Break: PyLink now supports having multiple UIDs mapping to the same nick, as this is common on platforms like Discord.
    • nick_to_uid() has been reworked to optionally return multiple nicks when multi=True
    • Using nick_to_uid() without this option will raise a warning if duplicate nicks are present, and may be deprecated in the future.
  • Added utils.match_text(), a general (regex-based) glob matcher to replace ircmatch calls (issue#636).
  • Editing hook payloads is now officially supported in plugin hook handlers (issue#452)
  • Added new protocol module capabilities:
    • can-manage-bot-channels
    • freeform-nicks
    • has-irc-modes
    • virtual-server
  • SQUIT hooks now track a list of affected servers (SIDs) in the affected_servers field

This branch was previously known as PyLink 2.1. For more detailed changes between 3.0-rc1 and individual 2.1 snapshots, see their separate changelogs.

Changes since PyLink 2.1-beta1

Feature changes

  • Added a Dockerfile for PyLink, thanks to @jameswritescode. Official images will be available on Docker Hub before the final 3.0 release.
  • unreal: declare support for usermodes +G (censor) and +Z (secureonlymsg)
  • The version command now prints the Python interpreter version to assist with debugging

Bug fixes

  • Fix desync when removing multiple ban modes in one MODE command (regression from 2.1-beta1)
  • p10: properly ignore ACCOUNT subcommands other than R, M, and U
  • Fix extraneous lowercasing of the network name in the $account exttarget, causing per-network matches to fail if the network name had capital letters
  • inspircd: negotiate casemapping setting on link for InspIRCd 3. issue#654
  • ircs2s_common: fix crash when failing to extract KILL reason

Documentation changes

  • relay-quickstart: describe delinking another network from channels owned by the caller's network
  • Refreshed mode list documentation

Internal improvements

  • Debug logs for mode parsers and other miscellaneous internals are now less noisy
  • inspircd: warn when using InspIRCd 2 compat mode on an InspIRCd 3 uplink - some commands like KICK are not translated correctly in this mode
  • classes: fix SyntaxWarning: "is" with a literal on Python 3.8

PyLink 2.1-beta1

08 Dec 20:19
Choose a tag to compare
PyLink 2.1-beta1 Pre-release

Feature changes

  • Declare support for UnrealIRCd 5.0.0-rc2+. Since the S2S protocol has not changed significantly, no protocol changes are needed for this to work.
  • clientbot: added an option to continuously rejoin channels the bot is not in. issue#647
  • changehost: added support for network-specific options. issue#611
  • changehost: listen for services account changes - this allows for consistent account based hostmasks for SASL gateways, etc.
  • relay_clientbot: rpm now deals with duplicate nicks and nicks including spaces (e.g. on Discord)
  • Relay now merges together network specific clientbot_styles options with global settings, instead of ignoring the latter if the network specific options are set. issue#642
  • ts6: add support for hiding PyLink servers ((H) in server description)
  • commands: various improvements to the showuser command

Bug fixes

  • More fixes for InspIRCd 3 support:
    • Fix crash on receiving SVSTOPIC on InspIRCd 3
    • Fix incorrect handling of PING to PyLink subservers - this caused harmless but confusing "high latency" warnings
  • inspircd: revert change disallowing _ in hosts; this has been enabled by default for quite some time
  • Fixed various edge cases in mode handling (+b-b ban cycles, casefolding mode arguments, etc.)
  • automode: add better handling for protocols where setting IRC modes isn't possible
  • automode: disable on networks where IRC modes aren't supported. issue#638

Internal improvements

  • Added test cases for shared protocol code (mode parsers, state checks, etc.)
  • Added more IRC parsing tests based off ircdocs/parser-tests
  • Add get_service_options method to merge together global & local network options. issue#642
  • Enhancements to UnrealIRCd protocol module:
    • unreal: read supported user modes on link when available (UnrealIRCd 4.2.3 and later)
    • unreal: stop sending NETINFO on link; this suppresses protocol version/network name mismatch warnings
    • unreal: declare support for msgbypass and timedban extbans
  • Added new protocol capabilities: has-irc-modes, can-manage-bot-channels
  • relay: handle acting extbans for ban exceptions +e, which is supported by InspIRCd and UnrealIRCd

PyLink 2.0.3

11 Oct 17:24
Choose a tag to compare

Changes since 2.0.2:

Feature changes

  • Switch to more secure password hashing defaults, using pbkdf2-sha256 as the default hash method
  • Introduce a login::cryptcontext_settings option to further tweak passlib settings if desired

Bug fixes

  • SECURITY: Only allow the defined login:user to take all permissions when legacy accounts are enabled
  • clientbot: fix /names handling on networks with colours in hostnames
  • clientbot: fix crash when MODES is defined in ISUPPORT but given no value (affects connections to Oragono)
  • changehost: only send a host change if new host != original
  • relay: fix inconsistent handling of the hideoper setting. issue#629
  • unreal: work around a potential race when sending kills on join

PyLink 2.1-alpha2

15 Jul 05:13
Choose a tag to compare
PyLink 2.1-alpha2 Pre-release

PyLink now requires Python 3.5 or later!

This release includes all changes from PyLink 2.0.3, plus the following:

Feature changes

  • Added cachetools as a core runtime dependency (relay and servprotect)
  • Added beta support for InspIRCd 3 (issue#644):
    • The target IRCd version can be configured via a target_version server option, which supports insp20 (InspIRCd 2.0, default) and insp3.
  • Removed dependencies on ircmatch (issue#636) and expiringdict (issue#445)
  • Increased Passlib requirement to 1.7.0+ to remove deprecated calls
    • pylink-mkpasswd: use hash() instead of encrypt()
  • Relay updates:
    • Relay now tracks kill/mode/topic clashes and will stop relaying when it detects such a conflict (issue#23)
    • Skip nick normalization on protocols where they aren't actually required (Clientbot, Discord)
  • Support @servicenick as a fantasy trigger prefix (useful on Discord)
  • commands: add a shownet command to show server info (issue#578)
  • antispam: added optional quit/part message filtering (issue#617)

Bug fixes

  • SECURITY: only whitelist permissions for the defined login:user if a legacy account is enabled
  • clientbot: fix crash when MODES is defined in ISUPPORT without a value (affects connections to Oragono)
  • relay: fix KILL message formatting (regression from issue#520)
  • relay: consistency fixes when handling hideoper mode changes (issue#629)
  • exttargets: coerse services_account to string before matching (issue#639)

Internal improvements

  • API Break: Reworked PyLinkNetworkCore.nick_to_uid() specification to support duplicate nicks and user filtering
    • Reworked most plugins (commands, bots, opercmds) to deal with duplicate nicks more robustly
  • Revised handling of KILL and QUIT hooks: the userdata argument is now always defined
    • If we receive both a KILL and a QUIT for any client, only the one received first will be sent as a hook.
  • Added new protocol module capabilities: freeform-nicks, virtual-server
  • Added utils.match_text(), a general glob matching function to replace ircmatch calls (issue#636)
  • Editing hook payloads is now officially supported in plugin hook handlers (issue#452)
  • ClientbotWrapperProtocol: override _get_UID() to only return non-virtual clients, ensuring separate namespaces between internal and external clients.
  • ClientbotBaseProtocol: disallow part() from the main pseudoclient by default, as this may cause desyncs if not supported
  • Moved IRCv3 message tags parser from clientbot to ircs2s_common
  • Merged relay's showchan, showuser commands into the commands plugin, for better tracking of errors and duplicate nicks

PyLink 2.1-alpha1

13 May 07:33
Choose a tag to compare
PyLink 2.1-alpha1 Pre-release

Released 2019-05-02. This release focuses on internal improvements to better integrate with pylink-discord. It includes all fixes from 2.0.2, plus the following:

Feature changes

  • Various Relay improvements:
    • Relay now sanitizes UTF-8 nicks and idents where not supported, optionally using the unidecode module to decode Unicode names more cleanly to ASCII
      • This introduces a new option relay::use_unidecode which is enabled by default when the module is installed
    • The fallback character to replace invalid nick characters is now - instead of |
    • Add protocol-level support for hiding users in Relay - this is used by pylink-discord to optionally hide invisible/offline users
  • Decrease default log file size from 50 MiB to 20 MiB

Bug fixes

  • changehost: only send a host change if new host != original
    • This prevents duplicate host changes on InspIRCd, since it echoes back successful host changes
  • clientbot: fix /names parsing errors on networks supporting colors in hosts. issue#641
  • inspircd: disallow _ in hosts since CHGHOST does not treat it as valid
  • relay: allow trailing .'s in subserver names (e.g. relay. is now an accepted server suffix)
  • stats: hide login blocks in /stats O when not relevant to the caller's network
  • unreal: work around a potential race when sending kills on join

Internal improvements

  • log: use pylinkirc as logger name; this prevents other libraries' debug output from making it to the PyLink log by default
  • clientbot: properly bounce kicks on networks not implementing them
  • classes: remove channels, modes substitutions from User.get_fields()
  • various: type-safety fixes to support numeric channel, server, and user IDs (they were previously always strings)
  • SQUIT hooks now track a list of affected servers (SIDs) in the affected_servers field
  • relay: minor optimizations

PyLink 2.0.2

31 Mar 08:35
Choose a tag to compare

Changes since 2.0.1:

Feature changes

  • Antispam now supports filtering away Unicode lookalike characters when processing text
  • Allow disabling dynamic channels via a new "join_empty_channels" option
  • relay: add an explicit forcetag command, since IRC kills are now relayed between networks

Bug fixes

  • launcher: fix crash when --no-pid is set
  • relay: fix DB corruption when editing modedelta modes
  • automode: fix sending joins to the wrong network when editing remote channels

Internal improvements

  • relay: minor optimizations and cleanup
  • Disable throttling on S2S links by default, since it usually isn't necessary there

PyLink 2.0.1

27 Dec 03:26
Choose a tag to compare

Changes since 2.0.0:

Feature changes

  • Slashes (/) in hosts is now supported on UnrealIRCd.
  • Added an ignore_ts_errors server option to suppress bogus TS warnings.

Bug fixes

  • clientbot: fix desync when the bot is told to kick itself (issue#377)
  • launcher: fix PID files not being read if psutil isn't installed
  • relay_clientbot no longer relays list modes set during a server burst (issue#627)
  • Fixed stray "bogus TS 0" warnings on some UnrealIRCd mode commands

Internal improvements

  • unreal: bump protocol version to 4200 (UnrealIRCd 4.2.0)
  • unreal: use SJOIN in join() to work around non-deterministic TS when forwarding to other servers

PyLink 2.0.0

12 Aug 23:23
Choose a tag to compare

Changes since 2.0-rc1:

  • Fixed various bugs affecting Relay and Clientbot:
    • handlers: don't delete the PyLink service UID if it leaves all cahnnels
    • Relay sometimes sent an empty channel to kick() when relaying kills to kick
    • Fix "Relay plugin unloaded" parts on Clientbot links causing a flood of "Clientbot was force parted" kicks
  • Work around TypeError in distutils.util.rfc822_escape() when installing on Python 3.4

For a broader summary of changes since 1.3.x, consult the release notes for PyLink 2.0-rc1.