Filtragem

No Junction Bot, você pode filtrar as mensagens recebidas do Telegram aplicando regras de filtragem. Você decide quais mensagens receberá e quais serão filtradas para que você não as veja (como anúncios, por exemplo).

Os filtros podem ser aplicados aos canais separadamente ou a todos os canais de uma só vez. Você pode combinar qualquer quantidade de filtros de qualquer tipo.

Recursos compatíveis: mustHave, mustNotHave, regex, filtragem por tipo de anexo e muito mais.

Observe que há um recurso de depuração muito útil, que pode lhe poupar muitas horas.

Comandos

/filter - cria um filtro (para 1 fonte) OU remove um filtro se inserido pela segunda vez. Combina com: 'mustHave', 'mustNotHave', 'every', tipo de anexo /filterrx - filtragem por regex (veja exemplos aqui) /filterall, /filterrxall - cria um filtro para todas as fontes /filter source_channel_reference - veja todos os filtros atuais aplicados a um canal

Se você tiver várias regras de encaminhamento da mesma origem para destinos diferentes, poderá definir configurações, filtros e substituições diferentes para destinos diferentes. Veja mais detalhes aqui.

filtros mustHave, mustNotHave

mustHave - você receberá apenas mensagens com um texto específico
Formato:  /filter source_channel_reference mustHave text to receive
Ex.  /filter https://t.me/junction_bot_news mustHave cool cats
Lembre-se de que o texto de um filtro se aplica como uma frase inteira, não como palavras separadas. Portanto, neste exemplo, você receberá todas as mensagens que contenham a frase exata "cool cats" (gatos legais). Não é necessário usar nenhum caractere de escape como aqui.

mustNotHave - filtra mensagens com um texto específico
Formato:  /filter source_channel_reference mustNotHave text to filter out
Ex.  /filter https://t.me/junction_bot_news mustNotHave old hats

Combinação de filtros

Vários filtros mustHave serão combinados com base na regra “OR”.

Vários filtros mustNotHave serão combinados com base na regra “AND”.

Observação: Não é possível combiná-los em um único comando. Use um comando separado para cada filtro.

Exemplos:
/filter source_channel_reference mustHave cats
/filter source_channel_reference mustHave kittens
Você receberá todas as mensagens que contenham a palavra "cats" (gatos) ou a palavra "kittens" (gatinhos)
/filter source_channel_reference mustNotHave dogs
/filter source_channel_reference mustNotHave puppies 
Você não receberá mensagens que contenham as palavras "cães" ou "filhotes

Filtragem por tipo de anexo do Telegram

Além disso, você pode filtrar as mensagens de mídia. Para isso, use uma das seguintes cadeias de caracteres como texto de filtro: <Foto>, documento <>, <áudio>, <vídeo>, <adesivo>, <voz>, <localização>, <animação>, <nota de vídeo>, <pesquisa>.

Exemplos:
/filter source_channel_reference mustHave <audio>  - você receberá apenas mensagens contendo anexos de áudio do canal
/filter source_channel_reference mustNotHave <photo>  - você não receberá nenhuma mensagem contendo imagens do canal

Filtragem avançada

Além disso, você pode usar expressões regulares (RegEx) para fazer a filtragem. Para isso, use o comando /filterrx. Ele tem o mesmo formato.

Aqui estão alguns exemplos comuns:
1. Interromper postagens com a palavra word em uma legenda para uma imagem
/filterrx source_channel_reference mustNotHave .*word.*<photo>.*
2. Duas palavras - word1 e word2 - em uma determinada ordem
/filterrx source_channel_reference mustNotHave .*word1.*word2.*
3. Duas palavras em qualquer ordem
/filterrx source_channel_reference mustNotHave (?=.*\bword1\b)(?=.*\bword2\b).*
5. Duas palavras em qualquer ordem, ignore o registro
/filterrx source_channel_reference mustNotHave (?i:.*wOrd1.*woRd2.*)
6. Qualquer palavra de um conjunto
/filterrx source_channel_reference mustNotHave .*word1.*|.*word2.*|.*word3.*
7. Você pode combiná-los. Por exemplo, qualquer uma das palavras, sem distinção entre maiúsculas e minúsculas
/filterrx source_channel_reference mustNotHave (?i:.*wOrd1.*|.*worD2.*|.*woRd3.*)
8. Qualquer palavra que contenha um alfabeto russo
/filterrx source_channel_reference mustNotHave .*([а-яА-Я]+).*
9. Qualquer link HTTP
/filterrx source_channel_reference mustNotHave .*(http:\/\/|https:\/\/).*
10. Qualquer número
/filterrx source_channel_reference mustNotHave .*([0-9]+).*
11. Qualquer @nomedeusuário
/filterrx source_channel_reference mustNotHave .*@([a-zA-Z0-9=&_\-]+).*

