Filtrado

En Junction Bot puedes filtrar los mensajes entrantes de Telegram aplicando reglas de filtrado. Tú decides qué mensajes recibes y cuáles se filtrarán para que no los veas (como los anuncios, por ejemplo).

Los filtros pueden aplicarse a los canales por separado o a todos los canales a la vez. Puede combinar cualquier cantidad de filtros de cualquier tipo.

Funciones compatibles: mustHave, mustNotHave, regex, filtrado por tipo de archivo adjunto y muchas más.

Tenga en cuenta que existe una función de depuración muy útil, que puede ahorrarle muchas horas.

Comandos

/filtro - crea un filtro (para 1 fuente) O elimina un filtro si se introduce por segunda vez. Combina con: mustHave', 'mustNotHave', 'every', tipo de accesorio /filterrx - filtrado por regex (ver ejemplos aquí) /filterall, /filterrxall - crear un filtro para todas las fuentes /filtro_fuente_canal_referencia - ver todos los filtros actuales aplicados a un canal

Si tiene varias reglas de reenvío desde el mismo origen a diferentes destinos, puede establecer diferentes configuraciones, filtros y sustituciones para los distintos destinos. Más información aquí.

filtros mustHave, mustNotHave

mustHave - sólo recibirá mensajes con un texto específico
Formato:  /filter source_channel_reference mustHave text to receive
Ex.  /filter https://t.me/junction_bot_news mustHave cool cats
Recuerde que el texto de un filtro se aplica como una frase completa, no como palabras separadas. Así, en este ejemplo recibirá todos los mensajes que contengan la frase exacta "cool cats". No necesitas usar ningún carácter de escape como aquí.

mustNotHave - filtra los mensajes con un texto específico
Formato:  /filter source_channel_reference mustNotHave text to filter out
Ex.  /filter https://t.me/junction_bot_news mustNotHave old hats

Combinación de filtros

Se combinarán varios filtros mustHave basándose en la regla «OR».

Se combinarán varios filtros mustNotHave basándose en la regla «AND».

Nota: No se pueden combinar en un solo comando. Utilice un comando distinto para cada filtro.

Ejemplos:
/filter source_channel_reference mustHave cats
/filter source_channel_reference mustHave kittens
Recibirás todos los mensajes que contengan la palabra "gatos" o la palabra "gatitos".
/filter source_channel_reference mustNotHave dogs
/filter source_channel_reference mustNotHave puppies 
No recibirás mensajes que contengan las palabras "perros" o "cachorros".

Filtrado por tipo de archivo adjunto de Telegram

También puedes filtrar los mensajes de los medios de comunicación. Para ello, utilice una de las siguientes cadenas como texto de filtro: <foto>, <documento>, <audio>, <vídeo>, <pegatina>, <voz>, <ubicación>, <animación>, <videonote>, <encuesta>.

Ejemplos:
/filter source_channel_reference mustHave <audio>  - sólo recibirá mensajes que contengan archivos adjuntos de audio del canal
/filter source_channel_reference mustNotHave <photo>  - no recibirás mensajes con imágenes del canal

Filtrado avanzado

Además, puede utilizar expresiones regulares (RegEx) para realizar el filtrado. Para ello utilice el comando /filterrx. Tiene el mismo formato.

He aquí algunos ejemplos comunes:
1. Poner fin a los mensajes con una palabra word en un pie de foto para una imagen
/filterrx referencia_canal_fuente mustNotHave .*word.*<photo>.*
2. Dos palabras - word1 y word2 - en un orden determinado
/filterrx source_channel_reference mustNotHave .*word1.*word2.*
3. Dos palabras en cualquier orden
/filterrx referencia_canal_fuente mustNotHave (?=.*\bword1\b)(?=.*\bword2\b).*
5. Dos palabras en cualquier orden, ignorar el registro
/filterrx source_channel_reference mustNotHave (?i:.*wOrd1.*woRd2.*)
6. Cualquier palabra de un conjunto
/filterrx source_channel_reference mustNotHave .*word1.*|.*word2.*|.*word3.*
7. Puedes combinarlos. Por ejemplo, cualquiera de las palabras, sin distinguir mayúsculas de minúsculas
/filterrx referencia_canal_fuente mustNotHave (?i:.*wOrd1.*|.*worD2.*|.*woRd3.*)
8. Cualquier palabra que contenga un alfabeto ruso
/filterrx source_channel_reference mustNotHave .*([а-яА-Я]+).*
9. Cualquier enlace HTTP
/filterrx source_channel_reference mustNotHave .*(http:\/\/|https:\/\/).*
10. Cualquier número
/filterrx source_channel_reference mustNotHave .*([0-9]+).*
11. Cualquier @nombredeusuario
/filterrx source_channel_reference mustNotHave .*@([a-zA-Z0-9=&_\-]+).*

