Замены и другие модификации

Вы можете гибко настраивать сообщения, публикуемые ботом. Для этого есть несколько основных команд: /setting, /settingchannel и /replace.

Команда /setting применяет изменения ко всем имеющимся исходным каналам. Команда /settingchannel применяет изменения только к одному источнику. Команда /replace создает правило замены для одного источника.

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

Изменение заголовка

С помощью команды /setting header можно настраивать отображение заголовка (названия канала) в подписках и перенаправлениях.

/setting header + одна из следующих опций

none - не показывать заголовок
Пример: /setting header none

bold - показывать название источника (из которого сообщение пересылается)
Пример: /setting header bold

from_only - показывать название изначального источника (если таковой есть)
Пример: /setting header from_only

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

Изменение ссылки на оригинал

С помощью команды /setting link можно настроить отображение подписи в конце сообщения, добавляемой ботом, со ссылкой на оригинальное сообщение.

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

/setting link + одна из следующих опций

none - не добавлять ссылку
Пример: /setting link none

full - добавить полную ссылку
Пример: /setting link full

любой текст - поместить ссылку под этот текст
Пример: /setting link Канал о котиках

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

Изменения тела сообщения c Before & After

С помощью настроек /setting before и /setting after можно добавить текст до или после текста сообщения.

Чтобы добавить текст из нескольких строк, в конце каждой строки ставьте тег <br>.

/setting before - добавить текст перед текстом сообщения.
Формат: /setting before мой текст
Пример: /setting before Вот что я слышал:<br>
Обратите внимание, что если не поставить тег <br>, текст оригинального сообщения будет начинаться на той же строке, что и ваш текст.

/setting before none - убрать текст перед сообщением.

/setting after - добавить текст после текста сообщения.
Формат: /setting after мой текст
Пример: /setting after <br>Все вопросы пишите на  support@mail.com
Обратите внимание, что если не поставить тег <br> в начале, ваш текст будет начинаться на той же строке, что и оригинальный текст.

/setting after none - убрать текст после сообщения.

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

Этой настройкой вы можете, например, добавить к каждому сообщению ссылку на свой сайт:
/settingchannel @имя_канала_источника after <br><a href="https://docs.junction.space/">Мой сайт</a>

Изменения тела сообщения c Replace

Вы можете установить правило автозамены, которое заменит текст A во входящих сообщениях текстом Б (или пустой строкой, если не указывать текст Б). Используйте команду /replace.

Важно учитывать следующие замены:

  • вместо пробелов между словами ставьте &nbsp;
  • в местах переноса строки ставьте <br>

Это можно легко сделать с помощью функции «Найти и заменить» в большинстве текстовых редакторов.

Команды

/replace - заменить текст А на текст Б, а также удалить это правило, если ввести команду повторно. Формат: /replace @source_channel текст&nbsp;который&nbsp;надо&nbsp;заменить новый&nbsp;текст Пример: /replace @имя_канала Быть&nbsp;или&nbsp;не&nbsp;быть (цитата) - заменит все тексты из указанного канала, совпадающие с "Быть или не быть" на фразу "(цитата)" Пример: /replace @имя_канала Это&nbsp;реклама - удалит все фразы "Это реклама" в сообщениях, приходящих из указанного канала. /replacerx - создать правило замены с помощью регулярных выражений. Формат аналогичен формату команды /replace. /replace @имя_канала - посмотреть все правила замены в @канале /replacerx @имя_канала - посмотреть все правила замены с помощью регулярных выражений для @канала.

Что можно использовать в качестве @имени_канала? Читайте тут!

Обратите внимание, что команды /replace и /replacerx работают только с телом сообщения, не меняя заголовок (название канала) или ссылку на исходное сообщение.

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

Замена с использованием регулярных выражений

Кроме того, вы можете использовать регулярные выражения для замены. Для этого используйте команду /replacerx. У нее такой же формат, как и у /replace.

Есть удобный инструмент для проверки регулярных выражений: https://regex101.com. Установите Flavor на «golang» и отметьте флаги «Single line: Dot matches the new line» и «Global: Don’t return after first match». Это заставит его работать так же, как у Junction Bot.

Полезные примеры замен

Когда отлаживаешь регулярное выражение

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