É importante entender o que é RegEx antes de usar esses filtros. Por exemplo, o filtro com a expressão regular word2 NÃO CORRESPONDE à mensagem word1 word2 word3, pois ela contém outras palavras além de word2. Lembre-se de adicionar .* em ambos os lados da palavra: .*palavra2.*

Observe uma nuance importante: ao filtrar, o bot pode adicionar um espaço e/ou um código de conteúdo de mídia no final do texto. Portanto, recomendamos que você sempre coloque .* no final de seus filtros RegEx.

Outro ponto importante: RegEx para filtros geralmente tem um .* no início e no final, porque você quer que a mensagem inteira se encaixe na expressão. Se você quiser usar uma expressão semelhante para substituições, provavelmente desejará remover .* (caso contrário, a substituição substituirá todo o texto da mensagem).

Há um instrumento muito conveniente para testar expressões regulares: https://regex101.com. Defina o Flavor como “Java 8” e defina o sinalizador “Linha única: O ponto corresponde à nova linha”. Isso fará com que ele funcione da mesma forma que o matcher do @junction_bot.

Ajuda com expressões regulares

As expressões regulares são um tópico vasto. A ajuda nessa área está além do escopo da administração do bot. Não escreva para os administradores em particular pedindo que eles criem uma regra de substituição ou um filtro para você. Além disso, a administração do bot não fornece esse tipo de ajuda no grupo de suporte.

A maneira mais fácil de criar uma expressão regular para suas necessidades é perguntar ao ChatGPT, pois ele é muito bom nisso.

Além disso, você pode procurar ajuda em fóruns apropriados. Por exemplo, StackOverflow ou CodeProject.

Definir um filtro para todas as suas fontes

Para adicionar um filtro a todas as suas fontes atuais, use o comando /filterall ou /filterrxall (para expressões regulares).

Observe que as novas regras de encaminhamento são sempre criadas com uma lista de filtros vazia. Você pode copiar filtros para eles a partir de uma fonte existente.

Por exemplo:
/filterrxall add mustNotHave .*(http:\/\/|https:\/\/).*

Esse comando adicionará a todas as suas fontes um filtro que interromperá qualquer mensagem que contenha um link.

Filtros de cópia

No Junction Bot, você pode copiar todos os filtros de um canal do Telegram para outro. Para fazer isso, use o seguinte formato de comando:

/filter channel_to_copy_filters_to addAllFrom channel_to_copy_filters_from

Remover filtros

Para remover um filtro, basta enviar o mesmo comando mais uma vez.

Para ver todos os filtros atuais aplicados a um canal, use o comando

/filter source_channel_reference

Para excluir todos os filtros de todos os seus canais, use o comando

/filterall DELETE ALL

Para filtros RegEx, use /filterrx e /filterrxall de forma correspondente.

Recebimento apenas da N-ésima mensagem

No Junction bot, você pode filtrar as mensagens do Telegram por frequência, de modo que apenas a n-ésima mensagem será copiada (no exemplo a seguir – a cada duas mensagens). Para fazer isso, use o seguinte formato de comando:

/filter source_channel_reference every 2

Filtragem por data e hora

O Junction bot pode filtrar as mensagens do Telegram dependendo da data e da hora em que elas chegam.

/filtertime source_channel_reference mustHave time interval

Conjuntos de intervalos de tempo:
– O intervalo em que as mensagens devem chegar para mustHave
– O intervalo em que as mensagens não devem chegar para mustNotHave

O intervalo de tempo pode conter o dia da semana, a hora e o fuso horário.

Dia da semana. Ele sempre começa com uma letra w e, em seguida, segue os números dos dias da semana (a partir de Mon).
Exemplo:

w135
Corresponde ao 1º, 3º e 5º dias da semana (seg, qua, sex)

w67
Corresponde aos 6º e 7º dias da semana (sáb, dom)

Tempo. A hora está sempre no formato 24h, um intervalo de – a (inclusive), horas:minutos.
Exemplos:
9:30-17:30
0:00-23:59

Fuso horário. Consulte a lista de fusos horários disponíveis aqui. Se você não mencionar explicitamente o fuso horário, ele será definido como CET – Horário da Europa Central (Amsterdã/Berlim/Praga/Viena)

Exemplos:

/filtertime source_channel_reference mustNotHave 0:00-7:00
As mensagens não serão enviadas da meia-noite às 7h da manhã no horário de Brasília.

/filtertime source_channel_reference mustHave w12345 8:00-20:00 America/New_York
As mensagens serão enviadas somente em dias úteis (de segunda a sexta), a partir das 8h e até as 20h, no horário de Nova York.