Es importante entender qué es RegEx antes de utilizar estos filtros. Por ejemplo, el filtro con la expresión regular palabra2 NO COINCIDE con el mensaje palabra1 palabra2 palabra3, ya que contiene palabras distintas de palabra2. Recuerde añadir .* a ambos lados de la palabra: .*palabra2.*

Tenga en cuenta un matiz importante: al filtrar, el bot puede añadir un espacio y/o un código de contenido multimedia al final del texto. Por lo tanto, le aconsejamos que ponga siempre .* al final de sus filtros RegEx.

Otro punto importante: RegEx para filtros suele tener un .* al principio y al final, porque quieres que todo el mensaje se ajuste a la expresión. Si desea utilizar una expresión similar para los reemplazos, probablemente desee eliminar .* (de lo contrario, el reemplazo sustituirá todo el texto del mensaje).

Existe un instrumento muy práctico para probar expresiones regulares: https://regex101.com. Ajuste el Flavor a «Java 8» y establezca la bandera «Línea única: El punto coincide con la nueva línea». Esto hará que funcione de la misma manera que el matcher de @junction_bot.

Ayuda con expresiones regulares

Las expresiones regulares son un tema muy amplio. La ayuda en este ámbito está fuera del alcance de la administración del bot. Por favor, no escribas a los administradores en privado pidiéndoles que te hagan una regla de sustitución o un filtro. Además, la administración del bot no proporciona este tipo de ayuda en el grupo de apoyo.

La forma más fácil de tener una expresión regular creada para sus necesidades es preguntar a ChatGPT, es bastante bueno en ello.

También puedes buscar ayuda en los foros adecuados. Por ejemplo, StackOverflow o CodeProject.

Establecer un filtro para todas las fuentes

Para añadir un filtro a todas las fuentes actuales, utilice el comando /filterall o /filterrxall (para expresiones regulares).

Tenga en cuenta que las nuevas reglas de reenvío se crean siempre con una lista de filtros vacía. Puede copiarles filtros desde una fuente existente.

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

Este comando añadirá a todas sus fuentes un filtro, que detendrá cualquier mensaje que contenga un enlace.

Filtros de copia

En Junction Bot puedes copiar todos los filtros de un canal de Telegram a otro. Para ello, utilice el siguiente formato de comando:

/filter channel_to_copy_filters_to addAllFrom channel_to_copy_filters_from

Quitar filtros

Para eliminar un filtro basta con enviar el mismo comando una vez más.

Para ver todos los filtros actuales aplicados a un canal utilice el comando

/filter source_channel_reference

Para eliminar todos los filtros de todos sus canales utilice el comando

/filterall DELETE ALL

Para los filtros RegEx utilice /filterrx y /filterrxall correspondientemente.

Recibir sólo el N-ésimo mensaje

En Junction bot puedes filtrar los mensajes de Telegram por frecuencia, de forma que sólo se copiará cada n-ésimo mensaje (en el siguiente ejemplo – cada segundo mensaje). Para ello, utilice el siguiente formato de comando:

/filter source_channel_reference every 2

Filtrado por fecha y hora

Junction bot puede filtrar Telegram de mensajes en función de la fecha y hora en que llegan.

/filtertime source_channel_reference mustHave time interval

Conjuntos de intervalos de tiempo:
– El intervalo en el que deben llegar los mensajes para mustHave
– El intervalo en el que no deben llegar mensajes para mustNotHave

El intervalo de tiempo puede contener el día de la semana, la hora y la zona horaria.

Día de la semana. Siempre empieza con una letra w y luego siguen los números de los días de la semana (empezando por lun).
Ejemplo:

w135
Corresponde a los días 1, 3 y 5 de la semana (lunes, miércoles y viernes).

w67
Corresponde a los días 6 y 7 de la semana (sábados y domingos).

La hora. La hora está siempre en formato 24h, un intervalo de – a (inclusive), horas:minutos.
Ejemplos:
9:30-17:30
0:00-23:59

Zona horaria. Consulte aquí la lista de zonas horarias disponibles. Si no menciona explícitamente la zona horaria, ésta se ajustará a CET – Central European Time (Amsterdam/Berlin/Praga/Viena).

Ejemplos:

/filtertime source_channel_reference mustNotHave 0:00-7:00
Los mensajes no llegarán desde medianoche hasta las 7 de la mañana en CET.

