¿Qué son las funciones?¶
Las funciones te permiten realizar operaciones más avanzadas dentro de las expresiones. Estas se escriben de la siguiente manera:
función(argumento1, argumento2)
Los argumentos son los datos que le pasas a la función para que haga su trabajo, van entre paréntesis y separados por comas.
Todas las funciones de VisualMaker¶
min()¶
Devuelve el número más pequeño entre los argumentos proporcionados.
Argumentos: números (sín límite).
Ejemplos:
{min(5, 7, 2, 6.1, 3)}
➡️2
(el número más pequeño)
{min(-5, -10, 3, 0)}
➡️-10
(el menor considerando números negativos)
"El valor más bajo es {min(10, 20, 30)}"
➡️"El valor más bajo es 10"
max()¶
Devuelve el número más grande entre los argumentos proporcionados.
Argumentos: números (sín límite).
Ejemplos:
{max(5, 7, 2, 6.1, 3)}
➡️7
(el número más grande)
{max(100, 50, 75)}
➡️100
"El número mayor es {max(3.5, 8.2, 6.8)}"
➡️"El número mayor es 8.2"
round()¶
Redondea un número al entero más cercano o a una cantidad específica de decimales.
Argumento 1: número a redondear.
Argumento 2: (opcional) cantidad de decimales que debe tener el número redondeado.
Ejemplos:
{round(12.8649)}
➡️13
(redondea al entero más cercano)
{round(12.8649, 2)}
➡️12.86
(redondea a 2 decimales)
{round(0.44444, 3)}
➡️0.444
(redondea a 3 decimales)
"El valor aproximado es {round(7.5678, 1)}"
➡️"El valor aproximado es 7.6"
ceil()¶
Redondea un número hacia arriba, al entero más cercano.
Argumento 1: número.
Ejemplos:
{ceil(8.5649)}
➡️9
{ceil(-3.4)}
➡️-3
(el entero más cercano hacia arriba para números negativos)
"El número redondeado hacia arriba es {ceil(4.1)}"
➡️"El número redondeado hacia arriba es 5"
floor()¶
Redondea un número hacia abajo, al entero más cercano.
Argumento 1: número.
Ejemplos:
{floor(8.5649)}
➡️8
{floor(-3.4)}
➡️-4
(el entero más cercano hacia abajo para números negativos)
"El número redondeado hacia abajo es {floor(9.9)}"
➡️"El número redondeado hacia abajo es 9"
random()¶
Genera un número aleatorio entre dos valores. Si uno de los argumentos tiene más decimales, el resultado los respetará.
Argumento 1: valor mínimo.
Argumento 2: valor máximo.
Ejemplos:
{random(1, 10)}
➡️3
(aleatorio entre 1 y 10)
{random(1.001, 2)}
➡️1.329
(aleatorio entre 1.001 y 2, el número devuelto tendrá 3 decimales)
"El número aleatorio es {random(100, 200)}"
➡️"El número aleatorio es 152"
absolute()¶
Devuelve el valor absoluto de un número (remueve el signo negativo).
Argumento 1: número.
Ejemplos:
{absolute(-5)}
➡️5
{absolute(10)}
➡️10
"El valor absoluto de -3 es {absolute(-3)}"
➡️"El valor absoluto de -3 es 3"
pick_one()¶
Selecciona un elemento al azar de los argumentos proporcionados.
Argumento 1: cualquier tipo de dato (sin límite).
Ejemplos:
{pick_one(5, "texto", True, 16)}
➡️"texto"
(elegido al azar)
{pick_one("rojo", "verde", "azul")}
➡️"verde"
"El color elegido es {pick_one("rojo", "amarillo", "azul")}"
➡️"El color elegido es azul"
pick_by_index()¶
Selecciona un elemento de una lista, tupla o texto según su posición (índice).
Argumento 1: Lista, tupla o string.
Argumento 2: Índice (empieza desde 0).
Ejemplos:
{pick_by_index(("John", "Mary", 10), 0)}
➡️"John"
(elegido el índice0
, es el primero)
{pick_by_index(["John", "Mary", 10], 1)}
➡️"Mary"
(elegido el índice1
, es el segundo)
{pick_by_index("texto", 3)}
➡️"t"
(elegido el índice3
del texto, es el carácter número 4)
"El tercer elemento de la lista es {pick_by_index([5, 10, 15], 2)}"
➡️"El tercer elemento de la lista es 15"
Nota sobre índices: Los índices siempre empiezan desde 0
. Por ejemplo:
- En
("a", "b", "c")
, el índice0
es"a"
,1
es"b"
, y2
es"c"
startswith()¶
Devuelve True
si un texto comienza con un subtexto específico, en caso contrario devuelve False
.
Argumento 1: Texto principal.
Argumento 2: Subtexto a verificar.
Ejemplos:
{startswith("esto es un string", "esto")}
➡️True
(el texto empieza por"esto"
)
{startswith("mi bot", "el")}
➡️False
endswith()¶
Devuelve True
si un texto termina con un subtexto específico, en caso contrario devuelve False
.
Argumento 1: Texto principal.
Argumento 2: Subtexto a verificar.
Ejemplos:
{endswith("esto es un string", "ing")}
➡️True
(el texto termina en"ing"
)
{endswith("mi bot", "bot")}
➡️True
capitalize()¶
Convierte la primera letra del texto en mayúscula y el resto en minúscula.
Argumento 1: Texto a capitalizar.
Ejemplos:
{capitalize("juan")}
➡️"Juan"
{capitalize("HOLA")}
➡️"Hola"
"Texto capitalizado: {capitalize('texto a modificar')}"
➡️"Texto capitalizado: Texto a modificar"
capitalize_all()¶
Convierte la primera letra de cada palabra en mayúscula.
Argumento 1: Texto a capitalizar.
Ejemplo:
{capitalize_all("mi nombre es juan")}
➡️"Mi Nombre Es Juan"
{capitalize_all("aprendiendo expresiones")}
➡️"Aprendiendo Expresiones"
"Texto capitalizado completamente: {capitalize_all('hola desde telegram')}"
➡️"Texto capitalizado completamente: Hola Desde Telegram"
len()¶
Devuelve la longitud de un texto, lista o tupla.
Argumento 1: Texto, lista o tupla.
Ejemplos:
{len("esto es un string")}
➡️17
(tiene una longitud de 17 caracteres)
{len(["rojo", "verde", "azul"])}
➡️3
(la lista tiene 3 elementos)
{len(("a", "b", "c", "d"))}
➡️4
(la tupla tiene 4 elementos)
"La longitud del texto es: {len('VisualMaker')}"
➡️"La longitud del texto es: 11"
replace()¶
Eeemplaza todas las apariciones de un texto dentro de otro.
Argumento 1: Texto a reemplazar.
Argumento 2: Texto nuevo.
Argumento 3: Texto principal.
Ejemplos:
{replace("soleado", "lluvioso", "Hoy es un día soleado.")}
➡️"Hoy es un día lluvioso."
{replace("perro", "gato", "Mi perro es adorable.")}
➡️"Mi gato es adorable."
"Frase modificada: {replace('mañana', 'hoy', 'mañana será otro día')}"
➡️"Frase modificada: hoy será otro día"
slice()¶
Realiza un corte en un texto, devolviendo una porción específica.
Argumento 1: Texto principal.
Argumento 2: Índice de inicio (opcional, si se omite se comienza desde el inicio)
Argumento 3: Índice de fin (opcional, si se omite se finaliza al final)
Ejemplos:
{slice("Hola Mundo", 2, 6)}
➡️"la M"
{slice("VisualMaker es increible", 12)}
➡️"es increíble"
(desde el índice 12 hasta el final)
"Porción extraída: {slice('Cortando texto', 3, 9)}"
➡️"Porción extraída: tando"
is_inside()¶
Devuelve True
si un elemento está presente dentro de una lista, tupla o texto, devuelve False
si no está.
Argumento 1: Elemento a buscar.
Argumento 2: Lista, tupla o texto.
Ejemplos:
{is_inside("John", ("John", "Mary", 10))}
➡️True
("John"
SÍ está en la tupla)
{is_inside("Pablo", ["John", "Mary", 10])}
➡️False
("Pablo"
NO está en la lista)
{is_inside("ex", "texto")}
➡️True
("ex"
SÍ está dentro de "texto")
is_string()¶
Devuelve True
si el argumento es una cadena de texto (string), de lo contrario devuelve False
.
Argumento 1: Elemento a verificar.
{is_string("hello")}
➡️True
{is_string(123)}
➡️False
{is_string(True)}
➡️False
is_numeric()¶
Devuelve True
si el argumento es numérico, de lo contrario devuelve False
.
Argumento 1: Elemento a verificar.
Ejemplos:
{is_numeric(123)}
➡️True
{is_numeric("3.14")}
➡️True
{is_numeric("hello")}
➡️False
is_bool()¶
Devuelve True
si el argumento es un booleano, (True
o False
), de lo contrario devuelve False
.
Argumento 1: Objeto a verificar.
Ejemplos:
{is_bool(True)}
➡️True
{is_bool(False)}
➡️True
{is_bool("False")}
➡️False
("False"
está entre comillas, por lo que no es un booleano, sino un string)
to_string()¶
Convierte un objeto en su representación como cadena de texto (string).
Argumento 1: Objeto a convertir.
Ejemplos:
{to_string(123)}
➡️"123"
{to_string(True)}
➡️"True"
to_number()¶
Convierte un objeto en un número flotante.
Argumento 1: Objeto a convertir.
Ejemplo:
{to_number("3.14")}
➡️3.14
to_integer()¶
Convierte un objeto en un número entero.
Argumento 1: Objeto a convertir.
Ejemplos:
{to_integer(3.14)}
➡️3
{to_integer("10")}
➡️10
to_upper()¶
Convierte un texto a mayúsculas.
Argumento 1: Texto a convertir.
Ejemplo:
{to_upper("hola visualmaker")}
➡️"HOLA VISUALMAKER"
to_lower()¶
Convierte un texto a minúsculas.
Argumento 1: Texto a convertir.
Ejemplo:
{to_lower("HOLA VISUALMAKER")}
➡️"hola visualmaker"
fix()¶
Ajusta el número de decimales de un número. Remueve los ceros al final. Devuelve como un número.
Argumento 1: Número a ajustar, puede ser un string que represente un número.
Argumento 2: Número de decimales deseados.
Ejemplos:
{fix(3.141592653589793, 2)}
➡️3.14
{fix(10.124054, 4)}
➡️10.124
{fix("42.50000", 1)}
➡️42.5
hardfix()¶
Ajusta el número de decimales de un número. Se mantienen los ceros al final. Devuelve un valor numérico en formato de cadena de texto (string).
Argumento 1: Número a ajustar.
Argumento 2: Número de decimales deseados.
Ejemplos:
{hardfix(10.124054, 4)}
➡️"10.1240"
{hardfix(8.31, 8)}
➡️"8.31000000"
{hardfix("42", 2)}
➡️"42.00"
count()¶
Cuenta las apariciones de un subtexto dentro de un texto.
Argumento 1: Texto principal.
Argumento 2: Subtexto a contar.
Ejemplos:
{count("hello world", "o")}
➡️2
(o
aparece 2 veces)
{count("abababab", "ab")}
➡️4
(ab
aparece 4 veces)
{count("este es un ejemplo", "es")}
➡️2
find()¶
Devuelve la posición de la primera ocurrencia de un subtexto dentro del texto. Si no se encuentra, devuelve None
.
Argumento 1: Texto principal.
Argumento 2: Subtexto a buscar.
Ejemplo:
{find("hello world", "world")}
➡️6
{find("Visual Maker", "X")}
➡️None
condition()¶
Evalúa una condición y devuelve un valor basado en si es verdadera (True
) o falsa (False
).
Argumento 1: Condición a evaluar.
Argumento 2: Valor si es verdadera.
Argumento 3: Valor si es falsa.
Ejemplos:
{condition(5 > 3, "Verdadero", "Falso")}
➡️"Verdadero"
{condition(2 == 7, "Es verdadero", "Es falso")}
➡️"Es falso"
{condition(is_numeric(3.14), "Es número", "No es número")}
➡️"Es número"
"¿15 es mayor a 10? {condition(15 > 10, 'Sí', 'No')}"
➡️"¿15 es mayor a 10? Sí"
date_now()¶
Devuelve la fecha y hora actual en el horario UTC. No requiere argumentos.
Ejemplo:
{date_now()}
➡️"01-03-2024 00:07:48"
date_now_tz()¶
Devuelve la fecha y hora actual según la zona horaria configurada. No requiere argumentos.
Ejemplo:
{date_now_tz()}
➡️"01-03-2024 03:08:28"
apply_tz()¶
Aplica la zona horaria del bot a una fecha y hora.
Argumento 1: Fecha y hora.
Ejemplos:
{apply_tz("01-03-2024 00:07:48")}
➡️"01-03-2024 02:07:48"
(asumiendo que la zona horaria del bot es +2)
date_format()¶
Formatea una fecha y hora en un formato específico.
Argumento 1: Fecha y hora a formatear.
Argumento 2: Formato deseado (por defecto: "%d-%m-%Y %H:%M:%S").
Desglose
%d
: Día del mes (01-31).
%m
: Mes del año (01-12).
%Y
(mayúscula): Año (4 dígitos).
%y
(mínuscula): Año (2 dígitos).
%H
(mayúscula): Hora en formato de 24 horas (00-23).
%h
(mínuscula): Hora en formato de 12 horas (01-12).
%M
: Minutos (00-59).
%S
: Segundos (00-59).
%p
: Mostrar meríodo (AM y PM).
Ejemplos:
{date_format("01-03-2024 00:07:48", "%d/%m/%Y")}
➡️"01/03/2024"
{date_format("01-03-2024 00:07:48", "día %d, del mes %m, del año %Y")}
➡️"día 01, del mes 03, del año 2024"
{date_format("01-03-2024 00:07:48", "%h:%M %p")}
➡️"12:07 AM"
{date_format(date_joined, "%m-%y")}
➡️"03-24"
(de acuerdo a la fecha en la cual el usuario se unió al bot)
time_passed()¶
Calcula el tiempo transcurrido desde una fecha hasta el momento actual en una unidad específica, según el horario UTC.
Argumento 1: Fecha de inicio.
Argumento 2: (opcional) Unidad de tiempo (por defecto: 'seconds', pero también puede ser 'minutes', 'hours', o 'days').
Otras formas de medida
minutes: minute, m
seconds: second, s
hours: hour, h
days: day, d
Ejemplo:
{time_passed("29-02-2024", "days")}
➡️1.02588
(asumiendo que hoy es 01-03-2014)
time_left()¶
Calcula el tiempo restante hasta una fecha desde el momento actual en una unidad específica, según el horario UTC.
Argumento 1: Fecha de fin.
Argumento 2: (opcional) Unidad de tiempo (por defecto: 'seconds', pero también puede ser 'minutes', 'hours', o 'days').
Otras formas de medida
minutes: minute, m
seconds: second, s
hours: hour, h
days: day, d
Ejemplo:
{time_left("02-03-2024", "days")}
➡️0.97458
(asumiendo que hoy es 01-03-2014)
time_add()¶
Agrega una cantidad específica de tiempo a una fecha.
Argumento 1: Fecha inicial (string con formato `dd-mm-yyyy hh:mm:ss`).
Argumento 2: Cantidad de tiempo a agregar (número flotante).
Argumento 3: (opcional) Unidad de tiempo (por defecto: 'seconds', pero también puede ser 'minutes', 'hours', o 'days').
Otras formas de medida
minutes: minute, m
seconds: second, s
hours: hour, h
days: day, d
Ejemplos:
{time_add("01-03-2024 00:07:48", 30, "days")}
➡️"31-03-2024 00:07:48"
{time_add("01-03-2024 10:00:00", 2, "hours")}
➡️"01-03-2024 12:00:00"
.
{time_add("01-03-2024 00:00:00", 90, "minutes")}
➡️"01-03-2024 01:30:00"
.
"En 15 segundos será: {time_add(date_now(), 15, 's')}"
.
time_diff()¶
Calcula la diferencia entre dos fechas y la expresa en una unidad específica.
Argumento 1: Primera fecha (string con formato `dd-mm-yyyy hh:mm:ss`).
Argumento 2: Segunda fecha (string con formato `dd-mm-yyyy hh:mm:ss`).
Argumento 3: Unidad de tiempo (`seconds`, `minutes`, `hours`, `days`).
Otras formas de medida
minutes: minute, m
seconds: second, s
hours: hour, h
days: day, d
Ejemplos:
{time_diff("01-03-2024", "02-03-2024", "days")}
➡️1
{time_diff("02-03-2024", "01-03-2024", "days")}
➡️-1
progress_bar()¶
Genera una barra de progreso visual basada en un porcentaje dado.
Argumento 1: Porcentaje completado (número entre 0 y 100).
Argumento 2: Longitud total de la barra (número entero positivo).
Argumento 3: (opcional) Carácter para bloques completados (por defecto: `🟩`).
Argumento 4: (opcional) Carácter para bloques pendientes (por defecto: `⬜`)..
Ejemplos:
{progress_bar(30, 10)}
➡️🟩🟩🟩⬜️⬜️⬜️⬜️⬜️⬜️⬜️
{progress_bar(60, 10, "*", "-")}
➡️******----
urlencode()¶
Codifica caracteres especiales en una cadena según las reglas de URL.
Argumento 1: Cadena de texto (string) a codificar.
Argumento 2: (opcional) Caracteres considerados seguros (por defecto: `":/&=?"`).
Ejemplo:
{urlencode("https://www.example.com/search?q=visualmaker bot creator")}
➡️"https://www.example.com/search?q=visualmaker%20bot%20creator"
{urlencode("Hola Mundo")}
➡️"Hola%20Mundo"
urldecode()¶
Decodifica una cadena URL codificada.
Argumento 1: Cadena de texto (string) codificada.
Argumento 2: (opcional) Esquema de codificación (por defecto: `utf-8`).
Ejemplo:
{urldecode("https://www.example.com/search?q=visualmaker%20bot%20creator")}
➡️"https://www.example.com/search?q=visualmaker bot creator"
{urldecode("Hola%20Mundo")}
➡️"Hola Mundo"
loop()¶
Representa cursores como ref_list
(listado de referidos de un usuario) y bot_top_ref
(listado de los usuarios con más referidos del bot), y otros datos, en el formato deseado, con opciones de paginación. Esta función consume 3 ejecuciones con su uso.
Argumento 1: data, el cursor o los datos que se desean representar.
Argumento 2: text, una cadena de texto (string) en el formato deseado para la representación.
Argumento 3: (opcional) page, un número entero que indica la página desde la cual comenzar (por defecto: `0`, la primera página).
Argumento 4: (opcional) max_per_page, un número entero que indica el máximo de elementos a representar por página. (por defecto: `10` para cursores y 50 para otros tipos de datos).
Argumento 5: (opcional) values, una tupla de cadenas de texto (strings) que ayudan a mejorar la representación del texto.
Información
Puedes acceder a los detalles de cada usuario o elemento a través de item.(variable_nativa)
, vea las variables nativas aquí.
Lo que verás en los ejemplos como \n
, significa nueva línea
, es para representar al siguiente usuario debajo.
Ejemplos:
{loop(ref_list, '{item.first_name}\n', page=0)}
: Cadena de texto con los nombres de los 10 primeros referidos, empezando por la primera pagina.
{loop(ref_list, '{item.first_name}\n', page=1)}
: Cadena de texto con los nombres de los 10 primeros referidos, empezando por la primera pagina, empezando por la segunda pagina.
{loop(ref_list, '@{item.username}\n', max_per_page=3)}
: Cadena de texto con los 3 primeros usuarios referidos del usuario que ejecutó la función.
{loop(bot_top_ref, '{} {item.first_name} ({item.id}) - {item.ref_count} referidos\n', max_per_page=3, values=('1️⃣', '2️⃣', '3️⃣'))}
: Cadena de texto con los nombres y los ID entre paréntesis de los 3 usuarios con más referidos, además se formatea para darle un aspecto mas atractivo, mostrará algo similar a lo siguiente:1️⃣ John (1234567) - 85 referidos
2️⃣ Mary (2345678) - 62 referidos
3️⃣ Pedro (3456789) - 41 referidos
filter()¶
Filtra elementos de una lista o diccionario según una condición.
Argumento 1: Condición (cadena de texto).
Argumento 2: Lista o diccionario.
Ejemplos:
{filter('x > 5', [3, 7, 2, 9, 6, 1, 8])}
➡️[7, 9, 6, 8]
: Devuelve una lista con los elementos mayores que 5.
{filter("x % 2 == 0", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])}
➡️[2, 4, 6, 8, 10]
: Devuelve una lista con todos los números pares.
{filter('len(x) > 5', ['apple', 'banana', 'orange', 'strawberry', 'grape'])}
➡️['banana', 'orange', 'strawberry']
: Devuelve una lista con los elementos que tienen más de 5 caracteres.
{filter('x.edad > 25', {'Alice': {'edad': 30, 'genero': 'F'}, 'Bob': {'edad': 22, 'genero': 'M'}, 'Charlie': {'edad': 35, 'genero': 'M'}})}
➡️[{'edad': 30, 'genero': 'F'}, {'edad': 35, 'genero': 'M'}]
: Filtra un diccionario de personas para obtener las que tienen más de 25 años.
{filter('x.estado == True', {'123': {'nombre': 'John', 'estado': True}, '456': {'nombre': 'Mary', 'estado': False}, '789': {'nombre': 'Pedro', 'estado': True}})}
➡️[{'nombre': 'John', 'estado': True}, {'nombre': 'Pedro', 'estado': True}]
: Devuelve una lista con todos los diccionarios que tienenestado
comoTrue
.
reduce()¶
Reduce los elementos de una lista o diccionario a un único valor según una condición.
Argumento 1: Condición (cadena de texto).
Argumento 2: Lista o diccionario a reducir.
Ejemplos:
{reduce('x + y', [1, 2, 3, 4, 5])}
➡️15
: Devuelve la suma de todos los elementos de la lista.
{reduce('x + y', ['hello', ' ', 'world', '!'])}
➡️"hello world!"
: Reducir una lista de cadenas a su concatenación.
{reduce('max(x, y)', {'Alice': 25, 'Bob': 35, 'Charlie': 30})}
➡️35
: Determina la edad máxima.
{reduce('condition(x.estado == True, x, y)', {'123': {'nombre': 'John', 'estado': False}, '456': {'nombre': 'Mary', 'estado': True}})}
➡️{'nombre': 'Mary', 'estado': True}
: Devuelve el diccionario que tieneestado
comoTrue
.