Фильтры

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

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

Где найти 
Меню → Настройки перенаправлений → Выбрать источник и назначение → Фильтры

Обратите внимение на функцию отладки фильтров, которая потенциально может сэкономить вам много часов.

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

/filterrx - фильтрация с использованием регулярных выражений (см. примеры тут)

/filterall, /filterrxall - создать фильтр на все источники

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

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

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

🚦Разрешающие и запрещающие фильтры

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

🟢 Разрешающий фильтр (также известный как mustHave фильтр) будет пропускать только сообщения, подходящие под критерий. Если у вас есть один и более разрешающих фильтров, но сообщение не подходит ни под один из них, то сообщение точно будет остановлено. Другими словами, несколько mustHave фильтров будут скомбинированы по принципу «или».

🔴Запрещающий фильтр (также известный как mustNotHave фильтр) будет останавливать сообщения, подходящие под критерий. Если у вас есть один и более запрещающих фильтров и сообщение подходит хотя бы под один из них, то оно точно будет остановлено. Другими словами, несколько mustNotHave фильтров будут скомбинированы по принципу «и».

То есть, если у вас есть несколько текстовых разрешающих фильтров и несколько текстовых запрещающих фильтров, то сообщение будет опубликовано, только если оно подойдёт хотя бы под один разрешающий текстовый фильтр и не подойдет ни под один запрещающий текстовый фильтр.

Эти правила комбинирования работают внутри набора фильтров одного типа. То есть, например, если у вас есть разрешающие фильтры по текстовому совпадению и разрешающие фильтры по регулярным выражениям, то сообщение будет опубликовано, только если оно подойдёт хотя бы под один разрешающий текстовый фильтр и хотя бы под один разрешающий фильтр по регулярным выражениям.

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

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

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

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

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

🎯Фильтрация по текстовому совпадению

Где найти  
Меню → Настройки перенаправлений → Выбрать источник и назначение → Фильтры

Это — самый простой тип фильтрации. Критерий работает по принципу точного текстового совпадения, то есть условие фильтра срабатывает, только если в тексте сообщения встречается точный текст критерия. Учтите, что регистр учитывается. То есть, если критерий состоит из слова «bitcoin», то он не сработает, если в тексте встречается только «Bitcoin».

Помните, что если текст критерия состоит из нескольких слов, то в тексте сообщения должна встретится полностью строка критерия, все слова и именно в таком порядке и с такими разделителями. То есть, если критерий состоит из строки «Buy bitcoin», то он не сработает, если в тексте встречается только «Buy» или только «bitcoin» или, например «Buy or sell bitcoin».

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

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

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

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

Где найти  
Меню → Настройки перенаправлений → Выбрать источник и назначение → Фильтры

Можно устанавливать сложные правила фильтрации с помощью регулярных выражений (Regular Expressions, RegEx).

⏵Альтернативный способ настройки через команды
Для установки этого типа фильтров используйте команду /filterrx. Она работает по такому же принципу, что и команда /filter.
Вот несколько популярных примеров. Они используют настройку с помощью команд. При настройке через меню просто используйте последний аргумент в качестве критерия. Например, для первого примера это будет .*word.*<photo>.*

1. Не пропускать посты со словом word внутри подписи к картинке
/filterrx ссылка_на_источник mustNotHave .*word.*<photo>.*
2. Два слова - bitcoin и ethereum - в определенном порядке
/filterrx ссылка_на_источник mustNotHave .*bitcoin.*ethereum.*
3. Два слова - litecoin и ethereum - в любом порядке
/filterrx ссылка_на_источник mustNotHave .*(?=.*\blitecoin\b)(?=.*\bethereum\b).*
5. Два слова - bitcoin и ethereum - в определенном порядке, игнорировать регистр
/filterrx ссылка_на_источник mustNotHave (?i:.*BitCoin.*liTeCoin.*)
6. Любое из слов
/filterrx ссылка_на_источник mustNotHave .*bitcoin.*|.*litecoin.*|.*ethereum.*
7. Правила можно сочетать. Например, любое из перечисленных слов, регистр не важен
/filterrx ссылка_на_источник mustNotHave (?i:.*BitCoin.*|.*liTeCoin.*|.*EthereUm.*)
8. Слово на русском языке
/filterrx ссылка_на_источник mustNotHave .*([а-яА-Я]+).*
9. Любая ссылка
/filterrx ссылка_на_источник mustNotHave .*(http:\/\/|https:\/\/).*
10. Любое число
/filterrx ссылка_на_источник mustNotHave .*([0-9]+).*
11. Любой @юзернейм
/filterrx ссылка_на_источник mustNotHave .*@([a-zA-Z0-9=&_\-]+).*
12. Пропускать только картинки с подписями (без подписей не пропускать)
/filterrx ссылка_на_источник mustHave \S+<photo>\s*
13. Пропускать только картинки без подписей
/filterrx ссылка_на_источник mustHave \s*<photo>\s*

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

