Фильтры
С помощью правил фильтрации можно управлять входящими сообщениями: решать, какие сообщения вы хотите видеть, а какие нет (например, содержащие рекламу).
Можно применять фильтры ко всем источникам сразу или отдельно на канал. Можно использовать и сочетать любое количество правил фильтрации.
Где найти
Меню → Настройки перенаправлений → Выбрать источник и назначение → Фильтры
Обратите внимение на функцию отладки фильтров, которая потенциально может сэкономить вам много часов.
⏵Альтернативный способ настройки через команды
/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».
Фильтрация по типу медиа-сообщения
Для фильтрации по типу медиа-сообщения используйте один из следующих текстовых фильтров:
⏵Альтернативный способ настройки через команды
Примеры:/filter
- вы будете получать из канала @junction_bot_news только сообщения, содержащие аудиовложения.ссылка_на_источник
mustHave <audio>/filter
- вы не будете получать никакие сообщения, содержащие картинки, из канала @junction_bot_news.ссылка_на_источник
mustNotHave <photo>
🔍Фильтрация по регулярным выражениям
Где найти
Меню → Настройки перенаправлений → Выбрать источник и назначение → Фильтры
Можно устанавливать сложные правила фильтрации с помощью регулярных выражений (Regular Expressions, RegEx).
⏵Альтернативный способ настройки через команды
Для установки этого типа фильтров используйте команду /filterrx. Она работает по такому же принципу, что и команда /filter.
Вот несколько популярных примеров. Они используют настройку с помощью команд. При настройке через меню просто используйте последний аргумент в качестве критерия. Например, для первого примера это будет.*word.*<photo>.*
1. Не пропускать посты со словом word внутри подписи к картинке
/filterrx
ссылка_на_источник
mustNotHave.*word.*<photo>.*
2. Два слова - bitcoin и ethereum - в определенном порядке/filterrx
3. Два слова - litecoin и ethereum - в любом порядкессылка_на_источник
mustNotHave
.*bitcoin.*ethereum.*/filterrx
5. Два слова -ссылка_на_источник
mustNotHave
.*(?=.*\blitecoin\b)(?=.*\bethereum\b).*и
bitcoin
ethereum
- в определенном порядке, игнорировать регистр/filterrx
6. Любое из словссылка_на_источник
mustNotHave
(?i:.*.*
BitCoin
.*)
liTeCoin
/filterrx
.ссылка_на_источник
mustNotHave
.*bitcoin.*|.*litecoin.*|.*ethereum*
7. Правила можно сочетать. Например, любое из перечисленных слов, регистр не важен/filterrx
8. Слово на русском языкессылка_на_источник
mustNotHave
(?i:.*BitCoin
.*|.*liTeCoin
.*|.*EthereUm
.*)/filterrx
9. Любая ссылкассылка_на_источник
mustNotHave
.*([а-яА-Я]+).*/filterrx
10. Любое числоссылка_на_источник
mustNotHave .*(http:\/\/|https:\/\/).*/filterrx
11. Любой @юзернеймссылка_на_источник
mustNotHave .*([0-9]+).*/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.
Фильтрация по номеру автора — самый эффективный и удобный способ, мы рекомендуем использовать именно его. Но иногда требуется фильтровать по имени автора. Для фильтрации по имени автора сообщения, а не по его номеру, процедура чуть более сложная. Оставшаяся часть этой статьи посвящена этому более сложному способу.
- Сначала нужно включить в настройках пересылки отображение имени автора: Меню → Настройки перенаправлений → Выбрать источник и назначение → Автор
- Затем нужно добавить текстовый фильтр, содержкащий в качестве критерия имя автора
⏵Альтернативный способ настройки через команды
Предположим, @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 (Имярек)
Готово! Если повесить замену на первое перенаправление (из А в С), то она не будет влиять на имя автора. Имя автора, как и название канала источника, является сервисным текстом, не заменяется командой /replace
, и настравивается другими способами.
Фильтрация пересылаемых сообщений
C помощью Junction Bot можно фильтровать сообщения Telegram, которые были пересланы (forwarded) в канал источника. Допустим, @source — это канал-источник. Чтобы скопировать только оригинальные сообщения @source, но не сообщения, пересланные на @source из других каналов, сделайте следующее:
- Создайте новое правило пересылки с помощью команды
/new
- Включите копирование имен авторов командой
/settingchannel source_channel_reference header from_only
- Это добавит в начало пересылаемого сообщения фрагмент текста: «from » + название канала.
Настройте фильтр для названия канала, который вы хотите отфильтровать. Например, если пересылаемые сообщения приходят с канала с названием «Источник пересылок»/filter source_channel_reference mustNotHave from Источник пересылок
- Если вы хотите избавиться от постов, пересылаемых из любого другого канала, то вам понадобится немного другая команда:
/filter source_channel_reference mustNotHave from
Фильтрация с помощью ИИ
Вы можете описать любые критерии фильтрации в свободной форме и позволить ИИ автоматически фильтровать ваши сообщения. Интересно, что так можно фильтровать не только по тексту сообщения как таковому, но и по его смыслу и сантименту. Например, вы можете попросить ИИ пропускать только позитивные новости ☺️
Как это настроить, смотрите здесь.
Ручная фильтрация
Если вы хотите вручную решать, пропустить пост или отфильтровать, используйте режим ревью.
Как разобраться, почему фильтры не работают как я хочу?
Если не понятно, какой из фильтров сработал, используйте настройку explain:
Меню → Настройки перенаправлений → Выбрать источник и назначение → Explain-отчёт
На каждое новое сообщение она будет присылать отчет, подробно объясняющий, какие фильтры сработали и почему.
Если вы обращаетесь в поддержку с вопросом по фильтрам, пожалуйста, присылайте explain-отчёт и полный список ваших фильтров на источнике, полученный командой /filter ссылка_на_источник