1. Заголовок с названием исходного канала, добавленный ботом, можно удалить командой
/setting header none
2. Ссылку на исходный пост, добавленную ботом, можно удалить командой
/setting link none
3. Конкретные ссылки из тела сообщения можно удалить командой
/replace @source <a&nbsp;href="https://конкретная-ссылка">текст&nbsp;этой&nbsp;ссылки</a>
Во всех сообщениях из канала @source она заменит все именно такие ссылки на пустую строку.
4. Удалить вообще все ссылки в теле сообщения, если они передаются форматированием, можно командой
/replacerx @source <a[^<]+</a>
5. Если ссылки в теле сообщения передаются просто текстом, их можно убрать командой
/replacerx @source (http:\/\/|https:\/\/)([a-zA-Z0-9.\/\?=&_]+)
6. Убрать только ссылки, содержащие только t.me, можно командой
/replacerx @source (http:\/\/|https:\/\/)(t.me)([a-zA-Z0-9.\/\?=&_]+)
Во всех сообщениях из канала @source она заменит все ссылки на пустую строку.
7. Убрать ссылки-юзернеймы вида @username
/replacerx @source @([a-zA-Z0-9=&_]+)
8. Убрать весь кусок сообщения, начинающийся со слова «Postscriptum»
/replacerx @source Postscriptum.*
9. Превратить кусок текста «кусок текста» в ссылку на https://docs.junction.space/
/replace @source кусок&nbsp;текста <a&nbsp;href="https://docs.junction.space/">кусок&nbsp;текста</a>
10. Убрать из сообщения все номера формата №12345
/replacerx @source №([0-9]+)
11. Удалить текст из подписей ко всем картинкам (пересылать только картинки)
/replacerx @source .*<photo>
12. Удалить все строки, содержащие слово keyword
/replacerx @source .*\bkeyword\b.*

Продвинутый пример

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

Buy BTC/USD
Stop-Loss at 11000
Take-Profit 1 at 11500
Take-Profit 2 at 11700
Take-Profit 3 at 12000

Мы хотим привести такие сообщения к формату:

BUY
#BTC/USD
SL: 11000 points
TP: 12000 points
Trade at your own risk!

Предположим, что мы уже настроили перенаправление командой /new. Также предположим, что мы используем прямое подключение и номер канала-источника: &1234567890#1122334455. Узнать этот номер можно командой /forwards. Если у вас Стандартный аккаунт, используйте во всех примерах вместо &1234567890#1122334455 ссылку на канал, например https://t.me/joinchat/AFjgGGiosdgJGgSDG.

Итак, заменяем Buy с пробелом на BUY, перевод строки и #:
/replace &1234567890#1122334455 Buy&nbsp; BUY<br>#
Первый аргумент — наш источник &1234567890#1122334455.
Второй — что нужно зменить. Обратите внимание, что для команд /replace и /replacerx пробелы указываются символами &nbsp;
Третий аргумент — на что заменять. Перевод строки указывается символами <br>

Далее похожая замена: Stop-Loss at заменяем на SL:
/replace &1234567890#1122334455 Stop-Loss&nbsp;at SL:

Следующая команда будет сложнее. Нам нужно убрать две строки Take-Profit 1 и Take-Profit 2 и вместо них добавить к предыдущей строке SL слово points. Для этого воспользуемся командой /replacerx, которая позволяет работать с регулярными выражениями.
/replacerx &1234567890#1122334455 \nTake-Profit&nbsp;1.*\n points<br>
В регулярных выражениях \n соответсвует переводу строки, а .* соответствует любой комбинации символов. Таким образом \nTake-Profit&nbsp;1.*\n соответсвует Take-Profit 1 вместе с переводом строки до него, ценой после (какой бы она ни была) и переводом строки после цены. Посколку мы захватыаем здесь два перевода строки, мы должны компенисровать это, прибывив <br> к слову points.

Затем заменяем строку Take-Profit 2 с ценой и Take-Profit 3 на TP:
/replacerx &1234567890#1122334455 Take-Profit&nbsp;2.*Take-Profit&nbsp;3 TP:

И, наконец, прибавляем в конце слово points и строчку Trade at your own risk! Для этого воспользуемся настройкой after, прибавляющей к каждому сообщению в конце заданный текст.
/settingchannel &1234567890#1122334455 after points<br>Trade at your own risk!

FAQ

В первую очередь проверьте, какие у вас правила стоят на источнике командами
/replace ссылка-на-источник
и
/replacerx ссылка-на-источник

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

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