Другой важный момент: RegEx для фильтров обычно имеет .* в начале и в конце, потому что вы хотите, чтобы всё сообщение подошло под выражение. Если вы хотите использовать подобное выражение для замен, то, скорее всего, вы хотите убрать эти .* (иначе замена сработает на весть текст сообщения).

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

Помощь по регулярным выражениям

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

Самый простой способ заполучить интересующее вас регулярное выражение — попросить ChatGPT. Он просто эксперт!

Также можно обратиться на соответствующие форумы. Например StackOverflow, CyberForum или RuBoard.

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

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

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

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

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

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

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

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

Редактирования и удаление фильтров

Удобнее всего редактировать и удалять фильтры через меню здесь: Меню → Настройки перенаправлений → Выбрать источник и назначение → Фильтры. Если вам нужно удалить фильтры сразу со всех исчтоников, используйте команды.

⏵Альтернативный способ настройки через команды

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

/filter ссылка_на_источник mustHave <audio>

То удалить его можно командой

/filter ссылка_на_источник mustHave <audio>

Если фильтр добавлен командой

/filterall add mustHave <audio>

То удалить его только из одного источника можно командой

/filter ссылка_на_источник mustHave <audio>

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

/filter ссылка_на_источник

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

/filterall DELETE ALL

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

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

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

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

Где найти  
Меню → Настройки перенаправлений → Выбрать источник и назначение → Фильтры

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

⏵Альтернативный способ настройки через команды
/filtertime ссылка_на_источник mustHave временной интервал

Критерием фильтра является временной интервал. Он задаёт:
— Период, когда сообщения должны приходить для 🟢 разрешающих фильтров (mustHave).
— Период, когда сообщения не должны приходить для 🔴запрещающих фильтров (mustNotHave).

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

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

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

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

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

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

Примеры:

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

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

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

💬Фильтрация по теме в группе

Где найти  
Меню → Настройки перенаправлений → Выбрать источник и назначение → Фильтры

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

⏵Альтернативный способ настройки через команды
Чтобы установить фильтр по теме в группе используйте следующую команду:
/filtertopic ссылка_на_источник mustHave номер

Примеры:
/filtertopic ссылка_на_источник mustHave 1723
Пропускать только сообщения из темы номер 1723.

/filtertopic ссылка_на_источник mustNotHave 7231
Не пропускать сообщения из темы номер 7231.

Критерием является номер темы. Чтобы узнать номер темы в группе, возьмите ссылку на любое сообщение в теме. Номер в середине ссылки — это и есть номер темы. Например, если ссылка на сообщение https://t.me/publicchat/1723/36753, то номер темы — 1723.

Важно:
Есть одно исключение: если в ссылке указана тема 1, то в фильтре нужно ставить тему 0.
То есть, например, для ссылки https://t.me/publicchat/1/36753 команда будет /filtertopic ссылка_на_источник mustHave 0

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

Чтобы копировать сообщения из тем в источнике в такие же темы в назначении, вам необходимо создать эти темы вручную. Затем для каждой темы нужно создать промежуточный канал. Для каждой темы настраиваете сначала копирование в промежуточный канал с фильтром по нужной теме. Затем из промежуточного канала в назначение с нужной настройкой topic. См. пример здесь (вместо filter будет filterchannel, а вместо mybuttons будет topic).

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

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

Где найти  
Меню → Настройки перенаправлений → Выбрать источник и назначение → Дубли
⏵Альтернативный способ настройки через команды
/setting duplicate + одна из следующих настроек:

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

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

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

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

Фильтр дублей помнит последние 300 сообщений в источнике. То есть, если между одинаковыми сообщениями прошло 300 других сообщений, то бот уже не будет помнить первое из них и, следовательно, не отфильтрует второе. Если в течении 24 часов нет ни одного сообщения, то память фильтра сбрасывается.