/filtertime source_channel_reference mustHave w12345 8:00-20:00 America/New_York
Los mensajes sólo llegarán en días laborables (de lunes a viernes) a partir de las 8 de la mañana y hasta las 8 de la tarde, hora de Nueva York.

Para añadir un filtro temporal a todas sus fuentes puede utilizar el comando /filtertimeall. Por ejemplo:
/filtertimeall add mustNotHave 0:00-7:00
Para quitar:
/filtertimeall remove mustNotHave 0:00-7:00

Filtrar por temas en un grupo

Para establecer un filtro de temas utilice el siguiente comando:

/filtertopic source_channel_reference mustHave topicID

Para averiguar el número de tema del grupo, haz clic en cualquier mensaje del tema. El número que aparece en el centro del enlace es el número del tema. Por ejemplo, si el enlace es https://t.me/publicchat/1723/36753, el número de tema es 1723.

Ejemplos:

/filtertopic source_channel_reference mustHave 1723
Permitir sólo mensajes del tema número 1723.

/filtertopic source_channel_reference mustNotHave 7231
Filtra los mensajes del tema número 7231.

Para copiar mensajes de diferentes temas en el origen a diferentes canales de destino, cree primero las reglas de reenvío necesarias del origen al destino. A continuación, para cada regla de reenvío específica, configure el filtro deseado con el comando /filtertopic siguiendo estas instrucciones. Por ejemplo, el comando podría tener este aspecto:
/filtertopic &123456789#151617181->-1001222333444 mustHave 1723

Para copiar mensajes de temas en el origen a los mismos temas en el destino, es necesario crear temas de destino manualmente. Luego hay que crear un canal intermedio para cada tema. Para cada tema, primero se configura la copia al canal intermedio con el filtro de temas deseado. A continuación, desde el canal intermedio hasta el destino con la configuración topic deseada.

Duplicados

En algunos casos, un mismo mensaje puede llegarle varias veces. Por ejemplo, si estás suscrito a dos canales que han reenviado la misma publicación. Para filtrar todos los mensajes idénticos de Telegram en Junction Bot utiliza el comando /setting duplicate. Funciona para mensajes idénticos en un plazo de 24 horas entre su aparición.

/configuración duplicada + una de las siguientes opciones:

pass - desactivado, permite duplicados
Ex.  /setting duplicate pass

filtro - filtra los mensajes duplicados
Ex.  /setting duplicate filter

Para aplicar este ajuste a un solo canal, sustituya el comando /setting por /settingchannel source_channel_reference (más información).

Tenga en cuenta que el filtro de duplicados compara los mensajes originales. Significa que si quiere evitar duplicados en el canal de destino, aparecidos como resultado de sus reglas de sustitución, necesita utilizar un enfoque algo más complejo: a través de un canal intermedio.

Supongamos que necesitamos redirigir mensajes de A a B. Crea el canal C y configura una redirección de A (origen) a C (intermedio). Aplique todas sus reglas de sustitución al canal A. No necesita crear un filtro duplicado para el canal A.

A continuación, configure una redirección de C (intermedio) a B (destino). Establecemos una regla de filtrado en esta redirección (con el comando /settingchannel C duplicate filter ), que eliminará todos los duplicados, incluso los que aparecieron como resultado de reglas de sustitución.

¡Hecho! Si estableciera un filtro de duplicados para la primera redirección (de A a C), entonces no afectaría a los duplicados que aparecieran como resultado de las reglas de sustitución.

Modificación masiva de filtros

/filterall – este comando añadirá este filtro a todas sus suscripciones y reenvíos. Tenga en cuenta que no existe un conjunto común de filtros: no existe un conjunto de filtros que se aplique a todas las normas. Existe un conjunto de filtros por suscripción / regla de reenvío concreta.

/filterall funciona con las mismas combinaciones que /filter.

En lugar de source_channel se establece una acción: añadir o eliminar.

/filterall add - añade un nuevo filtro a todos los canales.
Formato:  /filterall add [rule] text to receive
Ex.  /filterall add mustHave bitcoin O /filterall add mustNotHave litecoin

/filterall remove - elimina el filtro de todos los canales.
Formato:  /filterall remove [rule] text to filter out
Ex.  /filterall remove mustHave bitcoin O /filterall remove mustNotHave litecoin

Cambie el comando a /filterrxall para utilizar expresiones regulares.

Una fuente, muchos destinos

Si tienes varias reglas de reenvío a diferentes canales desde un mismo origen y quieres establecer un filtro a una sola regla origen-destino, sigue estas instrucciones.

