Фильтры

С помощью правил фильтрации можно управлять входящими сообщениями: решать, какие сообщения вы хотите видеть, а какие нет (например, содержащие рекламу).

Можно применять фильтры ко всем источникам сразу или отдельно на канал. Можно использовать и сочетать любое количество правил фильтрации.

Поддерживаемые правила: mustHave, mustNotHave, регулярные выражения, фильтрация по типу вложения, копирование фильтров.

Команды

/filter - создать фильтр (на 1 источник) ИЛИ удалить фильтр (если ввести команду дважды). Сочетается с: mustHave', 'mustNotHave', 'every', тип вложения. /filterrx - фильтрация с использованием регулярных выражений (см. примеры тут) /filterall, /filterrxall - создать фильтр на все источники /filter канал-источник - увидеть все фильтры, применяемые к источнику

Как обозначить канал-источник в команде? Читайте тут!

mustHave, mustNotHave

mustHave - вы будете получать сообщение только с определенным текстом
Формат: /filter канал-источник mustHave текст
Пример: /filter https://t.me/junction_bot_news mustHave торговля биткоинами
Обратите внимание, что текст фильтра применяется целиком, а не отдельными словами. В вышеприведённом примере вы будете получать только те сообщения, в которых содержится полностью фраза "торговля биткоинами", именно в таком падеже и регистре.

mustNotHave - вы не будете получать сообщения, содержащие указанный текст
Формат: /filter канал-источник mustNotHave текст
Пример: /filter https://t.me/junction_bot_news mustNotHave реклама

Комбинирование фильтров

Несколько mustHave фильтров будут скомбинированы по принципу «или-или».

Несколько mustNotHave фильтров будут скомбинированы по принципу «и то, и другое».

Внимание: фильтры нельзя сочетать в одной команде! Каждый фильтр должен создаваться отдельной командой.

Примеры:
/filter @junction_bot_news mustHave коты
/filter @junction_bot_news mustHave котята
Вы будете получать сообщения, в которых либо содержится слово "коты", либо "котята".

/filter @junction_bot_news mustNotHave собаки
/filter @junction_bot_news mustNotHave щенки
Вы не будете получать ни сообщения со словами "собаки", ни сообщения со словами "щенки".

Фильтрация по типу вложения

Также можно фильтровать мультимедийные сообщения. Для этого используйте один из следующих текстов для фильтров: <photo>, <document>, <audio>, <video>, <sticker>, <voice>, <location>, <animation>, <videonote>, <poll>.

Примеры:
/filter @junction_bot_news mustHave <audio> - вы будете получать из канала @junction_bot_news только сообщения, содержащие аудиовложения.
/filter @junction_bot_news mustNotHave <photo> - вы не будете получать никакие сообщения, содержащие картинки, из канала @junction_bot_news.

Регулярные выражения

Можно устанавливать сложные правила фильтрации с помощью регулярных выражений (regular expressions, regex). Для этого используйте команду /filterrx.

Вот несколько популярных примеров:
1. Не пропускать посты со словом word внутри подписи к картинке
/filterrx канал-источник mustNotHave .*word.*<photo>.*
2. Два слова в определенном порядке
/filterrx канал-источник mustNotHave.*word1.*word2.*
3. Игнорировать регистр
/filterrx канал-источник mustNotHave(?i:.*wOrd1.*woRd2.*)
4. Одно из слов
/filterrx канал-источник mustNotHave.*word1.*|.*word2.*|.*word3.*
5. Правила можно сочетать. Например, любое из перечисленных слов, регистр не важен
/filterrx канал-источник mustNotHave(?i:.*wOrd1.*|.*worD2.*|.*woRd3.*)
6. Слово на русском языке
/filterrx канал-источник mustNotHave.*([а-яА-Я]+).*
7. Любая ссылка
/filterrx канал-источник mustNotHave .*(http\/\/:|https:\/\/).*

Для того, чтобы отфильтровать сообщения, содержащие два слова в любом порядке, добавьте два фильтра:
.*word1.*word2.*
.*word2.*word1.*

Например:
/filterrx канал-источник mustNotHave .*кот.*собака.*
/filterrx канал-источник mustNotHave .*собака.*кот.*

Учтите важный нюанс: при фильтрации бот может добавлять пробел и/или код медиа-контента в конце текста. Поэтому советуем всегда ставить .* в конце ваших RegEx фильтров.

Вот здесь есть удобный инструмент для тестирования регулярных выражений: https://regex101.com. Установите Flavor на “golang” и флаг “Single line: Dot matches the new line”. Таким образом сервис будет работать идентично механизму @junction_bot.

Фильтр на все источники

Чтобы добавить фильтр на все текущие источники, используйте команду /filterall или /filterrxall (для регулярных выражений).

Учтите, что новые перенаправления всегда создаются с пустым списком фильтров. Вы можете скопировать на них фильтры с существующего источника.

Например:
/filterrxall add mustNotHave .*(http\/\/:|https:\/\/).*

Эта команда добавит на все источники фильтр, который не пропускает сообщения с ссылками.

Копирование фильтров

Можно скопировать все фильтры из другого канала. Для этого используйте следующий формат команды:

