IRCv3 compatibility
From version 4.1.0, Sopel supports IRCv3. This page details how different pieces of the new standard are supported.
IRCv3.1
Mandatory components
Capability negotiation
Capabilities can be requested by a plugin in its setup
procedure, using bot.cap_req
. This function can also be used to require that a capability not be used, and will handle making sure that there is no conflict. If there is, an exception will be raised, and the plugin can decide whether to fail (and leave itself unloaded) or handle the problem gracefully.
multi-prefix
From version 4.1.0, Sopel supports bitwise channel permissions. bot.privileges
contains the privileges for each user in each channel. The privilege is a bitwise integer, which can be compared to constants for each known type of privilege. For example, bot.privileges['#YourPants']['Embolalia'] & sopel.module.OP
will return True
if Embolalia is an op in #YourPants. Using an inequality operator (e.g. >=
) is often more useful in practice, as the above would return True
only if Embolalia is reported as an op, but not if that user is an owner, despite that being a higher level. With multi-prefix
enabled, the above would be True
if Embolalia is an op, even if that user is also an owner, as this capability makes it easy for Sopel to recognize when a user has multiple levels.
multi-prefix
is enabled by default on any server which supports it.
SASL Authentication
If the server supports SASL authentication, and a sasl_password
value is set in the [core]
section of the config file, Sopel will attempt to authenticate with it. By default, the authentication mechanism given is PLAIN
; this can be changed with the sasl_mechanism
value in the [core]
section of the config. No other mechanism has been tested. Regardless of the mechanism, the token sent will be a base-64 encoding of '\0'.join((nick, nick, pass))
, where nick
is the bot’s nickname and pass
the provided SASL password.
Optional Extensions
account-notify
There is nothing using or requesting this extension by default. A plugin can request this extension with no known problems.
away-notify
There is nothing using or requesting this extension by default. A plugin can request this extension with no known problems.
extended-join
There is nothing using or requesting this extension by default. A plugin can request this extension with no known problems.
tls
This is not currently supported.
IRCv3.2 (pending)
Mandatory components
Message tags
trigger.tags
will contain a map of tag names to their values. If no tags are sent, or the server does not support tags, this will be empty.
There is currently no direct way to send a message with tags, though it may be possible with bot.write
.
Message intents
If a message has an intent, it can be accessed with trigger.tags['intent']
. Currently, there is no effort made to ensure that a message with an ACTION
tag behaves the same way as one sent as \x01ACTION message\x01
, and as such it is recommended that plugins not request the intents
capability, as it may cause unexpected behavior in other plugins. Remedies are being explored for this in future versions.
There is currently no direct way to send a message with intents, though it may be possible with bot.write
.
Metadata
There is nothing using or requesting this extension by default. A plugin can request this extension with no known problems.
monitor
There is nothing using or requesting this extension by default. A plugin can request this extension with no known problems.
Optional extensions
server-time
There is nothing using or requesting this extension by default. A plugin can request this extension with no known problems.
batch
There is nothing using or requesting this extension by default. A plugin can request this extension with no known problems.