Añada la siguiente construcción a source_channel_reference: ->-1001251642436
Donde -1001251642436 es el identificador del canal de destino en el sistema de Telegram más el prefijo «-100» (es la forma en que Telegram distingue los números si son canales de los números de otros objetos). Encontrar este número es muy sencillo, busque las instrucciones en Internet. Por ejemplo, reenviar un mensaje del canal al bot @junction_helper0_bot. Allí verás el número de canal en forward_from_chat.id o forward_from.id.
Así, por ejemplo, el comando de configuración podría tener este aspecto:
/filter source_channel_reference->-1001251642436 mustHave cats

Filtrar los mensajes de una persona concreta

Puedes hacer que Junction Bot filtre los mensajes de Telegram de un usuario específico. Digamos que @source es el chat de origen. Para reenviar sólo mensajes de @usuario haga lo siguiente:

  1. Cree una nueva regla de reenvío con el comando /new
  2. Active la copia de los nombres de los autores con el comando
    /settingchannel source_channel_reference author full
  3. Configure el filtro para el nombre que necesita con el comando
    /filter source_channel_reference mustHave user_reference
    Si necesitas que el mensaje sea de un usuario específico y que al mismo tiempo contenga un texto específico, entonces necesitas un comando ligeramente diferente:
    /filterrx source_channel_reference mustHave .*user_reference.*specific text.*

En la mayoría de los casos como user_reference se puede utilizar el @username del usuario. En algunos casos no funcionará (por ejemplo, si el usuario no tiene un nombre de usuario público o el bot no tiene información completa sobre él). En este caso, es necesario activar un informe de explicación y ver cómo se hace referencia al usuario en el mensaje y, a continuación, utilizar esta cadena.

Con la configuración author los mensajes resultantes contendrán el nombre del autor del mensaje. A veces es necesario que no figure el nombre del autor. Esto requerirá un proceso algo más complejo, a través de un canal intermedio.

Supongamos que necesitamos redirigir mensajes de A a B. Crea el canal C y configura una redirección de A (origen) a C (intermedio). Aplícale los ajustes de las pp 2 y 3:
/settingchannel A author full
/filter A mustHave @user

A continuación, configure una redirección de C (intermedio) a B (destino). Establecemos una regla de sustitución en esta redirección (con el comando /replace ), que eliminará los nombres de los autores.
/replace B @user&nbsp;(User's&nbsp;name)

¡Hecho! Si establece esta regla de sustitución para la primera redirección (de A a C), no afectará al nombre del autor. El nombre del autor, al igual que el nombre del canal de origen, es un texto de servicio y no se ve afectado por el comando /replace, pudiendo ajustarse de otras formas.

Filtrado de mensajes reenviados

Puedes hacer que Junction Bot filtre los mensajes de Telegram, que fueron reenviados a un canal de origen. Digamos que @source es el canal de origen. Para copiar sólo los mensajes originales @fuente, pero no los mensajes reenviados a @fuente desde otros canales, haga lo siguiente:

  1. Cree una nueva regla de reenvío con el comando /new
  2. Active la copia de los nombres de los autores con el comando
    /settingchannel source_channel_reference header from_only
    Añadirá al principio del mensaje reenviado un texto «de» + el nombre del canal.
  3. Configure el filtro para el nombre del canal que desea filtrar. Por ejemplo, si los mensajes reenviados proceden de un canal denominado «Fuente de los reenvíos»
    /filter source_channel_reference mustNotHave from Source of forwards
    Si quieres deshacerte de los mensajes reenviados desde cualquier otro canal, entonces necesitas un comando ligeramente diferente:
    /filter source_channel_reference mustNotHave from

Filtrado de IA

Puede describir cualquier criterio de filtrado de forma libre y dejar que la IA filtre automáticamente sus mensajes. Curiosamente, de esta forma puedes filtrar no sólo por el texto del mensaje como tal, sino también por su significado y sentimiento. Por ejemplo, puedes pedirle a la IA que sólo deje noticias positivas en tu canal ☺️

Cómo configurar esto, ver aquí.

Filtrado manual

Si desea controlar manualmente si las entradas deben copiarse u omitirse, utilice el modo de revisión.

Descubrir lo que no funciona

Compruebe cuáles son los filtros actuales y que son correctos:

/filter source_channel_reference
/filterrx source_channel_reference

Si configuras muchos filtros, puede ser difícil averiguar por qué un determinado mensaje está pasando o por qué no. Para ayudarte en eso hay un ajuste especial llamado explicar. Puedes activarlo con el comando

/settingchannel source_channel_reference explicar en

Si está activada, recibirá un informe por cada nuevo mensaje procedente de este source_channel. El informe explicará por qué este mensaje se filtra o se deja pasar.

Para desactivar un modo de explicación, utilice el comando

/settingchannel source_channel_reference explicar off