Para adicionar um filtro temporal a todas as suas fontes, você pode usar o comando /filtertimeall. Por exemplo:
/filtertimeall add mustNotHave 0:00-7:00
Para remover:
/filtertimeall remove mustNotHave 0:00-7:00

Filtrar por tópico em um grupo

Para definir um filtro de tópicos, use o seguinte comando:

/filtertopic source_channel_reference mustHave topicID

Para saber o número do tópico do grupo, use um link para qualquer postagem no tópico. O número no meio do link é o número do tópico. Por exemplo, se o link for https://t.me/publicchat/1723/36753, o número do tópico será 1723.

Exemplos:

/filtertopic source_channel_reference mustHave 1723
Permitir somente mensagens do tópico número 1723.

/filtertopic source_channel_reference mustNotHave 7231
Filtrar postagens do tópico número 7231.

Para copiar mensagens de diferentes tópicos na origem para diferentes canais de destino, primeiro crie as regras de encaminhamento necessárias da origem para o destino. Em seguida, para cada regra de encaminhamento específica, defina o filtro desejado com o comando /filtertopic seguindo estas instruções. Por exemplo, o comando pode ter a seguinte aparência:
/filtertopic &123456789#151617181->-1001222333444 mustHave 1723

Para copiar mensagens de tópicos na origem para os mesmos tópicos no destino, você precisa criar tópicos de destino manualmente. Em seguida, você precisa criar um canal intermediário para cada tópico. Para cada tópico, primeiro você configura a cópia para o canal intermediário com o filtro de tópico desejado. Em seguida, do canal intermediário até o destino com a configuração topic desejada.

Duplicatas

Em alguns casos, uma mensagem pode chegar até você várias vezes. Por exemplo, se você estiver inscrito em dois canais que encaminharam a mesma publicação. Para filtrar todas as mensagens idênticas do Telegram no Junction Bot, use o comando /setting duplicate. Ele funciona para mensagens idênticas dentro de um período de 24 horas entre o aparecimento delas.

/setting duplicate + uma das seguintes opções:

pass - desativado, permite duplicatas
Ex.  /setting duplicate pass

filtro - filtra mensagens duplicadas
Ex.  /setting duplicate filter

Para aplicar essa configuração a apenas um canal, substitua o comando /setting por /settingchannel source_channel_reference (leia mais).

Observe que o filtro de duplicatas compara as mensagens originais. Isso significa que, se você quiser evitar duplicatas no canal de destino, surgidas como resultado de suas regras de substituição, precisará usar uma abordagem um pouco mais complexa – por meio de um canal intermediário.

Suponha que precisemos redirecionar mensagens de A para B. Crie o canal C e configure um redirecionamento de A (origem) para C (intermediário). Aplique todas as suas regras de substituição ao canal A. Não é necessário criar um filtro duplicado para o canal A.

Em seguida, configure um redirecionamento de C (intermediário) para B (destino). Definimos uma regra de filtragem nesse redirecionamento (com o comando /settingchannel C duplicate filter ), que removerá todas as duplicatas, mesmo aquelas que apareceram como resultado de regras de substituição.

Pronto! Se você definisse um filtro de duplicatas para o primeiro redirecionamento (de A para C), isso não afetaria as duplicatas que apareceram como resultado das regras de substituição.

Modificação em massa de filtros

/filterall – esse comando adicionará esse filtro a todas as suas assinaturas e encaminhamentos. Observe que não existe um conjunto comum de filtros – não existe um conjunto de filtros aplicado a todas as regras. Há um conjunto de filtros por regra concreta de assinatura/encaminhamento.

O /filterall funciona com as mesmas combinações do /filter.

Em vez de source_channel, você define uma ação: adicionar ou remover.

/filterall add - adiciona um novo filtro a todos os canais.
Formato:  /filterall add [rule] text to receive
Ex.  /filterall add mustHave bitcoin  OU  /filterall add mustNotHave litecoin

/filterall remove - remove o filtro de todos os canais.
Formato:  /filterall remove [rule] text to filter out
Ex.  /filterall remove mustHave bitcoin  OU  /filterall remove mustNotHave litecoin

Altere o comando para /filterrxall para usar expressões regulares.

Uma fonte – muitos destinos

Se você tiver várias regras de encaminhamento para canais diferentes de uma origem e quiser definir um filtro somente para uma regra de origem-destino, siga esta instrução.

