94 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	PyLink 2.0-alpha3 (unreleased)
New features
- Experimental daemonization support via
pylink -d! issue#187
- Clientbot now supports expansions such as $nickin autoperform
- Relay endburst delay (on InspIRCd networks) is now configurable via
the servers:NETNAME:relay_endburst_delayoption.
- Relay now translates STATUSMSG messages (e.g. @#channelmessages) for target networks instead of passing them on as-is. issue#570
Feature changes
- Reverted the commit making SIGHUP shutdown the PyLink daemon. Now, SIGUSR1 and SIGHUP both trigger a rehash, while SIGTERM triggers a shutdown.
- The rawcommand has been split into a new plugin (plugins/raw.py) with two permissions:raw.rawfor Clientbot networks, andraw.raw.unsupported_networkfor other protocols. Using raw commands outside Clientbot is not supported. issue#565
- The servermaps plugin now uses two perms for mapandlocalmap:servermaps.mapandservermaps.localmaprespectively
- The servermaps plugin now shows the uplink server name for Clientbot links
- Added --trace / -toptions to the launcher for integration with Python’stracemodule.
Bug fixes
- protocols/clientbot: fix errors when connecting to networks with mixed-case server names (e.g. AfterNET)
- relay: fix KeyError when a local client is kicked from a claimed channel. issue#572
- Fix irc.parse_modes()incorrectly mangling modes changes like+b-b *!*@test.host *!*@test.hostinto+b *!*@test.host. issue#573
- automode: fix handling of channels with multiple #’s in them
- launcher: prevent protocol module loading errors (e.g. non-existent
protocol module) from blocking the setup of other networks.
- This fixes a side-effect which can cause relay to stop functioning
(world.startedis never set)
 
- This fixes a side-effect which can cause relay to stop functioning
(
- relay_clientbot: fix STATUSMSG(@#channel) notices from being relayed to channels that it shouldn’t
- Fixed various 2.0-alpha2 regressions:
- Relay now relays service client messages as PRIVMSG and P10 WALL* commands as NOTICE
- protocols/inspircd: fix supported modules list being corrupted when an indirectly linked server shuts down. issue#567
 
- commands: fix showchandisplaying status prefixes in reverse
- stats: route permission error replies to notice instead of PRIVMSG
- This prevents “Unknown command” flood loops with services which poll
/statson link.
 
- This prevents “Unknown command” flood loops with services which poll
Internal improvements
- Reading from sockets now uses select instead of one thread
per network.
- This new code uses the Python selectors module, which automatically
chooses the fastest polling backend available (epoll|kqueue|devpoll > poll > select).
 
- This new code uses the Python selectors module, which automatically
chooses the fastest polling backend available (
- Optimized irc.nick_to_uidby havingPyLinkNetworkCore.usersandclasses.Usertransparently maintain an index mapping nicks to UIDs- This introduces a new UserMappingclass, which stores User objects by UID and provides abynickdict storing case-normalized nicks to lists of UIDs.
- classes.User.nickis now a property, where the setter implicitly updates the- bynickindex with a pre-computed case-normalized version of the nick (- User.lower_nick)
 
- This introduces a new 
- Various relay optimizations.
- Rewritten CTCP plugin, now extending to all service bots. issue#468, issue#407
- Relay no longer spams configured ULines with “message dropped because you aren’t in a common channel” errors
- The endburst_delayoption tospawn_server()was removed from the protocol spec, and replaced by a private API used by protocols/inspircd and relay.
- New API: hook functions can now block further execution from other handlers by returning False. issue#547
- automode: replace assert checks with proper exceptions
- Renamed methods in log, utils, conf to snake case. issue#523
- Remove structures.DeprecatedAttributesObject; it’s vastly inefficient for what it accomplishes
PyLink 2.0-alpha2 (2018-01-16)
This release includes all changes from 1.2.2-dev, plus the following:
New features
- relay_clientbot: add support for showing prefix modes in relay text,
via a new $mode_prefixexpansion. issue#540
- Added new modedelta feature to Relay:
- Modedelta allows specifying a list of (named) modes to only apply on leaf channels, which can be helpful to fight spam if leaf networks don’t have adequate spam protection.
 
- relay: added new option
server::<networkname>:relay_forcetag_nicks, a per-network list of nick globs to always tag when introducing users onto a network. issue#564
- Added support for more channel modes in Relay:
- blockcaps: inspircd +B, elemental-ircd +G
- exemptchanops: inspircd +X
- filter: inspircd +g, unreal extban ~T:block (issue#557)
- hidequits: nefarious +Q, snircd +u
- history: inspircd +H
- largebanlist: ts6 +L
- noamsg: snircd/nefarious +T
- blockhighlight: inspircd +V (extras module)
- kicknorejoin: elemental-ircd +J (issue#559)
- kicknorejoin_insp: inspircd +J (with argument; issue#559)
- repeat: elemental-ircd +E (issue#559)
- repeat_insp: inspircd +K (with argument; issue#559)
 
- Added support for UnrealIRCd extban ~Tin Relay. issue#557
- p10: added proper support for STATUSMSG notices (i.e. messages to
@#channeland the like) via WALLCHOPS/WALLHOPS/WALLVOICES
- p10: added outgoing /knock support by sending it as a notice
- ts6: added incoming /knock handling
- relay: added support for relaying /knock
Backwards incompatible changes
- The ratbox protocol module has been merged into
ts6, with a new ircd: ratboxoption introduced to declare Ratbox as the target IRCd. issue#543
Bug fixes
- Fix default permissions not applying on startup (2.0-alpha1 regression). issue#542
- Fix rejoin-on-kill for the main PyLink bot not working (2.0-alpha1/94e05a6 regression).
- Clientbot fixes:
- Fix desyncs caused by incomplete nick collision checking when a user on a Clientbot link changes their nick to match an existing virtual client. issue#535
- Fix desync involving ghost users when a person leaves a channel, changes their nick, and rejoins. issue#536
- Treat 0 as “no account” when parsing WHOX responses; this fixes incorrect “X is logged in as 0” output on WHOIS.
 
- protocols/p10: fix the use_hashed_cloaksserver option not being effective.
- Fix long standing issues where relay would sometimes burst users
multiple times on connect. issue#529
- Also fix a regression from 2.0-alpha1 where users would not be joined if the hub link is down (issue#548)
 
- Fix $a:accountextbans being dropped by relay (they were being confused with$a). issue#560
- Fix corrupt arguments when mixing the remoteandmodecommands. issue#538
- Fix lingering queue threads when networks disconnect. issue#558
- The relay and global plugins now better handle empty / poorly formed config blocks.
- bots: don’t allow spawnclienton protocol modules with virtual clients (e.g. clientbot)
- bots: fix KeyError when trying to join previously nonexistent channels
Internal improvements
- Channel.sort_prefixes()now consistently sorts modes from highest to lowest (i.e. from owner to voice). Also removed workaround code added to deal with the wonkiness of this function.
- ircs2s_common: add handling for nick@servernamemessages.
- IRCNetworkshould no longer send multiple disconnect hooks for one disconnection.
- protocols/ts6 no longer requires SAVEsupport from the uplink. issue#545
- ts6, hybrid: miscellaneous cleanup
- protocols/inspircd now tracks module (un)loads for
m_chghost.soand friends. issue#555
- Clientbot now logs failed attempts in joining channels. issue#533
PyLink 2.0-alpha1 (2017-10-07)
The “Eclectic” release. This release includes all changes from 1.2.1, plus the following:
New features
- Login blocks can now be limited by network, user hostname, and IRCop status: see the new “require_oper”, “hosts”, and “networks” options in the example config.
- Added support for ngIRCd, ChatIRCd, and beware-ircd
(via protocol modules ngircd,ts6,p10respectively)
- Add support for extbans in protocols and relay:
this is supported on UnrealIRCd, Charybdis (and derivatives), InspIRCd,
and Nefarious P10.
- Yes, this means you can finally mute bothersome relay users.
 
- Clientbot is now more featureful:
- Added support for IRCv3 caps account-notify,account-tag,away-notify,chghost,extended-join, anduserhost-in-names
- Configurable alternate / fallback nicks are now supported: look for
the pylink_altnicksoption in the example config.
- Added support for WHOX, to complement IRCv3
account-notifyandaccount-tag.
- Relay_clientbot can now relay mode changes as text.
- Clientbot can now optionally sync ban lists when it joins a channel,
allowing Relay modesync to unset bans properly. See the
fetch_ban_listsoption in the example config.
 
- Added support for IRCv3 caps 
- PyLink received a new launcher, which now checks for stale PID files
(when psutilis installed) and supports shutdown/restart/rehash via the command line.
- New commands for the opercmds plugin, including:
- chghost,- chgident, and- chgname, for IRCds that don’t expose them as commands.
- massban,- masskill,- massbanre, and- masskillre- these commands allow setting kickbans, kills, or glines on users matching a PyLink mask (- n!u@hmask/exttarget) or regular expression. The hope is that these tools can help opers actively fight botnets as they are connected, similar to atheme’s- clearchanand Anope’s- chankillcommands.
- checkbanre- a companion to- checkban, using regex matching
 
- Better support for (pre-defined) U-lined services servers in relay:
- CLAIMrestrictions are relaxed for service bots, which may now join with ops and set simple modes. This prevents mode floods when features such as- DEFCONare enabled, and when a channel is accidentally registered on a network not on the CLAIM list.
- DEFCONmodes set by services are ignored by Relay instead of bounced, and do not forward onto other networks unless the setting network is also in the channel’s- CLAIMlist.
- To keep the spirit of CLAIMalive, opped services not in a channel’sCLAIMlist are still not allowed to kick remote users, set prefix modes (e.g. op) on others, or set list modes such as bans.
 
- Service bots’ hostnames and real names are now fully configurable, globally and per network.
- Added per-network configuration of relay server suffixes.
- Added IRC /STATSsupport via thestatsplugin (/stats c,u, andoare supported so far)
- PyLink’s connection time is now displayed when WHOISing service
bots. This info can be turned off using the
pylink:whois_show_startup_timeoption.
- More specific permissions for the remotecommand, which now allows assigning permissions by target network, service bot, and command.
- New $serviceexttarget which matches service bots by name.
Backwards incompatible changes
- Signal handling on Unix was updated to use SIGUSR1for rehash andSIGHUPfor shutdown - this changes PyLink to be more in line with foreground programs, which generally close with the owning terminal.
- Some options were deprecated and renamed:
- The p10_ircdoption for P10 servers is now namedircd, though the old option will still be read from.
- The use_elemental_modessetting on ts6 networks has been deprecated and replaced with anircdoption targeting charybdis, elemental-ircd, or chatircd. Supported values forircdincludecharybdis,elemental, andchatircd.
 
- The 
- PID file checking is now enabled by default, along with checks for
stale PID files only when psutilis installed. Users upgrading from PyLink < 1.1-dev withoutpsutilinstalled will need remove PyLink’s PID files before starting the service.
- The fmlcommand in thegamesplugin was removed.
Bug fixes
- Relay should stop bursting channels multiple times on startup now.
(initialize_channelnow skips execution if another thread is currently initializing the same channel)
- Fixed a long standing bug where fantasy responses would relay before
a user’s original command if the fantasyplugin was loaded beforerelay. (Bug #123)
Internal changes
- API Break: The protocol module layer is completely
rewritten, with the IrcandProtocol-derived classes combining into one. Porting will be needed for old protocol modules and plugins targetting 1.x; see the new (WIP) protocol specification for details.
- API Break: Channels are now stored in two linked
dictionaries per IRC object: once in irc._channels, and again inirc.channels. The main difference is thatirc._channelsimplicitly creates new channels when accessing them if they didn’t previously exist (prefer this for protocol modules), whileirc.channelsdoes not raises and raises KeyError instead (prefer this for plugins).
- API Break: Most methods in utilsandclasseswere renamed from camel case to snake case.log,conf, and others will be ported too before the final 2.0 release.
- API Break: IRC protocol modules’ server
introductions must now use post_connect()instead ofconnect()to prevent name collisions with the base connection handling code.
- Channels are now stored case insensitively internally, so protocol modules and new plugins no longer need to manually coerse names to lowercase.
- Plugins can now bind hooks as specific priorities via an optional
priorityoption inutils.add_hook. Hooks with higher priorities will be called first; the default priority value us 500.
- Commands can now be properly marked as aliases, so that duplicates
don’t show in the listcommand.
- Added basic GLINE/KLINEsupport for most IRCds; work is ongoing to polish this off.
- PyLink accounts are now implicitly matched: i.e. user1is now equivalent to$pylinkacc:user1
- Added complete support for “Network Administrator” and “Network Service” as oper types on IRCds using user modes to denote them (e.g. UnrealIRCd, charybdis).
- User and server hop counts are now tracked properly instead of being hardcoded as 1.
- protocols/p10 now bursts IPv6 IPs to supported uplinks.
- Fixed compatibility with ircd-hybrid trunk after commit 981c61e (EX and IE are no longer sent in the capability list)
PyLink 1.2.1 (2017-09-19)
The “Dancer” release. Changes from 1.2.0:
Bug fixes
- unreal: fix TypeError when relaying prefix modes via
mode()
- Fix wrong database and PID filenames if the config file name includes a period (“.”)
- automode: don’t send empty mode lines if no users match the ACL
- networks: check in “remote” that the remote network is actually connected
- Fix commonly reported crashes on logging:config syntax errors (49136d5)
- Backported fixes from 2.0-dev:
- p10: fix wrong hook name for user introduction
- clientbot: warn when an outgoing message is blocked (e.g. due to bans) (#497)
- ts6: fix setting real host of users to ‘None’ if it wasn’t given
 
Misc changes
- Removed incorrect descriptions regarding P10
extended_accounts. Both X3 and atheme support extended accounts, and this needs to match your IRCd settings regardless.
- Updated definitions in channel/user-modes.csv.
Internal improvements
- Backported improvements from 2.0-dev:
- Fix support for Hybrid 8.x trunk
- Minor logging cleanup for relay and
Irc.matchHost().
- Fix cmode +pmapping on TS6 networks.
 
PyLink 1.2.0 (2017-08-14)
The “Dragons” release. Changes since 1.2.0-rc1:
Feature changes
- Make relay nick tagging configurable per-network; backported from 2.0-dev (#494)
Bug fixes
- Fix extraneous removal of PID files even when
-n/--no-check-pidwas set or if the PID file already existed on launch (PyLink would quit and delete the old PID file in these cases)
- servprotect: bump default threshold up to 10 hits/10 seconds, as the old limit was too prone to false positives
- Fix extraneous queue threads not being stopped when a network
disconnects (0d5afd2)
- Fix relay errors on disconnect due to race conditions in network
handling (a0a295f)
Misc changes
- Updated example config and FAQ.
For a summary of major changes since 1.1.x, see the changelog for 1.2.0-rc1.
PyLink 1.2.0-rc1
The “Droplet” release. Changes since 1.2-beta1:
Bug fixes
- relay: fix channel claim disabling
(i.e. “CLAIM #channel -” was broken since 1.2-alpha1)
- IRCS2SProtocol: fix UnboundLocalErrorin “message coming from wrong way” error
- ts6: fix parsing of the INVITEcommand’stsargument
- automode: fix formatting and examples in setacchelp text
- p10: fix rejoin-on-kick relaying by also acknowledging kicks sent from PyLink to its clients with a PART
Major changes since 1.1.x
- Added support for snircd, ircu, and other (generic) P10 variants.
The target IRCd can be chosen using the new server-specific
p10_ircdoption; see the example config for details (#330).
- The nefariousprotocol module was renamed top10, as it is no longer Nefarious-specific. You should update your configuration to use the new name!
- Certain configuration options were renamed /
deprecated:
- The bot:configuration block was renamed topylink:, with the old name now deprecated.
- logging:stdoutis now- logging:console(the previous name was a misnomer since text actually went to- stderr).
- The bot:prefixoption is deprecated: you should instead define theprefixessetting in a separate config block for each service you wish to customize (e.g. setautomode:prefixandgames:prefix)
 
- The 
- Using new-style accounts exclusively (i.e. specifying things
under login:accounts) now requires apermissions:block for PyLink to start (#413).
- New stats(uptime info) andglobal(global announcement) plugins.
- Plugins and protocol modules can now be loaded from any directory,
using the new plugin_dirsandprotocol_dirsoptions. (#350)- The pylink-contribdlutility was dropped as it is now it obsolete.
 
- The 
- Relay message formatting became more flexible, and messages from
servers (e.g. spurious invite announcements) can now be dropped: look
for the relay_weird_sendersandaccept_weird_sendersoptions.
- Relay now forbids linking to channels where the home network is
down, which previously caused errors due to unreliable target TS (#419).
This, along with the regular TS check, can be overridden with a new
link --forceoption.
- The remotecommand now routes replies back to the caller network, and supports service bots that aren’t the main PyLink bot via a--serviceoption.
- Service bot spawning can now be disabled via the global
spawn_servicesand per-servicespawn_serviceoptions; doing so will merge the relevant commands into the main PyLink bot.
- Added a pylink::show_unknown_commandsoption to optionally disable “unknown command” errors. This option can also be overridden per-server and per-service (#441).
- Added a pylink::prefer_private_repliesoption to default to private command replies (#409).
- Relay can now announce to leaf channels when the home network
disconnects; see the relay::disconnect_announcementoption (#421).
For a full list of changes since 1.1.x, consult the changelogs for the 1.2.x beta and alpha releases below.
PyLink 1.2-beta1
The “Dynamo” release. This release includes all fixes from 1.1.2, plus the following:
Feature changes
- Added configurable encoding support via the encodingoption in server config blocks (#467).
- Certain configuration options were renamed /
deprecated:
- The bot:configuration block was renamed topylink:, with the old name now deprecated.
- logging:stdoutis now- logging:console(the previous name was a misnomer since text actually went to- stderr).
- The bot:prefixoption is deprecated: you should instead define theprefixessetting in a separate config block for each service you wish to customize (e.g. setautomode:prefixandgames:prefix)
 
- The 
- Added new $andand$networkexttargets - see the new exttargets documentation page for how to use them.
- Hostmasks can now be negated in ban matching:
e.g. !*!*@localhostnow works. Previously, this negation was limited to exttargets only.
- relay_clientbotno longer colours network names by default. It is still possible to restore the old behaviour by defining custom clientbot styles.
- relay_clientbotno longer uses dark blue as a random colour choice, as it is difficult to read on clients with dark backgrounds.
Bug fixes
- Fix service respawn on KILL not working at all - this was likely broken for a while but never noticed…
- Fix kick-on-rejoin not working on P10 IRCds when
joinmodesis set. (a.k.a. acknowledge incoming KICKs with a PART per the P10 specification)
- servprotect: only track kills and saves to PyLink clients, not all kills on a network!
- Fix ~#channelprefix messages not working over relay on RFC1459-casemapping networks (#464).
- Show errors when trying to use showchanon a secret channel in the same way as actually non-existent channels. Previously this error response forced replies as a private notice, potentially leaking the existence of secret/private channels.
- example-conf: fix reversed description for the password encryption setting.
Internal changes
- Portions of the IRC/relay stack were refactored to prevent various hangs on shutdown.
- Performance improvements for outgoing message queuing: the queue system now blocks when no messages are in the queue instead of polling it multiple times a minute.
- Logging fixes: startup warnings (e.g. from config deprecations) now log to files as well as the console.
PyLink 1.2-alpha1
The “Darkness” release. This release includes all fixes from 1.1.2, plus the following summary of changes:
Feature changes
- Added support for snircd, ircu, and other (generic) P10
variants. The target IRCd can be chosen using the new
server-specific p10_ircdoption; see the example config for details (#330).
- The nefariousprotocol module was renamed top10- you should update your configuration to use the new name!
- Plugins and protocol modules can now be loaded from any directory,
making pylink-contrib 20% more useful! Look for the
plugin_dirsandprotocol_dirsoptions in the example config. (#350)- The pylink-contribdlutility was dropped as this makes it obsolete.
 
- The 
- Relay now forbids linking to channels where the home network is
down, which previously caused errors due to unreliable target TS (#419).
This, along with the regular TS check, can be overridden with a new
link --forceoption.
- SASL timeout for clientbot is now configurable, with the default raised to 15 seconds
- New-style accounts (i.e. anything under
login:accounts) now require apermissions:block for PyLink to start (#413).
- New stats(uptime info) andglobal(global announcement) plugins
- Improvements to the remotecommand of thenetworksplugin:- Plugin replies are now routed back to the sender’s network.
- Added an optional --serviceoption to call commands for service bots other than the main PyLink service.
 
- servprotectKILL/SAVE limits and expiry time are now configurable (#417)
- Added the pylink::show_unknown_commandsoption to optionally disable “unknown command” errors. This option can also be overridden per-server and per-service (#441).
- Added the pylink::prefer_private_repliesoption to default to private command replies (#409)
- Relay message formatting became more flexible, and messages from
user-less senders can now be dropped (fa30d3cc03f2d7)
- Added global and per-service spawn_service(s)options to optionally disable service bot spawning
- The botsplugin now allows specifying channel prefixes (e.g.@+) injoin
- exec: Added iexec,ieval,peval,pieval:i* commands run code in an isolated, persistent local scope, whilep* commands evaluate expressions while pretty-printing the output
- Relay: implement optional network disconnect announcements (see the
relay::disconnect_announcementoption; #421)
Bug fixes
- Service bots no longer throw errors when attempting to call empty commands via fantasy.
- Protocol modules now send PONG immediately instead of queuing it, which should prevent ping timeouts at times of very high activity.
Internal improvements
- Protocols now verify that incoming messages originate from the right direction (#405)
- Irc.matchHostnow supports matching CIDR ranges (#411)
- Added an utils.IRCParserclass based offargparse, for flexible argument parsing (#6).
- Rewrote outgoing message queues to use queue.Queue(#430), and support a limit to the amount of queued lines (#442)- Also, added a clearqueuecommand to force clear the queue on a network.
 
- Also, added a 
- PyLink protocol capabilities were introduced, reducing the amount of protocol name hardcoding in plugins (#337)
- Service bots no longer create stubs on Clientbot networks, and instead route replies through the main bot (#403)
- The default throttle time was halved from 0.01s to 0.005s.
- ServiceBot is now more flexible in help formatting, fixing indented lines and consecutive newlines not showing on IRC.
- Configuration validation no longer uses skippable asserts (#414)
- inspircd: better support for OPERTYPE on InspIRCd 3.x
- Clientbot now tracks channel modes and channel TS on join.
- Clientbot now generates PUIDs/PSIDs with the nick or server name as prefix, and checks to make sure incoming senders don’t clash with one.
- commands: showchannow shows TS on connections without thehas-tsprotocol capability as well, even though this value may be unreliable
Misc changes
- The bot:config block is renamed topylink:. Existing configurations will still work, as thebotandpylinkblocks are always merged together (#343).
- Added better documentation for generic options available to all
service bots (nick,ident,prefixfor fantasy, etc.)
- Irc.botdata,- Irc.conf,- Irc.checkAuthenticated()have been deprecated: use- conf.conf['pylink'],- conf.conf, and the permissions API respectively instead!
PyLink 1.1.2
The “Calamari” release.
Bug fixes
- Multiple fixes for the unrealprotocol module when using UnrealIRCd 3.2 links:- fccec3aFix crashes on processing SJOIN when a user behind a 3.2 server has a nick starting with a symbol
- 8465eddFix kicks to Unreal 3.2 users (PUIDs) not updating the internal state - this would’ve caused odd prefix mode desyncs if a user was kicked and rejoined.
- df4acbfFix prefix modes not being set on Unreal 3.2 users (affects Automode, etc.)
 
- Backported SASL fixes from 1.2-dev:
- b14ea4fSend CAP LS before NICK/USER so that we consistently get a SASL response before connect - this fixes SASL on networks like freenode, where connections can often complete before a SASL response from services is ever received.
- 84448e9- 22ceb3fThe above commit rewrites SASL to depend on a timely response from the server, so a configurable timeout for SASL/CAP is also introduced. (#424)
 
Feature changes
- 22ceb3fAdded the- sasl_timeoutoption for Clientbot networks (this defaults to 15 seconds if not set).
Internal improvements
- Backported stability improvements from 1.2-dev:
- d70ca9fRewrite connection error handling to include- RuntimeErrorand- SystemExit(#438)
 
PyLink 1.1.1
The “Crush” release. Changes from 1.1.0:
Bug fixes
- The pylink-mkpasswdprogram is actually installed now when usingpip(PyPI) orsetup.py.
- Backported protocol module fixes from 1.2-dev:
- unreal: fix crashes when receiving SJOINwith only a prefix and no UID
- inspircd: work around extraneous letters sent in FJOINtimestamps (Anope 1.8.x bug)
- nefarious: fix a typo causing crashes on user mode changes
 
- unreal: fix crashes when receiving 
- Relay: in claim, show a less ambiguous error when a relay channel doesn’t exist on the caller’s network.
- corecommands: removed extraneous
irc.checkAuthenticated()call
Feature changes
- pylink-mkpasswdnow supports interactive password input via getpass, which is more secure than passing passwords raw on the command line.
Misc changes
- More prominent migration notes regarding permissions and new accounts system.
PyLink 1.1.0
The “Calico” release. This is mostly a cleanup and documentation update from 1.1-beta2, with the following additional change: - Made passlib an optional dependency (password hashing will be disabled if passlib isn’t installed), simplifying the upgrade process.
For a full list of changes since 1.0.x, see the release notes for the 1.1 alpha & beta series. Summary of major changes since 1.0.x:
- 🔐 Redone authentication
configuration, now supporting multiple
accounts, hashed passwords, and fine-tuned permissions.
- Old configurations using login:userandlogin:passwordwill still work, but are now deprecated. Consider migrating to the newlogin:block in the example config.
- This also adds a new optional dependency of passlib (https://passlib.readthedocs.io/en/stable/), which is required for the password hashing portion.
 
- Old configurations using 
- Protocol modules now wrap long messages (SJOIN and MODE) to prevent
cutoff shenanigans from happening.
- This fixes a particularly nasty bug that can corrupt the TS on UnrealIRCd channels if a MODE command sets more than 12 modes at once (#393).
 
- Added utilities to download contrib modules
(pylink-contribdl) and hash passwords for the new accounts configuration (pylink-mkpasswd).
- Most plugins were ported to the permissions API.
- Clientbot now supports mode syncing, SASL (with optional reauth), and IRCv3 multi-prefix.
- Services bots now support setting modes on themselves on join: see “joinmodes” in the example conf
- Changehost gained a few new features, including optional (per network) vHost enforcement.
- Added a bindhostoption in server blocks, for multi-homed hosts.
- PID file checking was implemented - Run PyLink with the
--check-pidargument in order to turn it on.
- The ts6protocol module now supportsKICKwithout arguments and legacyUIDintroduction (for older servers / services).
- Relay: added a purgecommand to remove all relays involving a network.
- Added support for ircd-ratbox (ratboxprotocol module).
- Changing the console log level via REHASH now works.
- New servermapsplugin, displaying network/map’s from the PyLink server’s perspective.
PyLink 1.1-beta2
The “Conscience” release. Changes from 1.1-beta1:
Bug fixes
- Protocol modules now wrap longer messages (SJOIN and MODE) to
prevent cutoff shenanigans from happening.
- This fixes a particularly nasty bug that can corrupt the TS on UnrealIRCd channels if a MODE command sets more than 12 modes at once (#393).
 
- Pong handling is a lot less strict now (it just makes sure the sender is the uplink). In other words, fix issues on UnrealIRCd where PONGs get ignored if the argument doesn’t match the server name exactly (e.g. different case).
- Clientbot protocol fixes:
- Fix SASL PLAIN auth on Python 3.4 (TypeError with bytes formatting
with %b).
- Don’t repeat KICK hooks if the source is internal: this prevents KICK events from being relayed twice to Clientbot links, when the kicked user is also a Clientbot user.
- Clientbot now explicitly sends /namesafter join, to guarantee a response.
- Fix message recognition treating nick prefixes without
ident@hostas servers (this polluted the state)
- Fix prefix mode changes for unknown/missing users in
/whocausing KeyError crashes
 
- Fix SASL PLAIN auth on Python 3.4 (TypeError with bytes formatting
with 
- ts6: fix setting mode -k *not working due to wrongly ordered logic (1.1-dev regression)
- ts6: fix handling of KICK without a reason argument
- Automode: remove some repeated “Error:” text in error messages
- IrcChannelno longer assumes- +nton new channels, as this is not necessarily correct
Feature changes
- Changing the console log level via REHASH is now supported.
- Added a bind host option for multi-homed hosts.
Internal improvements
- updateTS now ignores any broken TS values lower than 750000, instead of propagating them (e.g. over relay) and making the problem worse.
- The UnrealIRCd protocol module was updated to actually use extended SJOIN (SJ3). This should make bursts/startup more efficient, as modes, users, and bans are now sent together.
PyLink 1.1-beta1
The “Crunchy” release. This release includes all bug fixes from PyLink 1.0.4, along with the following:
Changes from 1.1-alpha1
Feature changes
- Most plugins were ported to use the permissions API, meaning
multiple accounts are actually useful now!
- Having a PyLink login with new style
accounts no longer implies access to everything on the
PyLink daemon. See the updated example conf regarding the new
permissions:block.
- Logins implying admin access is limited to old accounts ONLY (i.e. logins defined via login:user/password)
- The commandsplugin now has permissions checks forecho,showuser,showchan, andstatus. The latter three are granted to all users (*!*@*) by default, whileechois restricted.
 
- Having a PyLink login with new style
accounts no longer implies access to everything on the
PyLink daemon. See the updated example conf regarding the new
- Clientbot now supports IRCv3 SASL (with optional reauth!) and multi-prefix. See the example conf for details on the former (the latter is enabled automatically when available).
- PID file checking is now disabled by default for
better migration from 1.0.x. Run PyLink with --check-pidin order to turn it on.
- commands: add a new logoutcommand (#370)
- The listcommand now supports optionally filtering commands by plugin.
Bug fixes
- The permission to use servermaps is now servermaps.mapinstead ofservermap.map.
- networks: fix the remotecommand to work with permissions (i.e. override the correct account name)
- relay: add missing permissions check on the linkedcommand
Internal fixes / improvements
- relay: rewrite host normalization to whitelist instead of blacklist characters. This should improve compatibility with IRCds as previously untested characters are introduced.
- relay_clientbot: faster colour hashing using built-in
hash()instead of md5
- opercmds: removed the source argument from kickandkill; it’s confusing and isn’t very useful
Misc. changes
- Documentation updates: add a permissions reference, document advanced relay config, etc.
PyLink 1.0.4
Tagged as 1.0.4 by GLolol
The “Bonfire” release.
Bug fixes
- protocols: implement basic nick collision detection in UID handlers. This fixes users potentially going missing on UnrealIRCd networks, if the remote IRCd introduces a user of the same nick after PyLink does. Thanks to kevin for reporting!
- relay: strip underscores (_) from hosts on ts6 and ratbox, fixing possible invalid user@host errors
- Backported fixes from 1.1.x / devel:
- Demote “unknown user” warnings in mode handling to DEBUG, suppressing warnings when old services like Anope 1.8 set modes on users as they quit.
- Fix irc.matchHost()confusing therealhostboolean to be the same asip.
- changehost: add missing permissions check to
applyhosts; it now requires thechangehost.applyhostpermission.
 
Misc changes
- networks: update help for disconnectto reflect how it now always disables autoconnect.
PyLink 1.1-alpha1
The “Candescent” release.
Changes from 1.0.3
Feature changes
- Clientbot now supports optional mode syncing 🎉 See the example conf for how to configure it (look for “modesync”).
- PID file checking has been implemented and is turned on by default.
⚠️ When upgrading from 1.0.x, remove
pylink.pidbefore starting!
- Revamped login configuration system, which now supports
multiple accounts and hashed passwords
- ⚠️ login:userandlogin:passwordare now deprecated and may be removed in a future release. Consider migrating to the newlogin:block in the example config.
- Hashing new passwords can be done using the mkpasswdcommand via IRC, or the new command line utilitypylink-mkpasswd.
 
- ⚠️ 
- Services bots now support setting modes on themselves on join: see “joinmodes” in the example conf
- Added a contrib module downloader
(pylink-contribdl)
- Relay now uses the PyLink permission system. The following
permissions are now available:
- Granted to opers by default:
- relay.create
- relay.destroy
- relay.claim
- relay.link
- relay.delink
- relay.linkacl.view
- relay.linkacl
 
- Granted to all users by default:
- relay.linked
 
- And the following which is not explicitly granted:
- relay.savedb
 
 
- Granted to opers by default:
- Relay: added a purgecommand to remove all relays involving a network
- Automode now supports remote channel manipulation in the form
netname#channel(#352)
- protocols/ts6 now supports legacy UID introduction, for older servers / services
- Changehost gained a few new features (look for “changehost:” in the
example conf):
- Optional (per network) vHost enforcement: now you can create spoofs like freenode without using their IRCd!
- Enforcement exceptions for the feature above
- Options to enable/disable matching users by IP and real host
 
- New protocol support for ircd-ratbox, based offts6
- New servermaps plugin, displaying network /map’s from the PyLink server’s perspective. Relay links can be expanded as well to make this more detailed!
- Oper status tracking is now a network-specific option, for better security. Look for “track_oper_statuses” in the example config.
- The PyLink launcher now sets the terminal title on launch (Windows & POSIX)
- relay: implement a complementary showchancommand, showing a list of relay links
Bug fixes
- Relay is potentially less crashy when PyLink is split off while it tries to introduce users (#354).
- The botsplugin now allows JOIN/NICK/PART on all service bots
- Relay: skip channel TS check for Clientbot (some users had this as a sporadic issue)
- Irc: explicitly kill connect loop threads after an Irc object has been removed. This fixes various freezing issues caused by ghosted connections after a network splits (#351).
- Relay: don’t error when removing a channel from a network that isn’t
connected. (AttributeError on removeChannel()ifirc.pseudoclientisn’t set)
Internal fixes / improvements
- Server ID and service client name (if applicable) are now stored
inside IrcUserobjects, removing the need for some expensive reverse lookups
- Relay and Automode now use a centralized DataStore (backwards
compatible) in structuresfor their database implementation
- Docstring rewrapping is now supported for neater, wrappable docstrings! (#307)
- Irc.error()was added for easier error replies; it is a simple wrapper around- Irc.reply()
- Relay now uses locks in DB read/writes, for thread safety
- Most camel case functions in Relay were renamed to lowercase with underscores (PEP 8)
Misc. changes
- exec: Drop rawtext logging to DEBUG to prevent information leakage (e.g. passwords on Clientbot)
- Removed update.sh(my convenience script for locally building + running PyLink)
PyLink 1.0.3
Tagged as 1.0.3 by GLolol on 2016-11-20T04:51:11Z
The “Buoyant” release.
Changes from 1.0.2
Bug fixes
- Fixed invalid database names such as “automode-/tmp/test.db” from being generated when PyLink is started with an absolute path to its config.
- Backported fixes from 1.1-dev:
- relay: skip channel TS checks for Clientbot, preventing possible “channel too old” errors on link.
 
Feature changes
- Backported features from 1.1-dev:
- Relay: allow configuring custom relay server suffixes
 
Misc. changes
- Various spelling/grammar fixes in the example config.
PyLink 1.0.2
Tagged as 1.0.2 by GLolol on 2016-10-15T05:52:37Z
The “Baluga” release.
Changes from 1.0.1
Bug fixes
- Clientbot: Fixed nick collisions between virtual clients and real users (#327)
- Fix typo in example conf that caused log::filerotationto become an empty,None-valued block. This in turn caused thelogmodule to crash.
Feature changes
- Clientbot now uses a more specific realname fallback (“PyLink Relay Mirror Client”) instead of potentially misleading text such as “PyLink Service Client”. In the future, this text may be made configurable.
Internal fixes / improvements
- setup.py: reworded warnings if git describe --tagsfails / fallback version is used. Also, the internal VCS version for non-Git builds is now-nogitinstead of-dirty.
PyLink 1.0.1
Tagged as 1.0.1 by GLolol on 2016-10-06T02:13:42Z
The “Beam” release.
Changes from 1.0.0
Bug fixes
- Fix PyLink being uninstallable via PyPI due to missing VERSION and README.md
- ts6: don’t crash when CHGHOST target is a nick instead of UID
- relay: clobber colour codes in hosts
- bots: allow JOIN/NICK/QUIT on ServiceBot clients
PyLink 1.0.0
Tagged as 1.0.0 by GLolol on 2016-09-17T05:25:51Z
The “Benevolence” release.
Changes from 1.0-beta1
Bug fixes
- Clientbot now relays text sent from service bots.
- Fixed KeyErrors in Clientbot when receiving WHO replies for clients we don’t know – these are now ignored.
- Relay now skips mode type definitions when doing reverse mode
lookup. This fixes channel mode +lmever being relayed UnrealIRCd, because+lhappened to be the only supported type C mode.
- protocols/nefarious: fix UnboundLocalError when no modes are given on user introduction
- fantasy: don’t error when bots are removed while processing a message (e.g. on shutdown)
Feature changes
- Automode now limits listaccto opers instead of all users (with default permissions settings).
Internal fixes / improvements
- Fixed incomplete hook payload keys from 1.0-beta1
(oldchan/chandata->channeldata)
- services_support: hack away nick clashes between service clients & real users from Clientbot networks
- clientbot: downgrade bad updateClient() calls to warning
Misc. changes
- Documentation updates: Automode+permissions guide, README refresh, others.
- Example configuration changes:
- Automode’s bot nick now defaults to “Automode” instead of “ModeBot” for consistency.
- Added a debug log example because nobody knew how to turn it on
- Fix inverted option description for Relay’s
show_netsplitsoption.
 
PyLink 1.0-beta1
Tagged as 1.0-beta1 by GLolol on 2016-09-03T07:49:12Z
The “Badgers” release. Note: This is an beta build and may not be completely stable!
Changes from 0.10-alpha1
Bug fixes
- Fixes for the Clientbot protocol module:
- Fix nick()referring to the wrong variables (and thus not working at all)
- Fix crashes caused by forced nick changes on connect
- Clientbot now only sends CHGHOST/CHGIDENT/CHGNAMEhooks the field has actually changed
 
- Fix 
- Automode now joins the Modebot client on setacc, if not already present
Feature changes
- Irc: implement basic message queueing (1 message sent per X seconds,
where X defaults to 0.01 for servers) .
- This appears to also workaround sporadic SSL errors causing disconnects (https://github.com/GLolol/PyLink/issues/246)
 
- relay: CLAIM is now more resistant to things like
/OJOINabuseSeriously people, show some respect for your linked networks ;).
- core: New permissions system, used exclusively by Automode at this
time. See example-permissions.ymlin the Git tree for configuration options.
- relay_clientbot now optionally supports PMs with users linked via
Clientbot. This can be enabled via the
relay::allow_clientbot_pmsoption, and provides the following behaviour:- Private messages and notices TO Clientbot users are forwarded from the Relay bot as NOTICE.
- Private messages can be sent FROM Clientbot users using the
rpmcommand inrelay_clientbot
 
- The PyLink launcher now shows the full VCS version in
pylink -v
- Revert “relay_clientbot: always lowercase network name (stylistic choice)”
Internal fixes / improvements
- protocols/unreal: use umode +xtinstead of blind/SETHOSTwhen spawning users
- protocols/clientbot: handle numerics 463 (ERR_NOPERMFORHOST), 464 (ERR_PASSWDMISMATCH), and 465 (ERR_YOUREBANNEDCREEP) as fatal errors
- protocols: various fields in hook payloads are renamed for
consistency:
- The chandatafield in SQUIT payloads is renamed tochanneldata
- The oldchanfield in MODE payloads is renamed tochanneldata
 
- The 
- Irc.msg()should no longer send empty text strings (which are technically illegal) in things like help strings.
- Irc: make sending of loopback hooks in msg()optional
- relay_clientbot: switch to irc.msg()for relayed text
Misc. changes
- Various to documentation update and installation instruction improvements.
PyLink 0.10-alpha1
Tagged as 0.10-alpha1 by GLolol on 2016-08-22T00:04:34Z
The “Balloons” release. Note: This is an alpha build and may not be completely stable! This version includes all fixes from PyLink 0.9.2, with the following additions:
Changes from 0.9.2
Bug fixes
- Improved syncing between Automode and Relay on JOINs. In other words: fixed Automode sometimes setting modes on join before all of a target’s relay clones have joined corresponding relay channels on remote networks.
- protocols/inspircd now tracks required modules for vHost updating (CHGHOST/IDENT/NAME), instead of potentially sending unknown commands to the IRCd and causing a netsplit.
- changehost now explicitly forbids $hostfrom being used in expansion fields, preventing vHosts from potentially being set in a loop wheneverapplyhostsis called.
- evalnow formats empty strings correctly, instead of having no visible reply. In other words, it now wraps all output with- repr().
- relay: fix reversed prefix mode order in bursts
(e.g. +@~UIDinstead of~@+UID). Fortunately, this is minor detail; no noticeable adverse effects to IRCd linking was ever experienced.
Feature changes
- WIP Clientbot protocol module: allows PyLink to
connect as a bot to servers, for purposes such as relay.
- Some features such as flood protection, services account tracking, and IRCv3 support are still missing.
- For Clientbot relay support, remember to also load the
relay_clientbotplugin!
 
- Added the ability to rotate logs at certain sizes, keeping X backups for reference.
- REHASH now updates file logging settings.
- Relay now allows configuring a list of nick globs to always tag
nicks (forcetag_nicks:block inrelay:)
- networks: new reloadprotocommand, allowing in-place reloading of protocol modules without restart.
- Ctrl-C / KeyboardInterrupt now cleanly shuts down PyLink (in most cases).
- SSL cert file and key file are now optional.
- changehost: show more friendly errors when an expansion field is unavailable
- protocols/inspircd: add support for SAKICK, ALLTIME.
- protocols/ unreal: add support for TSCTL ALLTIME.
- Added support for /timerequests.
Internal fixes / improvements
- Shutdown now cleanly quits the PyLink service bot instead of simply splitting off.
- PyLink now shows a better error if a protocol module chosen is missing.
- Config key validation is now protocol-specific.
- The IrcUser.identifiedattribute was renamed toIrcUser.account.
- exec: make pylinkircandimportlibaccessible for easier debugging.
- SQUIT hooks get a few more arguments, such as nicks(affected nicks) andserverdata(old IrcServer object).
- Retrieving the hostname used by the current PyLink instance is now a
shared function: irc.hostname()
- Better handling of empty lines in command help - these are now sent
as a single space instead of passing invalid text like
:<UID> NOTICE <UID> :to the IRCd (no text in the text parameter).
- protocols/ts6: handle incoming ETB (extended topic burst) and EOPMOD
(partial support; op moderated +z messages are converted to forms like
@#channel).
- protocols/unreal: explicitly declare support for ESVID, or account name arguments in service stamps. Realistically this doesn’t seem to affect S2S traffic, but it is the correct thing to do.
Misc. changes
- FakeIRCand- FakeProtoare removed (unused and not updated for 0.10 internal APIs)
PyLink 0.9.2
Tagged as 0.9.2 by GLolol on 2016-08-21T23:59:23Z
The “Acorn” release.
Changes from 0.9.1
Bug fixes
- Relay now treats {}as valid characters in nicks.
- Fixed services login tracking for older Anope services + UnrealIRCd. Previously, PyLink would incorrectly store login timestamps as the account name, instead of the user’s nick.
- Relay now normalizes /to.in hostnames on IRCd-Hybrid.
- Cloaked hosts for UnrealIRCd 3.2 users are now applied instead of the real host being visible.
PyLink 0.9.1
Tagged as 0.9.1 by GLolol on 2016-08-07T03:05:01Z
Important, backwards incompatible changes for those upgrading from 0.8.x!
- The configuration file is now pylink.yml by default, instead of config.yml.
- PyLink now requires installing itself as a module, instead of simply
running from source. Do this via
python3 setup.py install --user.
- The use_experimental_whoisoption for InspIRCd servers and thespawn_serversoption in Relay have been removed, as they are now implied.
Changes from 0.9.0
Bug fixes
- Fixed various bugs in channel TS handling (this should reduce mode desyncs with relay).
- protocols/unreal: fixed services account support for older services (e.g. Anope < 2.0) that don’t explicitly use account names for logins (#296).
- Mode changes are no longer sorted alphabetically when relayed: sorting now only applies for displaying a list of modes, such as in WHOIS.
- Invalid autojoin channels are now ignored, instead of passing potentially invalid data to the IRCd.
Feature changes
- setup.pynow explicitly forbids installing on Python 2 (#297).
- The nefariousprotocol module now forwards MODE and KICK through servers if the sender isn’t opped, preventing many mode bounces, kick failures, and HACK server notices.
Internal fixes / improvements
- protocols/hybrid,ts6,unreal: Casemapping-specific lowercasing is now consistently used for channel names
- Relay now catches errors on network removal and ignores them.
- Channels names are now case normalized when receiving
@#channelmessages.
Misc. changes
- Minor example configuration updates, including a mention of
passwordless UnrealIRCd links by setting recvpass and sendpass to
*.
PyLink 0.9.0
Tagged as 0.9.0 by GLolol on 2016-07-25T05:49:55Z
Important, backwards incompatible changes for those upgrading from 0.8.x!
- The configuration file is now pylink.yml by default, instead of config.yml.
- PyLink now requires installing itself as a module, instead of simply
running from source. Do this via
python3 setup.py install --user.
- The use_experimental_whoisoption for InspIRCd servers and thespawn_serversoption in Relay have been removed, as they are now implied.
Changes from 0.9-beta1
Added / changed / removed features
- PyLink is now slightly more descriptive if you try to start it with missing dependencies or a missing conf file.
- The PyLink API reference is now at https://pylink.github.io/ instead
of in docs/technical.
- The execandevalcommands now have access to thepylinkircandimportlibimports by default.
- jupefrom the- opercmdsplugin now requires the admin login instead of just oper.
- opercmds: kicknow treat channels case insensitively.
- Documentation update: there are now guides to Automode and PyLink’s Services API.
Bug fixes
- Fixed the reloadcommand (again).
- Fixed compatibility with ircmatch 1.2: PyLink previously used features that were only available in the unreleased Git version.
- The identifycommand now responds with NOTICE instead of PM, behaving like any other command. Thanks to @Techman- for pointing this out.
- The identifycommand must be called in private again.
- Relay now shows secret channels in linkedto those inside the channel, regardless of whether they’re opered.
- $channel:#channel:prefixmodeexttarget matching no longer raises errors if the target isn’t in the specified channel.
Internal improvements
- Redone version handling so __init__.pyisn’t committed anymore.
- update.shnow passes arguments to the- pylinklauncher.
PyLink 0.9-beta1
Tagged as 0.9-beta1 by GLolol on 2016-07-14T02:11:07Z
Important, backwards incompatible changes for those upgrading from 0.8.x
- The configuration file is now pylink.yml by default, instead of config.yml.
- PyLink now requires installing itself as a module, instead of simply
running from source. Do this via
python3 setup.py install --user.
Changes from 0.9-alpha1
Added / changed / removed features
- The use_experimental_whoisoption for InspIRCd servers is removed, and is now implied.
- New config option bot: whois_show_extensions_to_bots, which optionally disables extended WHOIS replies for users marked as a bot (+B).- This increases security when relay is enabled, for bots that look for services logins in WHOIS.
 
- Automode has new clearaccandsyncacccommands, for clearing and syncing access lists respectively.
- Relay now allows nick tagging to be turned off by default, via the
option relay: tag_nicks(#116)- This is experimental, and nick tagging is still enabled by default.
- Any attempts to KILL or SVSNICK a relay client are treated to force
tag a nick, so things like /ns release,/ns ghost, and/ns regainshould work with network services.
 
- Automode now only sends one MODE command per sync, to prevent changes from flooding channels.
- Relay separators can now be configured globally
(relay: separatoroption), with server-specific overriding that value if given.
Bug fixes
- corecommands: fix unloadfailing to remove hooks and commands (0.9.x regression).
- protocols/nefarious: only send EOB_ACK to the direct uplink, preventing stray “acknowledged end of net.burst” messages from showing up. Thanks to Speakz on Evilnet IRC for reporting.
- protocols/unreal: fix server name of the uplink server not being saved (#268)
- Channel prefixes are now sorted in WHOIS output (i.e. no more wrong
@~#channel), and only the highest prefix shown
- Fixed issues in internal channel mode tracking (c1cd6f458d71b0)
- WHOIS requests to the PyLink server for clients that aren’t PyLink
bots now work (syntax: /raw whois pylink.server somenick). “No such nick” errors are also sent when the target is missing, instead of raising warnings.- These WHOIS responses were previously sent from the wrong source (the server that the client was on, instead of the PyLink server), causing them to be ignored if they were going the wrong way.
 
- Automode now treat channels case insensitively in
delacc.
- asciiand- rfc1459case mappings now treat Unicode case sensitively, in the same way an IRCd would.
Internal improvements
- Removed inaccurate references to signon time in WHOIS and elsewhere.
- Changes to user timestamps are now tracked on NICK and SAVE commands
- Relay now creates relay clones with the current time as nick TS,
instead of the origin user’s TS.
- This has the effect of purposely losing nick collisions against local users, so that it’s easier to reclaim nicks.
 
PyLink 0.9-alpha1
Tagged as 0.9-alpha1 by GLolol on 2016-07-09T07:27:47Z
Summary of changes from 0.8.x
Backwards incompatible changes
- Configuration file is now pylink.yml by default, instead of config.yml.
- PyLink now requires installing itself as a module, instead of simply
running from source. Do this via
python3 setup.py install --user.
Added / changed / removed features
- New ctcpplugin, handling CTCP VERSION and PING(and perhaps an easter egg?!)
- New automodeplugin, implementing basic channel ACL by assigning prefix modes like+oto hostmasks and exttargets.
- New exttarget support: see https://github.com/GLolol/PyLink/blob/0.9-alpha1/coremods/exttargets.py#L15 for a list of supported ones.
- Relay can now handle messages sent by users not in a target channel
(e.g. for channels marked -n)
- Relay subserver spawning is now always on - the
spawn_serversoption is removed
- Relay can now optionally show netsplits from remote networks, using
a show_netsplitsoption in therelay:block
- The channelsconfiguration option inserver:blocks is now optional, and defaults to no channels if not specified
- The maxnicklenconfiguration option is also now optional, with a default value of 30 characters.
- --version,- --no-pid, and- --helpare now implemented by PyLink’s command line script
- Test cases were dropped - they were broken and poorly maintained.
- CPUlimit wrapper scripts were removed.
- Service bots now allow plugins to define service descriptions and mark commands as featured when adding them.
- Command replies for services bots are now consolidated into core. In general, FANTASY commands now reply in channel as PRIVMSG, while all commands sent in PM reply as private notices.
- protocols/inspircd: new use_experimental_whoisserver option, which forces PyLink to handle WHOIS requests locally. This allows relay WHOIS extensions like account name and origin server name (whois_show_*options) to actually work on InspIRCd networks.
- PyLink can now optionally protect its services clients by setting
servprotect modes (InspIRCd umode +k,+Selsewhere). The option for this isprotect_servicesin thebot:block.
- The networksnow deletes IRC objects whendisconnectis used. To reconnect all disconnected networks, use therehashcommand.
- Relay now hides disconnected leaf networks from LINKED output.
Bug fixes
- Services bots will now ignore unhandled CTCP requests, instead of responding with “Unknown command”
- The sidfield for TS6 servers now accepts unquoted numeric SIDs (integers) by normalize the SID to a string
- protocols/nefarious: fix wrong variable in “/join 0” handling causing crashes
- The PyLink bot now rejoins relay channels when it is killed
- protocols/ts6: fix wrong args in TB handling
Internal improvements
- coreplugin.pyis split into- coremods/, with many different submodules for easier maintenance.
- Rewritten channel TS handling to be more concise and reusable
- protocols/unreal: warn about mode bounces instead of fighting with the uplink
- protocols/ts6, protocols/nefarious: use protocol-specific ban bursting instead of sending a regular MODE
- Irc.parseModes()now handles strings given as the mode list properly, instead of only accepting a list of modestring arguments
- SQUIThandlers now return an- uplinkfield with the SID of the server that the target was split from
- protocols/ts6: send 12 users (SJOIN) and 10 modes (TMODE) per line, instead of 10 and 9 respectively
- Relay is now slightly more careful when normalizing nicks: they can’t have invalid characters, start with a hyphen (-), etc.
- Modes are now sorted when joined. You’ll now see things like
+Hiowinstead of+wHoi
- protocols/inspircd: services clients with mode +k now have the “Network Service” oper type, in WHOIS replies and elsewhere
- SQUIT and KILL handling are moved into a protocols/ircs2s.py module, as the handling is basically the same on both TS6 and P10.
- protocols/nefarious,ts6,unreal: KILL handling (inbound & outbound) now supports kill paths and formats kill reasons properly
- protocols: encapsulated (ENCAP) commands are now implicitly
expanded, so protocol modules no longer need to bother with IF statement
chains in a handle_encap()
PyLink 0.8-alpha4
Tagged as 0.8-alpha4 by GLolol on 2016-06-30T18:56:42Z
Major changes in this snapshot release:
- SECURITY: Forbid SSLv2 and SSLv3 in SSL socket
creation (0fbf9e1)
- Configurable nicks for services (per-net and global, #220, #229)
- Resolve server hostnames when connecting (#158).
- protocols/ts6: fix incorrect WHOIS syntax causing connection abort
(6060a88)
- protocols/nefarious: fix bad /join 0handling causing connection abort (b1e138d)
- relay: forbid linking two channels on the same network
(e47738c)
- protocols: various fixes for mode definitions, including missing
+ihandling on ts6 and unreal (26df48c,3e19e9c)
- Consistent defaults to ping frequency and timeout (now 90 and 180 seconds respectively)
- Example conf: fix various typos (0edb516,cd4bf55) and be more clear about link blocks only being examples
- Various freezes and crash bugs fixed (dd08c01,1ad8b2e,504a9be,5f2da1c)
Full diff: https://github.com/GLolol/PyLink/compare/0.8-alpha3…0.8-alpha4
PyLink 0.8-alpha3
Tagged as 0.8-alpha3 by GLolol on 2016-06-01T02:58:49Z
- relay: support relaying a few more channel modes (flood, joinflood, freetarget, noforwards, and noinvite)
- Introduce a new (WIP) API to create simple service bots (#216).
- The main PyLink client now spawns itself with hideoper whenever
available, to avoid filling up /lusersand/stats P/p. (#194)
- The fantasyplugin now supports per-bot prefixes; see example conf for details.
- Purge c_ and u_ prefixes from PyLink’s internal named modes definitions (#217).
- Various documentation updates.
- New gamesplugin, currently implementing eightball, dice, and fml.
- Various fixes to the Nefarious protocol module (89ed92b46a4376abf69698b76955fec010a230b4…c82cc9d822ad46f441de3f2f820d5203b6e70516, #209, #210).
PyLink 0.8-alpha2
Tagged as 0.8-alpha2 by GLolol on 2016-05-08T04:40:17Z
- protocols/nefarious: fix incorrect decoding of IPv6 addresses
(0e0d96e)
- protocols/(hybrid|nefarious): add missing BURST/SJOIN->JOIN hook mappings, fixing problems with relay missing users after a netjoin
- protocols/unreal: fix JOIN handling storing channels with the wrong
case (b78b911323)
- protocols/inspircd: fix wrong username being sent when formatting KILL text
- commands: Fix loglevelcommand being ineffective (#208)
- relay: Fix various race conditions, especially when multiple networks happen to lose connection simultaneously
- API changes: many commands from utilswere split into eitherIrc()or a newstructuresmodule (#199)
PyLink 0.8-alpha1
Tagged as 0.8-alpha1 by GLolol on 2016-04-23T03:14:21Z
- New protocol support: IRCd-Hybrid 8.x and Nefarious IRCu
- Track user IPs of UnrealIRCd 3.2 users (#196)
- SIGHUP now rehashes PyLink on supported platforms (#179)
- Improved mode support for Charybdis (#203)
- Fix disconnect logic during ping timeouts
PyLink 0.7.2-dev
Tagged as 0.7.2-dev by GLolol on 2016-04-19T14:03:50Z
Bug fix release:
- Support mixed Unreal 3.2/4.0 networks (#193)
- More complete APIs for checking channel access (#168)
- New servprotectplugin for KILL/SAVE flood protection. This was split out of relay due to expiringdict not being installable via pip.
- Documentation update (protocol module variables, mention new WHOIS, VERSION hooks)
- Minor fixes for Windows support. (#183)
- SIGTERM should now shut down the daemon cleanly. (#179)
- 8ee64d5ec1readme: mention why expiringdict is broken in pip3
- 528dfdba2apmodule-spec: mention cmodes, umodes, prefixmodes variables
- cb3187c5e9ts6_common: do reverse nick lookup for KICK targets
- 55afa1bff6unreal: log instances of PUID manging to debug
- 75984c3c4cts6_common: add abstraction to convert UIDs->outgoing nicks
- 9f20f8f767unreal: update SJOIN matching regex
- 4157cb5671ts6_common: use a better variable name for _getSid()
- e687bb0a78unreal: remove outfilter hack, this doesn’t handle text including PUIDs properly
- 0136ff2c3aexample conf: mention using spaces to indent
- 86781d37baREADME: fix typo
- 9fde35fd77relay: handle server name conflicts more correctly
- c01b449741relay: treat network names case-sensitively
- 02ec50826bunreal: fix super() syntax in SQUIT handling
- 16779aa5ceclasses: remove lower() call when storing netname
- 6acfbb4125unreal: case-desensitize legacy server names when handling user introductions from them
- 62da384caeREADME: unreal 3.2 mixed networks are supported now, sorta
- 5d0f450c73Merge branches ‘master’ and ‘devel’ into devel+unreal32
- 956167538aunreal: add warnings & more descriptive errors regarding mixed_link
- f3ceefe87funreal: initialize legacy users on the right server
- efd13d20eeexample-conf: add sample unreal block, documenting mixed_link
- 44b102ffcenetworks: allow all opers to run ‘autoconnect’
- 13e97177e2docs: Add a PyLink oper guide
- c4273e68a4unreal: fix for Python 3.4 support
- 4f08894227unreal: typofix
- 10be962318unreal: actually return the hook data for NICK & KILL
- 44dc856ffaunreal: use an awful outFilter hack to convert PUIDs->nicks when sending outgoing commands
- 74ee1ded4dunreal: Start work on some really hacky Unreal 3.2 compat code (#193)
- 3e7255e4b2classes: remove ts6-specific hack in Protocol.removeClient
- 514072804cREADME: mention the implications of #193
- fd32bbf45funreal: fix typo in last commit
- efcc30c983unreal: don’t confuse legacy SERVER introductions from our uplink with protocol negotiation
- fab404f8d6Merge branches ‘master’ and ‘wip/relay-fixes’ into devel
- 3a8b0aa123relay: catch OSError too when loading DB
- 1bcadbe12bUse more flexible shebangs (/usr/bin/env python3)
- 9e33081bc9relay: fix typo in comment
- d21344342drelay: experimental fix for #183
- 8b7a9f6b45Merge pull request #189 from DanielOaks/devel+ignore-env
- d287a22aecgitignore: Ignore env folder for virtualenvs
- 58519011b8coreplugin: modularize shutdown routines, handle SIGTERM->shutdown
- b100f30cfefantasy: break if IRC object isn’t ready
- cf363432f0pylink: use abspath() to get the source directory
- 662d1ce03finspircd: warn that inspircd 2.2 support is experimental
- 4a0ee6f54crelay: be more thread-safe via dict.copy()
- 305db9f754utils: also don’t crash in applyModes for bad mode targets
- e70dfb0811Merge branch ‘master’ into devel
- 08c3b99dfbrelay: fix ambiguous logging in KICK blocking
- 4125ff33b1pylink: prettier “Loaded plugins” log message on start
- d5d3c2422binspircd: define minimum & target protocol versions instead of hardcoding them
- 70b9bde2c4unreal: fix a little typo
- ad517f80daunreal: bump protocol version to 4000
- 19ac5b59a5protocols: drop underscores from pre-defined opertypes
- c71d2bfcb9coreplugin: sync opertype changes in handle_operup
- 9278e56dd8coreplugin: normalize WHOIS output format
- 44083ccd5ecore: Store opertype info in all IrcUser objects
- bdbc1020f2Merge branch ‘master’ into devel
- fbd8659a7dclasses: spawn PyLink clients with a custom opertype
- a91fa46549Regenerate pydoc documentation
- c8a3514776hooks-reference: add VERSION and WHOIS
- f618b96b34inspircd: add VERSION handling
- 00552a41a7Move detailed version string generation to utils
- 23056e97e3protocols & coreplugin: add handlers for VERSION requests
- 45c2abdae7Irc: run initVars() on connect too
- aedb05608erelay: actually, just kill handle_spawnmain
- b2b04c8e75classes: really ignore errors when shutting down sockets
- ce3d3cf697relay: check to make sure network is ready before handling spawnmain
- 0bb54d88e0New servprotect plugin (anti-KILL/SAVE flood)
- 9fe3373906relay: get rid of kill/save protection
- 75ec95b8d3Merge branch ‘master’ into devel
- 03b53aee59Merge branch ‘staging’ into devel
- e183078645protocols: Remove “secret” testing channel name
- 6962f3b73ets6: unset has_eob correctly on reconnects
- c176c90bb6coreplugin: use IrcChannel.getPrefixModes in whois replies
- f5f0df52ceclasses: raise KeyError, not return KeyError…
- c86a02e044relay: use IrcChannel.getPrefixModes
- e948db5c7bclasses: support looking at older versions of prefix modes mappings
- d84cfbcda1utils: simplify prefix modes handling in applyModes
- e8b0018585classes: Implement IrcChannel.is(Voice|Halfop|Op)Plus (#168)
- ed333a6d1bclasses: implement IrcChannel.isOp, isVoice, getPrefixmodes, etc
- 8135f3a735core: Depluralize prefixmodes mappings (#168)
- 1d4350c4fdclasses: provide IrcChannel objects with their own name using KeyedDefaultdict
- 544d6e1041utils: add KeyedDefaultdict
PyLink 0.7.1-dev
Tagged as 0.7.1-dev by GLolol on 2016-03-31T01:42:41Z
Bugfix release. Lingering errata which you may still encounter: #183.
- 0fd093644cutils: don’t crash when mode target is invalid
- 1930739aadRevert “Irc: don’t call initVars() on IRC object initialization”
- 2b16f25b61classes.Irc: clear state on disconnect, not on connect
- a4395ed989log: respect child loggers’ levels if they are lower than the main one’s
- 46922ce879relay: remove dead networks’ servers from the servers index unconditionally
- f2a21148e7Irc: run initVars() on connect too
- 9cd1635f68unreal: fix wrong variable name in handle_umode2
- 2169a9be28utils: actually abort when mode target is invalid
PyLink 0.7.0-dev
Tagged as 0.7.0-dev by GLolol on 2016-03-21T19:09:12Z
Changes from 0.6.1-dev:
- d12e70d5e5ts6: unset has_eob correctly on reconnects
- 5b2c9c593bAdd .mailmap
- abce18a5balog: split multi-line channel logs into multiple PRIVMSGs
- a8303d0110commands: sort channel list in ‘showuser’ output
- 0dd8b80a21docs/t: use rawgit links to serve HTML
- 506ae011a4Update autogenerated docs (adding a script to do this now)
- d8e5202e5bworld: use a better module description
- 2adb67d38eruntests: remove .py extension, only run tests when ran as a script
- da7bd649d2conf: fix testconf missing the logging: section
- 557efc369fdocs/t: mark hooks-reference as finished in README
- 9d0fcb5395docs: finish off hooks-reference (#113)
- 15b35f1853ts6: support charybdis +T mode (closes #173)
- 359bfcd9dabots: map ‘msg’ command to ‘say’ too
- b6889fb097irc: fix spacing in certificate fingerprint logging
- 7f5bc52152relay: fix errors in KILL handling when target isn’t in any relay channels
- 3527960d18coreplugin: tell plugins to exit cleanly before closing connections
- 9b0db81068changehost: modularize, add a command to apply cloaks now, match IPs too
- 14388d932futils.getHostmask: add option to return IP address
- 5fed4629a6networks: remove networks with autoconnect off in ‘disconnect’
- 8ac5436152relay: allow admins to destroy channels hosted on other networks
- 4df027cac4coreplugin: ignore services’ attempts to send accountname before user introduction
- 1ce2725f1ebots: update help for ‘msg’ command (reflect changes made for #161)
- 54dc51aed4bots: make source client names optional (Closes #161)
- 34ca973047relay: cleanup, consistently include the function in log.debug calls
- a740163cberelay: implement DB exporting using threading.Timer, similar to classes.Irc.schedulePing
- d531201850Merge branch ‘master’ into devel
- ae8f369f2erelay: only show networks that are actually connected in LINKED
- de1a9a7995relay: various cleanup
- eec8e0dca4log: attempt to remedy #164 (more testing needed)
- 40d76c8bb6coreplugin: demote successful oper-up messages to debug
- df23b79780commands: reformat ‘showuser’ output, and show services login info (#25)
- decdf141fdunreal: don’t use updateClient to update hostname of clients internally
- 2ebdb4bad6unreal: support services account tracking (#25), fix handle_SVSMODE applying modes on the wrong target
- cabdb11f86inspircd: implement services account tracking (#25)
- 0fff91edfdts6: implement services account tracking (#25)
- cf15bed58dclasses: add services_account field in IrcUser (#25), default ‘identified’ attribute to empty string instead of None
- 584f952113conf: check to make sure logging block exists in config
- 5877031203Merge branch ‘master’ into devel
- 21167e8fb3example conf: use 1 “#” without trailing space for commented-out options
- 0d4655c381core: support multiple channel loggers with DIFFERENT log levels & fix example conf (#83)
- 669e889e6fSupport configurable SSL fingerprint hash types (Closes #157)
- 08fd50d3d8Logging improvements, including support for custom file targets (#83)
- de84a5b437log: default level should be INFO, not DEBUG
- cf1de08457commands: support rehashing channel loggers
- 2503bd3ee5commands: In rehash, use irc.disconnect() to disconnect networks removed from conf
- 14efb27fe8Initial experimental support for logging to channels (#83)
- 4b939ea641ts6: rewrite end-of-burst code (EOB is literally just a PING in ts6)
- 5a68dc1bc5Irc: don’t call initVars() on IRC object initialization
PyLink 0.6.1-dev
Tagged as 0.6.1-dev by GLolol on 2016-03-02T05:15:22Z
- Bug fix release.
PyLink 0.6.0-dev
Tagged as 0.6.0-dev by GLolol on 2016-01-23T18:24:10Z
Notable changes in this release:
- New “opercmds” plugin:
- This merges some functionality from the bots plugin, but also adds
new commands such as jupe,kill,topic, andcheckban.
 
- This merges some functionality from the bots plugin, but also adds
new commands such as 
- New “changehost” plugin - Automated configurable vHost setting on connect.
- Some core changes will break protocol modules and
plugins written for older PyLink versions:
- Some functions have been renamed:
- utils.nickToUid(irc, nick)->- irc.nickToUid(nick)
- utils.isInternalClient(irc, uid)->- irc.isInternalClient(uid)
- utils.isInternalServer(irc, uid)->- irc.isInternalServer(uid)
- utils.clientToServer(irc, uid)->- utils.getServer(uid)
- utils.getProtoModule(...)->- utils.getProtocolModule(...)
 
- Protocol specification is rewritten, with “Client” and “Server” dropped from the suffix of most outgoing commands: see acdd7dbb782765f581…2fd0a8ae741a663d.
 
- Some functions have been renamed:
- exec plugin: add injectandrawcommands (4e7396b).
- exec plugin: support newline (and other) escapes in
exec(375dbe8).
- protocols: allow changing remote users’ hosts in updateClient
(741fed9).
- Speed up and clean up shutdown sequence, fixing hangs due to sockets not shutting down cleanly (#152).
- protocols/unreal: Support cloaking with user mode +x(#136).
- Various bug fixes - see https://github.com/GLolol/PyLink/compare/0.5-dev…0.6.0-dev for a full diff.
PyLink 0.5-dev
Tagged as 0.5-dev by GLolol on 2015-12-06T17:54:02Z
The “We’re getting somewhere…” release.
Changes
- Bug fixes, all the bug fixes.
Core
- Support IPv6 connections in config.
- The offending hook data is now logged whenever a hook function errors, for more convenient debugging.
- Add sanity checks for autoconnect - delay has to be at least 1 second now, to prevent connect floods that go on without any delay in between!
- Add irc.reply()to send command replies to callers in the right context (channel or PM).
- More base commands are in coreplugininstead ofcommands.pynow, making the latter reloadable without restart.
- Don’t crash when REHASH loads a config file that’s invalid.
- utils: Replace imp (deprecated) with importlib.
Plugins
- commands: Add a command to set log level (#124).
- commands: Update irc.botdata(bot:data in config) in REHASH.
- fantasy: Support nick prefixes (e.g. PyLink: help), along with a configurable prefix.
Protocols
- protocols/TS6: Fix SQUIT handling and introduction of SID-less
servers (i.e. atheme’s /os JUPE) (#119)
- protocols/unreal: Add (experimental) support for UnrealIRCd 4.0.x!
- plugins: More complete INFO logging: plugin loading/unloading, unknown commands called, successful operups
Full diff:https://github.com/GLolol/PyLink/compare/0.4.6-dev…0.5-dev
PyLink 0.4.6-dev
Tagged as 0.4.6-dev by GLolol on 2015-10-01T23:44:20Z
Bugfix release:
- f20e677577relay: fix PMs across the relay (- 7d919e6regression)
- 55d9eb240fclasses.Irc: prettier repr
PyLink 0.4.5-dev
Tagged as 0.4.5-dev by GLolol on 2015-09-30T04:14:22Z
The “fancy stuff!” release.
New features including in-place config reloading (rehashing) (#89), FANTASY support (#111), and plugin (re/un)loading without a restart.
Full diff since 0.4.0-dev: https://github.com/GLolol/PyLink/compare/0.4.0-dev…0.4.5-dev
PyLink 0.3.50-dev
Tagged as 0.3.50-dev by GLolol on 2015-09-19T18:28:24Z
Many updates to core, preparing for an (eventual) 0.4.x release. Commits:
- 63189e9relay: look at the right prefix mode list when rejoining from KILL
- cb83db4relay: don’t allow creating a channel that’s already part of a relay
- 8faf86arelay: rejoin killed users to the RIGHT channels
- 2e0a5e5utils.parseModes: fix IndexError on empty query
- 1f95774inspircd: add proper fallback value for OPERTYPE?
- d6cb9d4Merge commit ‘320de2079a78202e99c7b6aeb53c28c13f43ba47’
- 320de20relay: add INVITE support (Closes #94)
- 60dc3ferelay: use “Channel delinked.” part message when delinking channels
- 9a47ff8Merge branch ‘master’ into devel
- ace0ddfrelay: use JOIN instead of SJOIN for non-burst joins
- c2ee9efMerge branch ‘master’ into devel
- 19fa31drelay: fix incorrect logging in getSupportedUmodes()
- 2f760c8relay: Don’t send empty user mode changes
- 4f40faerelay: in logs, be a bit more specific why we’re blocking KILLs and KICKs
- 0b590d6relay/protocols: use utils.toLower() for channel names, respecting IRCd casemappings
- 4525b81relay.handle_kill: prevent yet another RuntimeError
- 26e102fShow oper types on WHOIS
- 8d19057relay: set umode +H (hideoper) on all remote opered clients
- 5480ae1classes: Remove “opertype” IrcUser() argument
- 531ebbbMerge branch ‘master’ into devel
- f9b4457Decorate relay clients, etc. with custom OPERTYPEs
- 4a964b1Merge branch ‘master’ into devel
- 1062e47classes.IrcChannel: default modes to +nt on join
- d270a18Remove unused imports
- 94f83ebrelay.showuser: show home network/nick, and relay nicks regardless of oper status
- 5503477commands: distinguish commands with multiple binds in ‘list’
- 8976322Replace admin.showuser with prettier whois-style cmds in ‘commands’ and ‘relay’
- e1e31f6Allow multiple plugins to bind to one command name!
- afd6d8cRefactor conf loading; skip the file-loading parts entirely for tests (#56)
- cda54c7main: Fix- b71e508.
- a58bee7Modularize tests using common classes, add our custom test runner (#56)
- 549a1d1classes: IrcServer.users is now a set()
- adb9ef1classes: fixes for the test API
- 973aba6Move utils’ global variables to world.py
- b71e508classes.Irc no longer needs a conf argument; tweak tests again
- ad5fc97Many fixes to test API, utils.reverseModes stub
- ab4cb4dMerge branch ‘master’ into devel
- 2fe9b62Consistently capitalize errors and other messages
- bc7765bLet’s use consistent “Unknown command” errors, right?
- d059bd4Move ‘exec’ command into its separate plugin
- 3d621b0Move checkAuthenticated() to utils, and give it and isOper() toggles for allowing oper/PyLink logins
- 090fa85Move Irc() from main.py to classes.py
PyLink 0.3.1-dev
Tagged as 0.3.1-dev by GLolol on 2015-09-03T06:56:48Z
Bugfix release + LINKACL support for relay. Commits since 0.3.0-dev:
- 043fccf447Fix previous commit (Closes #100)
- 708d949164relay: join remote users before sending ours
- 8d44830d5crelay.handle_kill: prevent yet another RuntimeError
- 6d6606900erelay: coerse “/” to “|” in nicks if “/” isn’t present in the separator
- c8e7b72065protocols: lowercase channel names in PRIVMSG handling
- 37eecd7d69pr/inspircd: use OPERTYPE to oper up clients correctly, and handle the metadata accordingly- 9f0f4cb124relay: burst the right set of modes
- 7620cd7433pr/inspircd: fix compatibility with channel mode +q (~)
- 3523f8f766LINKACL support
- 51389b96e2relay: LINKACL command (Closes #88)
PyLink 0.2.5-dev
Tagged as 0.2.5-dev by GLolol on 2015-08-16T05:39:34Z
See the diff for this development build: https://github.com/GLolol/PyLink/compare/0.2.3-dev…0.2.5-dev
PyLink 0.2.3-dev
Tagged as 0.2.3-dev by GLolol on 2015-07-26T06:11:20Z
The “prevent PyLink from wrecking my server’s CPU” release.
Mostly bug fixes here, with a couple of scripts added
(start-cpulimit.sh and kill.sh) added to
assist running PyLink under the protection of CPUlimit. :)
New features
- relay: Block most duplicate modes from being relayed (#71)
- main: write a PID file to pylink.pid(f85fbd934b)
- ts6: support +AOScharybdis extension modes, warning if the IRCd doesn’t support them (146ab5e)
Fixes
- relay: quit users who aren’t on any shared channels after KICK
(71a3464)
- Use RFC1459 for case mapping on InspIRCd (01220b3)
- relay: Fix handling of local SAVE(e4da670) andKILL(a4da9b5) commands
- relay: fix nick collision loop on SAVE+ when both tagged (i.e. _42XAAAAAA) and untagged (42XAAAAAA) versions of a UID nick exist (e354ada)
- relay: Fix command arguments of DELINKon home networks (c07cfb1)
- relay: SJOINusers once, and only once (#71,b681a67)
- main.Irc: catch OSError(bad file descriptor) errors and disconnect
- ts6: add QS as a required capability (69e16e5)
- ts6: fix JOINhandling andparse_askey handling in hooks (ddefd38)
- relay: only wait for irc.connectedonce per network (4d7d7ce)
Full diff: https://github.com/GLolol/PyLink/compare/0.2.2-dev…0.2.3-dev
PyLink 0.2.2-dev
Tagged as 0.2.2-dev by GLolol on 2015-07-24T18:09:44Z
The “please don’t break again :(” release.
- Added WHOIShandling support for TS6 IRCds.
- ts6: fix handling of SID,CHGHOST, andSQUITcommands.
- Support noctcp (mode +C) on charybdis, and wallops (+w) in relay.
- Raised fallback ping frequency to 30
…And of course, lots and lots of bug fixes; I won’t bother to list them all.
Full diff: https://github.com/GLolol/PyLink/compare/0.2.0-dev…0.2.2-dev
PyLink 0.2.0-dev
Tagged as 0.2.0-dev by GLolol on 2015-07-23T04:44:17Z
Many changes in this development release, including:
- New ts6protocol module, for charybdis 3.x.
- relay: add nick collision handling via SAVE(#61).
- relay: trivial tasks like TOPIC,MODE,KICKandPARTno longer spawn new clients for their senders, and are routed through the pseudoserver when applicable instead (e76d31dc0f8259).
- Irc: be safer against UnicodeDecodeErrorcaused bysocket.recv()cutoff, by decoding each individual line instead (06d17d5).
- relay: make the nick/netseparator a per-network config option. (ad34f6c).
- relay: Use a whitelist when it comes to relaying modes (#54), and
strip out bans that don’t match nick!user@hostsyntax (#55).
- relay: Handle user mode changes (#64).
- Support different case mappings for nicknames (RFC1459 vs ASCII) (#75).
- inspircd: remove RSQUITcommand handler (3494d4f).
And of course, many, many bug fixes! (relay should now work properly with more than 2 networks, for example…)
Full diff: https://github.com/GLolol/PyLink/compare/0.1.6-dev…0.2.0-dev
PyLink 0.1.6-dev
Tagged as 0.1.6-dev by GLolol on 2015-07-20T06:09:40Z
Bug fixes and improvements from 0.1.5-dev
- Irc.send: catch AttributeErrorwhenself.socketdoesn’t exist; i.e. when initial connection fails (b627513)
- Log output to log/pylink.log, along with console (#52,61804b1fbc2fbf)
- main/coreplugin: use log.exception()instead oftraceback.print_exc(), so logs aren’t only printed to screen (536366d)
- relay: don’t relay messages sent to the PyLink client (688675d)
- relay: add a savecommand, and make rescheduling optional inexportDB()(c00da49)
- utils: add getHostmask()(1b09a00)
- various: Log command usage, execusage, successful logins, and access denied errors inadmin.py’s commands (57e9bf6)
Full diff: https://github.com/GLolol/PyLink/compare/0.1.5-dev…0.1.6-dev
PyLink 0.1.5-dev
Tagged as 0.1.5-dev by GLolol on 2015-07-18T20:01:39Z
New features
- Hooks for CHGHOST,CHGIDENT, andCHGNAME(f9d821535f1c88)
- IrcUser: Implement user channel tracking via an
IrcUser.channelsattribute (d97fce8)
- Send PING to our uplink periodically, and quit if we don’t get a
response (#42, #57)
- New server pingfreqoption is introduced to set the time between PINGs.
 
- New server 
- relay: Only spawn clients if they share a channel, and quit them
when they leave all shared channels (cf32461)
- Support autoreconnecting to networks! A new autoconnectserver setting is added to set autoconnect delay.
- New PYLINK_DISCONNECThook to keep track of network disconnections (3f6f78b)
- relay: add a LINKEDcommand (#65,bbcd70b)
- commands: add a HELPcommand (#8,6508cb34553eda)
Bug fixes
- relay: don’t spawn tagged clones for the internal PyLink client
(40fd9e3)
- relay: don’t send empty MODEcommands if there are no supported modes left after filtering (2a586a6)
- protocol/inspircd: don’t raise KeyError when removing channel from
user fails (73c625a)
- relay: only join PyLink to channels & set topics if there’s
actually a relay on the network (49943a7)
- relay: fix the wrong modes being propagated to the wrong channels on
LINK(#53,ccf7596)
- relay: fix “RuntimeError: dictionary changed size during iteration”
in handle_part(d30890c)
- relay: Only allow messaging users in common channels / channels that
you’re in (#62, 024ac16)
Misc. changes
- Move client/server spawning, hook calling, command handling, and
KILL/KICK detection outside the protocol module (0aa2f98fdea348)
- Fix fakeirc and tests for relay (#56, a51cfcb)
Removed features
- commands: remove debugcommand; it’s useless now thatexec,showchan, andshowuserexist (50665ec)
- admin: tellcommand has been removed. Rationale: limited usefulness; doesn’t wrap long messages properly. (4553eda)
You can view the full diff here: https://github.com/GLolol/PyLink/compare/0.1.0-dev…0.1.5-dev
PyLink 0.1.0-dev
Tagged as 0.1.0-dev by GLolol on 2015-07-16T06:27:12Z
PyLink’s first pre-alpha development snapshot.
Working protocol modules: - InspIRCd 2.0.x -
inspircd
Working plugins: - admin - hooks -
commands - relay
