Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

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

Справочник конфигурации

ПолеТипПо умолчаниюОписание
serverStringобязательныйИмя хоста IRC-сервера (например, "irc.libera.chat")
portu166697Порт IRC-сервера (6697 для TLS)
nicknameStringобязательныйНикнейм бота в IRC-сети
usernameStringnicknameИмя пользователя IRC (по умолчанию совпадает с никнеймом)
channels[String][]IRC-каналы для подключения при входе (например, ["#channel1", "#channel2"])
allowed_users[String][]Разрешённые никнеймы (без учёта регистра). Пусто = запрещено всем. "*" = разрешить всем
server_passwordStringnullПароль сервера (для баунсеров вроде ZNC)
nickserv_passwordStringnullПароль NickServ IDENTIFY для аутентификации по никнейму
sasl_passwordStringnullПароль SASL PLAIN для аутентификации IRCv3
verify_tlsbooltrueПроверять 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 в этом случае

Released under the Apache-2.0 License.