Adicione a seguinte construção à source_channel_reference: ->-1001251642436
Onde -1001251642436 é o identificador do canal de destino no sistema do Telegram acrescido do prefixo “-100” (é a forma como o Telegram distingue os números dos canais dos números de outros objetos). Para encontrar esse número é muito simples, basta pesquisar na Internet para obter instruções. Por exemplo, encaminhar uma mensagem do canal para o bot @junction_helper0_bot. Lá você verá o número do canal em forward_from_chat.id ou forward_from.id.
Assim, por exemplo, o comando de configuração pode ter a seguinte aparência:
/filter source_channel_reference->-1001251642436 mustHave cats

Filtragem de postagens de uma pessoa específica

Você pode fazer com que o Junction Bot filtre as mensagens do Telegram de um usuário específico. Digamos que @source seja o chat de origem. Para encaminhar apenas mensagens de @usuário, faça o seguinte:

  1. Crie uma nova regra de encaminhamento com o comando /new
  2. Ative a cópia dos nomes dos autores com o comando
    /settingchannel source_channel_reference author full
  3. Configure o filtro para o nome que você precisa com o comando
    /filter source_channel_reference mustHave user_reference
    Se você precisar que a mensagem seja de um usuário específico e, ao mesmo tempo, contenha um texto específico, precisará de um comando ligeiramente diferente:
    /filterrx source_channel_reference mustHave .*user_reference.*specific text.*

Na maioria dos casos, como user_reference , você pode usar o @username do usuário. Em alguns casos, isso não funcionará (por exemplo, se o usuário não tiver um nome de usuário público ou se o bot não tiver informações completas sobre ele). Nesse caso, você precisa ativar um relatório de explicação e ver como o usuário é referenciado na mensagem e, em seguida, usar essa string.

Com a configuração author , as mensagens resultantes conterão o nome do autor da mensagem. Às vezes, é necessário que o nome do autor não esteja presente. Isso exigirá um processo um pouco mais complexo, por meio de um canal intermediário.

Suponha que precisemos redirecionar mensagens de A para B. Crie o canal C e configure um redirecionamento de A (origem) para C (intermediário). Aplique as configurações das páginas 2 e 3 a ele:
/settingchannel A author full
/filter A mustHave @user

Em seguida, configure um redirecionamento de C (intermediário) para B (destino). Definimos uma regra de substituição nesse redirecionamento (com o comando /replace ), que removerá os nomes dos autores.
/replace B @user&nbsp;(User's&nbsp;name)

Pronto! Se você definir essa regra de substituição para o primeiro redirecionamento (de A para C), ela não afetará o nome do autor. O nome do autor, assim como o nome do canal de origem, é um texto de serviço e não é afetado pelo comando /replace, podendo ser ajustado de outras maneiras.

Filtragem de postagens encaminhadas

Você pode fazer com que o Junction Bot filtre as mensagens do Telegram que foram encaminhadas para um canal de origem. Digamos que @source seja o canal de origem. Para copiar somente as mensagens originais de @source, mas não as mensagens encaminhadas para @source de outros canais, faça o seguinte:

  1. Crie uma nova regra de encaminhamento com o comando /new
  2. Ative a cópia dos nomes dos autores com o comando
    /settingchannel source_channel_reference header from_only
    Ele adicionará no início da mensagem encaminhada um trecho de texto: “from ” + o nome do canal.
  3. Configure o filtro para o nome do canal que você deseja filtrar. Por exemplo, se as postagens encaminhadas vierem de um canal chamado “Fonte de encaminhamentos”
    /filter source_channel_reference mustNotHave from Source of forwards
    Se você quiser se livrar das mensagens encaminhadas de qualquer outro canal, precisará de um comando ligeiramente diferente:
    /filter source_channel_reference mustNotHave from

Filtragem de IA

Você pode descrever qualquer critério de filtragem de forma livre e deixar que a IA filtre automaticamente suas mensagens. O interessante é que, dessa forma, você pode filtrar não apenas pelo texto da mensagem em si, mas também por seu significado e sentimento. Por exemplo, você pode pedir à IA que deixe apenas notícias positivas em seu canal ☺️

Como configurar isso, veja aqui.

Filtragem manual

Se quiser ter controle manual sobre se as postagens devem ser copiadas ou ignoradas, use o modo de revisão.

Descobrir o que não está funcionando

Verifique quais são os filtros atuais e se eles estão corretos:

/filter source_channel_reference
/filterrx source_channel_reference

Se você configurar muitos filtros, pode ser difícil descobrir por que uma determinada mensagem está sendo transmitida ou não. Para ajudá-lo nessa tarefa, há uma configuração especial chamada explain. Você pode ativá-lo com o comando:

/settingchannel source_channel_reference explicar sobre

Se estiver ativado, você receberá um relatório para cada nova mensagem proveniente desse source_channel. O relatório explicará por que essa mensagem foi filtrada ou autorizada a passar.

Para desativar um modo de explicação, use o comando

/settingchannel source_channel_reference explain off