/filter каналкудакопироватьфильтры addAllFrom каналоткудакопироватьфильтры

Удаление фильтров

Для удаления фильтра просто выполни ту же самую команду ещё раз.

Чтобы увидеть все фильтры, примененные к каналу, используй команду

/filter канал-источник

Чтобы удалить все фильтры со всех каналов, используй команду

/filterall DELETE ALL

Получение только N-ого сообщения

Можно установить частоту пересылаемых сообщений, то есть пересылать только каждое n-ое сообщение (в примере ниже — каждое второе). Для этого используйте следующий формат команды:

/filter канал-источник every 2

Фильтрация по времени

Можно установить правила пропуска сообщений в зависимости от времени их прихода:

/filtertime канал-источник mustHave временной интервал

Временной интервал задаёт:
— Период, когда сообщения должны приходить для mustHave
— Период, когда сообщения не должны приходить для mustBotHave

Временной интервал может содержать день недели, время и временную зону.

День недели. Он всегда начинается в буквы w и затем идут цифры, соответсвующие дням недели.
Например:

w135
Соответсвует 1-му, 3-му и 5-му дням недели (пн, ср, пт)

w67
Соответсвует 6-му, 7-му дням недели — выходным.

Время. Время всегда задаётся в 24-часовом формате, интервалом от — до, включительно, часы:минуты.
Например:
9:30-17:30
0:00-23:59

Временная зона. Смотрите список доступных временных зон здесь. Если временная зона не указана, то используется центральное европейское время (Амстердам/Берлин/Прага/Вена)

Примеры:

/filtertime @source mustNotHave 0:00-7:00
Сообщения не будут приходить с полуночи до 7 утра по центральному европейскому времени.

/filtertime @source mustHave w12345 8:00-20:00 Europe/Moscow
Сообщения будут приходить только по будним дням с 8 утра до 20 вечера по московскому времени.

Для добавления фильтра сразу на все ваши источнике используйте команду /filtertimeall. Например:
/filtertimeall mustNotHave 0:00-7:00

Удаление дубликатов

Иногда одно и то же сообщение может попадать к вам несколько раз (например, если вы подписаны на два канала, которые переслали один и тот же пост). Чтобы отфильтровать одинаковые сообщения, используйте команду /setting duplicate.

/setting duplicate + одна из следующих настроек:

pass - выключено, разрешить дубликаты
Пример: /setting duplicate pass

filter -  отфильтровывать дубликаты
Пример: /setting duplicate filter

Чтобы применить эту настройку только к одному каналу, замените команду /setting на /settingchannel канал-источник (подробнее).

Фильтрация по автору сообщения

Предположим, @source — это чат-источник. Нам нужно пересылать только сообщения от пользователя @user.
1. Создаем перенаправление командой /new
2. Включаем отображение имён авторов командой
/settingchannel @source author full
3. Настраиваем фильтр на нужно имя командой
/filter @source mustHave @user

При таком подходе результирующие сообщения будут содержать имя автора сообщения. Иногда бывает необходимо, чтобы имени автора не было. Для этого понадобится чуть более сложный процесс — через промежуточный канал.

Предположим, нам нужно перенаправлять сообщения из A в B. Создаём канал С и настраиваем перенаправление с фильтрацией из А (источник) в С (промежуточный). Применяем к нему настройки из пунктов 2 и 3.

Затем, настраиваем перенаправление из С (промежуточный) в В (назначение). На это перенаправление вешаем замену (командой /replace), которая будет удалять имена авторов. Готово!

Если повесить замену на первое перенаправление (из А в С), то она не будет влиять на имя автора. Имя автора, как и название канала источника, является сервисным текстом, не заменяется командой /replace, и настравивается другими способами.

Как разобраться, почему фильтры не работают как я хочу?

Если не понятно, какой из фильтров сработал, используйте настройку explain:
/settingchannel канал-источник explain on
На каждое новое сообщение она будет присылать отчет, подробно объясняющий, какие фильтры сработали и почему.

FAQ

Нет, но можно фильтровать по типу контента: картинки, анимация и т.п.

Предположим, @source — это чат-источник. Нам нужно пересылать только сообщения от пользователя @user.
1. Создаем перенаправление командой /new
2. Включаем отображение имён авторов командой
/settingchannel @source author full
3. Настраиваем фильтр на нужно имя командой
/filter @source mustHave @user

В первую очередь проверьте, всё ли в порядке с самим перенаправлением командой /list. Перенапралвение должно быть в списке и не должно быть помечено, как отключенное. Если у вас прямое подключение, удостоверьтесь там же, что ваш виртуальный канал не помечен как отключённый.

Затем проверьте, не в фильтрах ли дело, командами
/filter ссылка-на-источник
/filterrx ссылка-на-источник

Если фильтров много и не понятно, какой из них сработал, используйте настройку explain:
/settingchannel ссылка-на-источник explain on
На каждое новое сообщение она будет присылать отчет, подробно объясняющий, какие фильтры сработали и почему.

Репосты имеют фразу «from Источник», что Источник — название канала источника. Так что можете поставить фильтр

/filter @source mustNotHave from Источник

Загрузить больше