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