Обратите внимание, что фильтр дубликатов сравнивает исходные сообщения. Это означает, что если вы хотите избежать дублирования в канале назначения, появившиеся в результате ваших правил замены (/replace и /replacerx), вам нужно использовать несколько более сложный подход — через промежуточный канал.

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

Затем настройте перенаправление из C (промежуточный) в B (канал назначения). Установите правило фильтрации для этого перенаправления (через меню или с помощью команды /settingchannel C duplicate filter). Оно удалит все дубликаты, даже те, которые появились в результате правил замены.

Готово! Если бы вы установили фильтр дублей для первого перенаправления (с A на C), то он не сработал бы на дубли, появившиеся в результате правил замены.

Учтите, что фильтр дублей не работает с настройкой delivery forward_client.

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

Где найти 
Меню → Настройки перенаправлений → Выбрать источник и назначение → Фильтры

Этот тип фильтра позволяет установить правила пропуска сообщений в зависимости от номера (ID) автора сообщения. Для анонимных сообщений номером автора является номер соответствующей группы или канала. Обратите внимание, что критерием является именно номер, а не имя автора.

⏵Альтернативный способ настройки через команды
Чтобы установить фильтр по номеру автора используйте следующую команду:
/filterauthor ссылка_на_источник mustHave номер

Примеры:
/filterauthor ссылка_на_источник mustHave 1723
Пропускать только сообщения от автора с номером 1723.

/filterauthorссылка_на_источник mustNotHave 7231
Не пропускать сообщения от автора с номером 7231.

Фильтрация по номеру автора — самый эффективный и удобный способ, мы рекомендуем использовать именно его. Но иногда требуется фильтровать по имени автора. Для фильтрации по имени автора сообщения, а не по его номеру, процедура чуть более сложная. Оставшаяся часть этой статьи посвящена этому более сложному способу.

  1. Сначала нужно включить в настройках пересылки отображение имени автора: Меню → Настройки перенаправлений → Выбрать источник и назначение → Автор
  2. Затем нужно добавить текстовый фильтр, содержкащий в качестве критерия имя автора
⏵Альтернативный способ настройки через команды

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

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

⏵Подробности настройки командами через промежуточный канал

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

Затем, настраиваем перенаправление из С (промежуточный) в В (назначение). На это перенаправление вешаем замену (командой /replace), которая будет удалять имена авторов.
/replace B @user&nbsp;(Имярек)

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

Фильтрация пересылаемых сообщений

C помощью Junction Bot можно фильтровать сообщения Telegram, которые были пересланы (forwarded) в канал источника. Допустим, @source — это канал-источник. Чтобы скопировать только оригинальные сообщения @source, но не сообщения, пересланные на @source из других каналов, сделайте следующее:

  1. Создайте новое правило пересылки с помощью команды /new
  2. Включите копирование имен авторов командой
    /settingchannel source_channel_reference header from_only
  3. Это добавит в начало пересылаемого сообщения фрагмент текста: «from » + название канала.
    Настройте фильтр для названия канала, который вы хотите отфильтровать. Например, если пересылаемые сообщения приходят с канала с названием «Источник пересылок»
    /filter source_channel_reference mustNotHave from Источник пересылок
  4. Если вы хотите избавиться от постов, пересылаемых из любого другого канала, то вам понадобится немного другая команда:
    /filter source_channel_reference mustNotHave from

Фильтрация с помощью ИИ

Вы можете описать любые критерии фильтрации в свободной форме и позволить ИИ автоматически фильтровать ваши сообщения. Интересно, что так можно фильтровать не только по тексту сообщения как таковому, но и по его смыслу и сантименту. Например, вы можете попросить ИИ пропускать только позитивные новости ☺️

Как это настроить, смотрите здесь.

Ручная фильтрация

Если вы хотите вручную решать, пропустить пост или отфильтровать, используйте режим ревью.

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

Если не понятно, какой из фильтров сработал, используйте настройку explain:
Меню → Настройки перенаправлений → Выбрать источник и назначение → Explain-отчёт
На каждое новое сообщение она будет присылать отчет, подробно объясняющий, какие фильтры сработали и почему.
Если вы обращаетесь в поддержку с вопросом по фильтрам, пожалуйста, присылайте explain-отчёт и полный список ваших фильтров на источнике, полученный командой
/filter ссылка_на_источник