Это, пожалуй, наиболее интересный плагин. Триггеры реагируют на текст в чате или привате и имеют широкий ассортимент реакций. С помощью триггеров можно создавать простые реакции бота на текст в чате и привате с ответом, создавать команды с различными функциями вплоть до получения и форматирования web-страниц из интернета, записи файлов и многое другое. Событие (текст), на который должна происходить реакция, задаётся с помощью кратких шаблонов. Проверить результаты парсировки краткого шаблона можно по команде !checkpattern <краткий шаблон>.
Триггеры просматривают события в главном чате на соответствие имеющимся шаблонам триггеров. Если шаблон не представляет собой команду, то движок триггеров не реагирует на пользователей в исключениях. Сначала создаётся новый триггер командой !addtriggers <краткий_шаблон>. После чего для задания какой-либо реакции на это событие нужно добавить ответ (или ответы) в этот триггер с желаемым индексом. Это делается командой !addanswers <индекс> <ответ>. Если ответов несколько, то выбирается один из них случайным образом. Ответ может быть строкой. Текст ответа будет отправлен в чат от имени Бота. В тексте могут присутствовать специальные вставки, которые представляют собой инструкции для того или иного действия. После обработки специальные вставки вырезаются из ответа. Если после обработки всех специальных вставок простого текста найдено не будет, то реакции от имени Бота не будет (кроме действий, заданных в инструкциях спецвставок). Вот перечень возможных вставок:
{class:мин_класс[-макс_класс]:ответ} – задаёт минимальный класс пользователя для срабатывания, иначе прекращение обработки (возможно указание максимального класса через дефис). Если класс пользователя, на который данный триггер с этим ответом сработал, ниже (или не входит в указанный диапазон), то пользователь получит ответ, указанный во флаге и обработка триггера прекратится.
{ifclass:мин_класс[-макс_класс]} – аналогичен предыдущему флагу {class}, только в случае невыполнения условия событие не прерывается. Тоесть никакой реакции не будет.
{user:nick1[$nick2]} – задаёт перечень ников пользователей для срабатывания, иначе нет реакции (ники разделяются символом $). Тоесть можно указать ник непосредственно или переменную.
{usernot:nick1[$nick2]} – флаг обратный флагу {user}.
{if:var:value} – задаёт условие для срабатывания, иначе нет реакции. Проверяет, соответствует ли значение value значению переменной var. Value может быть как текстом, так и переменной со значением.
{ifnot:var:value} – флаг с противоположной предыдущему флагу {if} реакцией. Тоесть сработает, если значение value не равно значению переменной var.
{var:Имя_переменной1="Шаблон_значения1" [Имя_переменной2="Шаблон_значения2"]} – задаёт имена переменных и их значения для использования далее в ответах: [Имя_переменной]. Таким образом имя переменной, заданной этим флагом, при использовании в ответе в квадратных скобках заменится на её значение. Шаблон составляется по правилам LUA-regex.
{gvar:var:value} – задаёт глобальную переменную с именем var и значением value. Глобальная переменная хранится в памяти и доступна при последующих обращениях.
{delvar:var1[$var2]} – удаляет глобальные переменные (можно указать несколько переменных, разделяя имена символом $).
{repl:Шаблон_замены1="Значение_замены1" [Шаблон_замены2="Значение_замены2"]} – задаёт шаблоны замен для использования в ответах. Таким образом можно заменять исходный текст по шаблонам на указанные в параметрах замены. Шаблоны замен составляются по правилам LUA-regex. Возможны захваты, передающиеся в ответы.
{srepl:текст1="замена1" [текст2="замена2"]} – задаёт текстовые замены для использования в ответах, тоесть без использования шаблонов регулярных выражений, как в предыдущем флаге {repl}.
{rev:Шаблон_реверса1 [Шаблон_реверса2]} – задаёт шаблоны участков, которые будут перевёрнуты (реверсированы). Возможно использование захвата.
{rand:var:d1:d2} – присвоит переменной var случайное число в промежутке от d1 до d2, которые могут быть целыми числами или переменными, значениями которых являются целые числа.
{math:var:action:elem1:elem2} – присвоит переменной var результат действия action над элементами elem1 и elem2. Action может быть:
{chat:текст} – отправит текст в общий чат как есть. Возможно использование переменных.
{mode:type:текст} – отправит текст в чат всем пользователям с режимом подключения type (A,P,S). Возможно использование переменных.
{profile:класс:текст} – отправит текст в чат всем пользователям с указанным классом. Возможно использование переменных.
{touser:ник1[$ник2…$никN]:текст} – отправит текст в общий указанному пользователю. Возможно указывать несколько ников, разделённых символом $. Возможно использование переменных.
{pm:текст} – отправит текст в приват пользователю от имени Бота, на которого сработал триггер. Возможно использование переменных.
{pmto:ник1[$ник2…$никN]:from:текст} – отправит текст в приват указанному пользователю от имени from. Возможно указывать несколько ников, разделённых символом $. Возможно использование переменных.
{pmall:текст} – отправит текст в приват всем пользователям от имени бота. Возможно использование переменных.
{pmmode:type:from:текст} – отправит текст от имени from в приват всем пользователям с режимом подключения type (A,P,S). Возможно использование переменных.
{pmprofile:класс:from:текст} – отправит текст от имени from в приват всем пользователям с указанным классом. Возможно использование переменных.
{flood:число:текст} – отправит текст в приват пользователю, на которого сработал триггер, указанное число раз. Возможно использование переменных.
{flooduser:ник:число:текст} – отправит текст в приват указанному пользователю указанное число раз. Возможно использование переменных.
{file:filename} – отправит текст из файла по пути filename (полный путь) в приват пользователю, на которого сработал триггер (имя файла без расширения указывает на файл в директории txt). Возможно использование переменных.
{varfile:var:filename} – поместит содержимое файла по пути filename (полный путь) в переменную var (остальное по правилам флага {file}).
{url:адрес,GZip,CodePage,Proxy"основной_шаблон"шаблон_ответа"ответ} – получает текст страницы с указанным URL-адресом. При этом может указываться использование GZip (1 или 0), имя кодировки (для PtokaX должна указываться кодировка, имеющаяся в таблице локальных кодировок) и адрес прокси-сервера (эти параметры могут быть пропущены, но запятые обязательны). Полученный текст проходит по всем основным шаблонам, выделяя в них шаблон ответа и возвращая ответ. Шаблон ответа может содержать захваты (captures), которые возвращаются в ответе.
{varurl:var:адрес,GZip,CodePage,Proxy"основной_шаблон"шаблон_ответа"ответ} – аналогичен флагу {url}, но результат заносит в переменную var.
{curl:кодировка} – устанавливает кодировку для преобразования url-адреса флагов {url} и {varurl}. Если используется локальная таблица кодировок, то должна быть указана имеющаяся кодировка.
{ban:минуты:причина} – забанить пользователя, на которого сработал триггер, на указанное число минут с указанной причиной. Возможно использование переменных.
{tofile:режим_записи:filename$text} – запись текста text в файл с именем filename (разделены символом $). Режимы записи:
w - режим записи с заменой содержимого, a - режим дозаписи в конец файла. Возможно использование переменных.
{wait} – флаг для задержки реакции на время до ближайшего срабатывания таймера скрипта (период таймера 60 секунд).
{exit} – производит незамедлительное прекращение процедуры дальнейшей обработки.
Имейте в виду, что в тексте ответа возможно применять зарезервированные вставки: [curUser], [BotName], [hub], [time], [date],[topic], [revUser], [ip], которые заменяются соответственно на ник текущего пользователя, имя Бота, название Хаба, время, дату, текущий топик, реверсированный ник и IP текущего пользователя.
Удалить триггер с выбранным индексом можно по команде !deltriggers <индекс>. Для триггеров надо иметь в виду, что триггер с индексом 1 зарезервирован под систему антикапслока и изменению шаблона или удалению не подлежит. Удалить ответ с выбранным индексом из триггера с выбранным индексом можно по команде !delanswers <индекс_триггера> <индекс_ответа>. Включить/выключить систему триггеров можно по команде !istriggers. Посмотреть список триггеров можно по команде !seetriggers. Посмотреть подробно триггер с выбранным индексом и его ответы можно по команде !seetriggeranswers <индекс>.
Можно группировать триггеры в группы для удобства. Поместить триггер с выбранным индексом в группу с выбранным названием можно по команде !triggersaddgroup <index> <groupname>. Убрать выбранный триггер из группы, в которой он находится в настоящий момент, можно по команде !triggersdelgroup <index>. Удалить выбранную группу вместе с триггерами можно по команде !triggersremgroup <groupname>. Переименовать группу с выбранным названием можно по команде !triggersrengroup <groupname>$<newgroupname>. Расформировать группу с выбранным названием можно по команде !triggersclsgroup <groupname>. Посмотреть состав группы с выбранным названием можно по команде !triggersseegroup <groupname>.
Бот-триггеры похожи на триггеры, только привязаны к определённому роботу (о них ниже). И по умолчанию текст (как в чате, так и в приватных сообщениях) в ответ пользователю поступает от имени этого робота, к которому привязан бот-триггер. Правила добавления бот-триггеров и ответов к ним аналогичны правилам для триггеров. При добавлении триггера в случае программирования краткого шаблона для приватных сообщений учитывается формат приватных сообщений протокола.
Посмотреть список бот-триггеров можно по команде !seebottriggers. Посмотреть подробнее бот-триггер с выбранным индексом и его ответы можно по команде !seebottriggeranswers <индекс>. Добавить бот-триггер для робота с выбранным ником можно по команде !addbottriggers <ник> <краткий_шаблон>. Добавить ответ в бот-триггер с выбранным индексом можно по команде !аddbotаnswers <индекс> <ответ>. Удалить бот-триггер с выбранным индексом можно по команде !delbottriggers <индекс>. Удалить ответ с выбранным индексом из бот-триггера с выбранным индексом можно по команде !delbotanswers <индекс_триггера> <индекс_ответа>. Добавить бот-триггер с выбранным индексом в группу с выбранным названием можно по команде !bottriggersaddgroup <index> <groupname>. Убрать бот-триггер с выбранным индексом из группы, в которой он в данный момент состоит, можно по команде !bottriggersdelgroup <index>. Удалить группу с выбранным названием вместе с имеющимися в ней бот-триггерами можно по команде !bottriggersremgroup <groupname>. Переименовать группу с выбранным названием можно по команде !bottriggersrengroup <groupname>$<newgroupname>. Расформировать группу с выбранным названием можно по команде !bottriggersclsgroup <groupname>. Посмотреть состав группы с выбранным названием можно по команде !bottriggersseegroup <groupname>. Включается/выключается система бот-триггеров вместе с системой триггеров.
ЛС-триггеры похожи на триггеры, только специализированы на личных (приватных) сообщениях. Они просматривают приватные сообщения Хаба. Правила добавления лс-триггеров и ответов к ним аналогичны правилам для триггеров. При добавлении триггера учитывается формат приватных сообщений протокола.
Посмотреть список лс-триггеров можно по команде !seepmtriggers. Посмотреть подоробнее лс-триггер с выбранным индексом и его ответы можно по команде !seepmtriggeranswers <индекс>. Добавить лс-триггер по команде !addpmtriggers <краткий_шаблон>. Добавить ответ в лс-триггер с выбранным индексом можно по команде !addpmanswers <индекс> <ответ>. Удалить лс-триггер с выбранным индексом можно по команде !delpmtriggers <индекс>. Удалить ответ с выбранным индексом из лс-триггера с выбранным индексом можно по команде !delpmanswers <индекс_триггера> <индекс_ответа>. Добавить лс-триггер с выбранным индексом в группу с выбранным названием можно по команде !pmtriggersaddgroup <index> <groupname>. Убрать лс-триггер с выбранным индексом из группы, в которой он в данный момент состоит, можно по команде !pmtriggersdelgroup <index>. Удалить группу с выбранным названием вместе с имеющимися в ней лс-триггерами можно по команде !pmtriggersremgroup <groupname>. Переименовать группу с выбранным названием можно по команде !pmtriggersrengroup <groupname>$<newgroupname>. Расформировать группу с выбранным названием можно по команде !pmtriggersclsgroup <groupname>. Посмотреть состав группы с выбранным названием можно по команде !pmtriggersseegroup <groupname>. Включить/выключить систему лс-триггеров можно по команде !ispmtriggers.
Роботы представляют собой ботов, которые видны в списке пользователей. Созданным роботам можно присваивать бот-триггеры. Это удобно, когда необходимо сделать сервис, который может принимать информацию в виде приватных сообщений. Добавить робота с желаемым ником и описанием можно по команде !addnewbot <ник> <OP> <описание>. Флаг OP может быть 1 (виден как оператор) или 0 (виден в списке пользователей как простой пользователь). Удалить робот с выбранным ником можно по команде !delnewbot <ник>. Посмотреть список роботов можно по команде !newbotlist.
Этот сервис служит для автоматического преобразования символов в нижний регистр, если пользователь злоупотребляет прописными буквами. Может как просто предупреждать пользователя в чате (выполняются ответы из зарезервированного триггера с индексом 1) или просто автоматически меняет регистр. Переключается этот режим по команде !capsmode. Триггер с индексом 1 нельзя удалять. Ответы можно удалять и менять.
В ответах триггеров можно применять переменные, которые заданы как "глобальные". Эти переменные, в отличие от простых, не удаляются после обработки ответа и сохраняются в специальном массиве в памяти. Доступны всем триггерам. Есть возможность включить функцию сохранения массива глобальных переменных в файл. Кроме специальных флагов ответов триггеров для управления глобальными переменными можно применять команды. Для того, чтобы задать выбранное значение для глобальной переменной с выбранным именем можно воспользоваться командой !triggersaddvar <varname> <varvalue>. Если переменной с таким именем не существует, то она будет создана. Удалить глобальную переменную с выбранным именем можно по команде !triggersdelvar [<varname>]. Если имя не указано, будут удалены все имеющиеся глобальные переменные. Посмотреть значение глобальной переменной с выбранным именем можно по команде !triggersseevar [<varname>]. Если имя не указано, то будет выведен список имён имеющихся глобальных переменных.
Если константе triggers_isSaveGVars присвоено значение 1 (по умолчанию 0), то глобальные переменные будут сохраняться в файл. При этом они останутся доступными после перезагрузки. Таблицы триггеров, лс-триггеров и бот-триггеров хранятся в файлах Trigs.lua, PMTrigs.lua и BotTrigs.lua. База роботов хранится в файле BotList.
Примеры триггеров:
А теперь будет показан пример ещё одного интересного сервиса. Предположим, что мы хотим сделать сервис автоматического перевода текста, который мы пишем в чат, на другие языки по нашему выбору.
И так далее… На самом деле возможности системы триггеров далеко не ограничиваются этими примерами и показать все возможности здесь не представляется возможным. Но все они довольно просты и подчиняются одной системе.