IRC logger in C++. Chat log with cute web interface.

acetone 5741455270 Удалил тесты 2 years ago
.gitignore ee1e105052 Initial commit 2 years ago
LICENSE ee1e105052 Initial commit 2 years ago
README.md aaae71b48f readme updated 2 years ago
config_en.json b8acd20b09 обновленный конфиг 2 years ago
config_ru.json b8acd20b09 обновленный конфиг 2 years ago
ircabot.pro dbb37dc3ee typo in project name 2 years ago
main.cpp 7351be9ce9 длина искомого слова 2 years ago
tcpsyncclient.cpp 9fb198da2b +B flag complete :) 2 years ago
tcpsyncclient.h ecf00c67a6 to release :) 2 years ago

README.md

IRCaBot

ИркаБот - это непрожорливый логгер для IRC-чата: записывает историю, бережно сортируя сообщения по дате. Поддерживает функцию быстрого поиска слова или фразы, выводит статистику по каждой найденной дате. При поисковом запросе с датой отдает весь лог в ЛС запросившему пользователю.

Бот уважает права участников и дает возможность скрыть сообщения через специальную пометку. Точка в начале сообщения скрывает основной текст, но никнейм попадает в лог. Если в начале сообщения две точки, оно полностью игнорируется ботом и не появляется в логе.

Запросы принимаются только через общий чат, чтобы все могли видеть кто и что ищет. Обращения пользователей и свои ответы бот не записывает, чтобы не захламлять историю.

Конфигурация

Бот принимает путь до конфигурационного файла через передаваемый параметр: ircabot /path/to/config.json.

{
    "socket":
    {
        "address":  "127.0.0.1", <-- адрес сервера
        "port":     "6667",      <-- порт сервера
        "channel":  "#ircabot",  <-- канал для подключения
        "nickname": "ircabot",   <-- никнейм бота
        "password": ""           <-- пароль от никнейма (для NickServ). Может быть пустым.
    },

    "handler":
    {
        "help":     "'search' and 'test'.",  <-- ответ бота по умолчанию
        "minlen":   "4",                     <-- минимальная длина поискового запроса

        "logpath":  "/var/www/irc-log",      <-- директория хранения логов (должна существовать)
        "admin":    "acetone",               <-- никнейм админа для сообщения об ошибках в ЛС
        "success":  "success :)",            <-- сообщение об успехе
        "error":    "error :(",              <-- сообщение об ошибке
        "trylater": "try later.",            <-- сигнал о загруженности, "попробуйте позже"

        "find":     "search",                <-- команда поиска, для русскоговорящих можеть быть "поиск"
        "notfound": "not found.",            <-- сообщение о том, что поиск не дал результата
        "findzero": "blahblah",              <-- инструкция по поиску при вызове команды без параметров
        "links":    "http://si.te/log/"      <-- сообщение, выводимое после выдачи лога (веб-ссылка на лог)
    },

    "custom":
    {
        "test":     "it's work!"
    }
}

Не копируйте конфиг отсюда, так как комментарии ломают файл. Практические примеры находятся в корне репозитория.

На месте "test": "it's work!" может быть неограниченное количество триггеров в формате ключ-значение. При получении сообщения, например: ircabot, test, бот ответит: username, it's work!. Подобная функция может использоваться для размещения объявлений, кошелька для доната и прочее, например, "donate": "btc: xxxxxxxxxxxxxxxxxxxxxxx". Чтобы пользователи могли узнать о возможных функциях вызова, целесообразно упомянуть каждую в графе help.

Бот поддерживает изменение конфигурационного файла без перезапуска. Для применения изменений необходимо, чтобы пользователь, чей никнейм вписан в поле admin, написал в чате ircabot, reload (указывается актуальный никнейм бота).

Будьте внимательны: запятая в конце строки ключ-значение отсутствует только тогда, когда строка является последней. Если вы добавите некоторую кастомную строку, необходимо добавить запятую к предпоследней строке, а у последней строки запятой быть не должно.

Важное замечание: все современные серверы IRC имеют защиту от флуда (ну, наверное). Для корректной работы бота необходимо добавить его в "белый список" сервера. При выдаче истории в ЛС бот может отдавать много сообщений, и, если будет стандартное ограничение - одно сообщение в секунду, - процесс неприятно затянется, а в худшем случае - бот будет кикнут с сервера.

Протестировать бота можно в ILITA IRC, канал #acetonevideo.