Фильтры
С помощью правил фильтрации можно управлять входящими сообщениями: решать, какие сообщения вы хотите видеть, а какие нет (например, содержащие рекламу).
Можно применять фильтры ко всем источникам сразу или отдельно на канал. Можно использовать и сочетать любое количество правил фильтрации.
Где найти
Меню → Мои пересылки → Выбрать источник и назначение → Фильтры
Обратите внимение на функцию отладки фильтров, которая потенциально может сэкономить вам много часов.
⏵Альтернативный способ настройки через команды
/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.
Фильтрация по всем словоформам
Иногда бывает нужно пропускать сообщения, содержащие любую форму какого-либо слова. При этом если это слово встречается в составе других слов, то такие совпадиня считать не нужно.
Например, нас нужно пропускать все сообщения со словом “заявка” в любом склонении, но не пропускать сообщения со словом “подзаявка”.
- Для этого выпишем все склонения слова “заявка”: заявка, заявки, заявку, заявок.
- Поставим каждую форму в регулярное выражение \bслово\b, которое будет пропускать только слова, полностью сопадающие с этими формами, но не слова, содержащие эти формы: \bзаявка\b, \bзаявки\b, \bзаявку\b, \bзаявок\b.
- Добавим через Меню → Мои пересылки → Выбрать источник и назначение → Фильтры эти 4 🔍 регулярных фильтра, как это показано на картинке.

Готово! Теперь будут публиковаться только сообщения со словом “заявка” в любой форме. При этом сообщения с такими словами как “подзаявка” публиковаться не будут.
Если у вас набирается много фильтров, их удобнее собрать сначала в табличце, а затем импортаровать разом а систему, используя кнопку массового импорта.
Помощь по регулярным выражениям
Реглярные выражения – это общирная тема. Помощь в этой области выходит за рамки возможностей администрации бота. Пожалуйста, не пишите админам в личку с просьбой составить вам правило замены или фильтр. Также, администрация бота не предоставляет соответствующую помощь в чате поддержки.
Самый простой способ заполучить интересующее вас регулярное выражение – попросить 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 часов нет ни одного сообщения, то память фильтра сбрасывается.
Обратите внимание, что фильтр дубликатов сравнивает исходные сообщения. Это означает, что если вы хотите избежать дублирования в канале назначения, появившиеся в результате ваших правил замены, вам нужно использовать несколько более сложный подход – через промежуточный канал.
Предположим, нам нужно перенаправить сообщения от 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. Создаем пересылку в приложение
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:
Меню → Мои пересылки → Выбрать источник и назначение → Отчёт об обработке
На каждое новое сообщение она будет присылать отчет, подробно объясняющий, какие фильтры сработали и почему.
Если вы обращаетесь в поддержку с вопросом по фильтрам, пожалуйста, присылайте отчёт об обработке и полный список ваших фильтров на источнике, полученный командой /filter ссылка_на_источник