IRC
Подключение PRX к серверам Internet Relay Chat (IRC) через TLS с поддержкой каналов, личных сообщений и нескольких методов аутентификации.
Предварительные требования
- IRC-сервер для подключения (например, Libera.Chat, OFTC или приватный сервер)
- Никнейм для бота
- IRC-сервер с поддержкой TLS (порт 6697 — стандартный)
Быстрая настройка
1. Выбор сервера и регистрация никнейма (опционально)
Для публичных сетей, таких как Libera.Chat, рекомендуется зарегистрировать никнейм бота через NickServ:
/msg NickServ REGISTER <password> <email>2. Конфигурация
toml
[channels_config.irc]
server = "irc.libera.chat"
port = 6697
nickname = "prx-bot"
channels = ["#my-channel"]
allowed_users = ["mynick", "*"]С аутентификацией NickServ:
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. Проверка
bash
prx channel doctor ircСправочник конфигурации
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
server | String | обязательный | Имя хоста IRC-сервера (например, "irc.libera.chat") |
port | u16 | 6697 | Порт IRC-сервера (6697 для TLS) |
nickname | String | обязательный | Никнейм бота в IRC-сети |
username | String | nickname | Имя пользователя IRC (по умолчанию совпадает с никнеймом) |
channels | [String] | [] | IRC-каналы для подключения при входе (например, ["#channel1", "#channel2"]) |
allowed_users | [String] | [] | Разрешённые никнеймы (без учёта регистра). Пусто = запрещено всем. "*" = разрешить всем |
server_password | String | null | Пароль сервера (для баунсеров вроде ZNC) |
nickserv_password | String | null | Пароль NickServ IDENTIFY для аутентификации по никнейму |
sasl_password | String | null | Пароль SASL PLAIN для аутентификации IRCv3 |
verify_tls | bool | true | Проверять TLS-сертификат сервера |
Возможности
- TLS-шифрование — все подключения используют TLS для безопасности
- Несколько методов аутентификации — поддержка пароля сервера, NickServ IDENTIFY и SASL PLAIN (IRCv3)
- Поддержка нескольких каналов — подключение и ответы в нескольких каналах одновременно
- Каналы и ЛС — обработка как канальных PRIVMSG, так и личных сообщений
- Текстовый вывод — ответы автоматически адаптируются для IRC (без markdown, без блоков кода)
- Интеллектуальное разделение сообщений — длинные сообщения разделяются с учётом ограничений длины строки IRC
- Поддержание соединения — ответ на серверные PING-сообщения и обнаружение разорванных соединений (таймаут чтения 5 минут)
- Монотонные ID сообщений — обеспечение уникального порядка сообщений при пиковом трафике
Ограничения
- IRC поддерживает только текст; markdown, HTML и форматирование не поддерживаются
- Сообщения ограничены длиной строки IRC (обычно 512 байт включая протокольные накладные расходы)
- Нет встроенной возможности обмена медиа или файлами
- Соединение может разорваться, если сервер не получит ответ на PING в течение таймаута
- Некоторые IRC-сети имеют антифлуд-меры, которые могут ограничить частоту сообщений бота
- Смена никнейма и переподключение после сетевых разделений обрабатываются, но могут вызвать кратковременные прерывания
Устранение неполадок
Не удаётся подключиться к IRC-серверу
- Проверьте корректность
serverиport - Убедитесь, что порт 6697 (TLS) не блокируется файрволом
- При использовании самоподписанного сертификата установите
verify_tls = false
Бот подключается к каналам, но не отвечает
- Проверьте, что никнейм отправителя указан в
allowed_users(сравнение без учёта регистра) - Установите
allowed_users = ["*"]для разрешения всех пользователей при тестировании - Убедитесь, что бот имеет право говорить в канале (не замолчан и не забанен)
Аутентификация NickServ не проходит
- Убедитесь, что
nickserv_passwordкорректен - Никнейм бота должен быть зарегистрирован в NickServ перед идентификацией
- Некоторые сети требуют SASL-аутентификацию вместо NickServ; используйте
sasl_passwordв этом случае