Skip to content
This page was generated and translated with the assistance of AI. If you spot any inaccuracies, feel free to help improve it. Edit on GitHub

IRC ​

Connect PRX to Internet Relay Chat (IRC) servers over TLS with support for channels, DMs, and multiple authentication methods.

Prerequisites ​

  • An IRC server to connect to (e.g., Libera.Chat, OFTC, or a private server)
  • A nickname for the bot
  • TLS-enabled IRC server (port 6697 is the standard)

Quick Setup ​

1. Choose a Server and Register a Nickname (optional) ​

For public networks like Libera.Chat, you may want to register your bot's nickname with NickServ:

/msg NickServ REGISTER <password> <email>

2. Configure ​

toml
[channels_config.irc]
server = "irc.libera.chat"
port = 6697
nickname = "prx-bot"
channels = ["#my-channel"]
allowed_users = ["mynick", "*"]

With NickServ authentication:

toml
[channels_config.irc]
server = "irc.libera.chat"
port = 6697
nickname = "prx-bot"
channels = ["#my-channel", "#another-channel"]
allowed_users = ["*"]
nickserv_password = "your-nickserv-password"

3. Verify ​

bash
prx channel doctor irc

Configuration Reference ​

FieldTypeDefaultDescription
serverStringrequiredIRC server hostname (e.g., "irc.libera.chat")
portu166697IRC server port (6697 for TLS)
nicknameStringrequiredBot nickname on the IRC network
usernameStringnicknameIRC username (defaults to the nickname if not set)
channels[String][]IRC channels to join on connect (e.g., ["#channel1", "#channel2"])
allowed_users[String][]Allowed nicknames (case-insensitive). Empty = deny all. "*" = allow all
server_passwordStringnullServer password (for bouncers like ZNC)
nickserv_passwordStringnullNickServ IDENTIFY password for nickname authentication
sasl_passwordStringnullSASL PLAIN password for IRCv3 authentication
verify_tlsbooltrueVerify the server's TLS certificate

Features ​

  • TLS encryption -- all connections use TLS for security
  • Multiple authentication methods -- supports server password, NickServ IDENTIFY, and SASL PLAIN (IRCv3)
  • Multi-channel support -- join and respond in multiple channels simultaneously
  • Channel and DM support -- handles both channel PRIVMSG and direct messages
  • Plain text output -- responses are automatically adapted for IRC (no markdown, no code fences)
  • Smart message splitting -- long messages are split respecting IRC's line length limits
  • Connection keepalive -- responds to server PING messages and detects dead connections (5-minute read timeout)
  • Monotonic message IDs -- ensures unique message ordering under burst traffic

Limitations ​

  • IRC is plain text only; markdown, HTML, and rich formatting are not supported
  • Messages are subject to IRC line length limits (typically 512 bytes including protocol overhead)
  • No built-in media or file sharing capability
  • Connection may drop if the server does not receive a response to PING within the timeout
  • Some IRC networks have anti-flood measures that may rate-limit the bot
  • Nick changes and reconnection after network splits are handled but may cause brief interruptions

Troubleshooting ​

Cannot connect to IRC server ​

  • Verify the server hostname and port are correct
  • Ensure port 6697 (TLS) is not blocked by a firewall
  • If using a self-signed certificate, set verify_tls = false

Bot joins channels but does not respond ​

  • Check that the sender's nickname is in allowed_users (case-insensitive matching)
  • Set allowed_users = ["*"] to allow all users for testing
  • Verify the bot has permission to speak in the channel (not muted or banned)

NickServ authentication fails ​

  • Ensure nickserv_password is correct
  • The bot nickname must be registered with NickServ before it can identify
  • Some networks require SASL authentication instead of NickServ; use sasl_password in that case

Released under the Apache-2.0 License.