Plantillas
Las plantillas sirven para personalizar los mensajes que aparecen en las incursiones y los anuncios. De esta forma, se pueden añadir algunos datos que por defecto no se muestran, como el PC máximo o los tipos de los Pokémon, se puede cambiar la disposición de los elementos existentes, o se puede añadir una imagen personalizable.
Plantillas de texto
Existen dos plantillas completamente independientes: la plantilla de incursiones, que se cambia con /raidtemplate
, y la de anuncios, que se cambia con /announcetemplate
. Además, las incursiones pueden tener contenido después de la lista de apuntados, que se puede poner con /raidfootertemplate
.
Al poner esos comandos sin argumentos, se muestra el código de la plantilla actual. Para cambiar una plantilla, se puede copiar y pegar ese código con las modificaciones deseadas. Por ejemplo:
/raidtemplate <b>{Pokemon}</b> Raid {{on <b>{weekday_day_month}</b> }}at {timewarn_icon_}<b>{raidtime}</b> in {gym_icon}{gym}<br>{{<em>Available from {opentime} to {endtime}</em><br>}}<em>Organized by </em>{organizer}{_edited_icon}{_refloated_icon}
Para volver a la plantilla por defecto, se debe poner un guión -
, de la siguiente forma:
/raidtemplate -
⚠️ ¿Te resulta todo muy confuso? Comienza poniendo el comando
/raidtemplate
y mira la plantilla actual de incursiones. Copia, pégala y haz una pequeña modificación. Poco a poco, vete probando cosas nuevas.
Plantillas predefinidas
Además de la plantilla que viene por defecto, hay algunas plantillas predefinidas adicionales. Para utilizarlas, se debe especificar su nombre en lugar de poner la plantilla completa. Por ejemplo:
/raidtemplate maxcp
/announcetemplate maxcp
Las plantillas predefinidas disponibles son las siguientes:
Nombre | Descripción |
---|---|
maxcp | Como la plantilla por defecto, pero muestra además el PC máximo del Pokémon. |
pokebattler | Como la plantilla por defecto, pero con un enlace a Pokébattler en el nombre del Pokémon. |
pokebattler_maxcp | La combinación de las dos plantillas anteriores: muestra el PC máximo y un enlace a Pokébattler en el nombre del Pokémon. |
Variables
En cualquier plantilla encontrarás texto entre corchetes {}
que son variables que posteriormente se reemplazarán por los datos de las incursiones y los anuncios. Por ejemplo, {gym}
se reemplaza por el nombre del gimnasio, con un enlace en caso de que se conozca la ubicación.
En esta lista se indican todas las variables disponibles. Algunas ya se utilizan en la plantilla por defecto o en alguna de las plantillas predefinidas, pero otras no. Por claridad, en la lista no aparecen los corchetes {}
.
Variable | Descripción | HTML |
---|---|---|
pokemon | El Pokémon o el huevo. | - |
pokemon_gameinfo | El Pokémon (con un enlace a su guía en Gameinfo) o el huevo. | Enlace |
pokemon_pokebattler | El Pokémon (con un enlace a su guía en Pokebattler) o el huevo. | Enlace |
pokemon_kingcasualbot | El Pokémon (con un enlace a su guía en KingCasualBot) o el huevo. | Enlace |
pokedexno | El número de la Pokédex, sólo disponible si el jefe está seleccionado | - |
tier | El nivel de la incursión, de forma numérica: 1 , 3 , 5 ; o mega o ex . | - |
expokemon_icon | El icono de EX solo si es un jefe de incursión EX. | - |
shinypokemon_icon | El icono de shiny solo si es un jefe de incursión que puede aparecer shiny. | - |
maxcp | El CP máximo a nivel 20. | - |
maxcp_boosted | El CP máximo a nivel 25. | - |
types | Los tipos del Pokémon (en iconos). | - |
types_text | Los tipos del Pokémon (en texto). | - |
type1 | El primer tipo del Pokémon | - |
type2 | El segundo tipo del Pokémon (si lo tiene) | - |
numtypes | El número de tipos del Pokémon (1 o 2) | - |
weatherboosts | Los climas que potencian al Pokémon (en iconos). | - |
weatherboosts_text | Los climas que potencian al Pokémon (en texto). | - |
numweatherboosts | El número de climas potenciados que tiene el Pokémon (1 o 2) | - |
x1weaknesses | Los tipos ante los que es débil el Pokémon (en iconos) | - |
x2weaknesses | Los tipos ante los que es doblemente débil el Pokémon (en iconos) | - |
x1weaknesses_text | Los tipos ante los que es débil el Pokémon (en texto, separados por comas) | - |
x2weaknesses_text | Los tipos ante los que es doblemente débil el Pokémon (en texto, separados por comas) | - |
numx1weaknesses | El número de tipos ante los que es débil el Pokémon | - |
numx2weaknesses | El número de tipos ante los que es doblemente débil el Pokémon | - |
gym | El gimnasio, con un enlace a la ubicación si se ha reconocido. | Enlace |
gym_icon | El icono de ubicación. | - |
exgym_icon | El icono de EX solo si es un gimnasio EX. | - |
zone | La zona o zonas del gimnasio. | - |
country | El país del entrenador que ha creado la incursión. Esto sirve para localizar las incursiones en grupos remotos que permiten crear incursiones de todo el mundo y hacerlas usando invitaciones. | - |
country_flag | El emoji con la bandera del país del entrenador que ha creado la incursión. | - |
countryregion | La región del país del entrenador que ha creado la incursión. Esto sirve para localizar con un poco más de precisión las incursiones en grupos remotos que permiten crear incursiones en áreas extensas, como en un país entero o varios países. | - |
announcer | Entrenador que ha creado un anuncio. | Enlace |
organizer | Entrenador que ha organizado una incursión. | Enlace |
weekday_day_month | Día de la semana, día y mes si la incursión no es hoy. | - |
weekday_day | Día de la semana y día si la incursión no es hoy. | - |
day_month | Día y mes si la incursión no es hoy. | - |
opentime | Hora a la que abre el huevo. Se puede forzar un 0 en la primera posición si la hora es de una única cifra añadiendo 0 al principio de la variable: 0opentime . | - |
lopentime | Hora a la que abre el huevo con un enlace a un conversor horario a hora local. Se puede forzar un 0 en la primera posición si la hora es de una única cifra añadiendo 0 después de la l del principio: l0opentime . | Enlace |
endtime | Hora a la que se va el jefe de incursión. Se puede forzar un 0 en la primera posición si la hora es de una única cifra añadiendo 0 al principio de la variable: 0endtime . | - |
lendtime | Hora a la que se va el jefe de incursión con un enlace a un conversor horario a hora local. Se puede forzar un 0 en la primera posición si la hora es de una única cifra añadiendo 0 después de la l del principio: l0endtime . | Enlace |
raidtime | Hora de la incursión. Se puede forzar un 0 en la primera posición si la hora es de una única cifra añadiendo 0 al principio de la variable: 0raidtime . | - |
lraidtime | Hora de la incursión con un enlace a un conversor horario a hora local. Se puede forzar un 0 en la primera posición si la hora es de una única cifra añadiendo 0 después de la l del principio: l0raidtime . | Enlace |
raidtime_europe/madrid | Hora de la incursión en otra zona horaria diferente a la configurada en el grupo, en este ejemplo la de Europe/Madrid . Se puede poner cualquier zona horaria válida de la IANA. Se debe configurar antes la zona horaria de tu grupo. Se puede forzar un 0 en la primera posición si la hora es de una única cifra añadiendo 0 al principio de la variable, por ejemplo, 0raidtime_europe/madrid . | - |
lraidtime_europe/madrid | Hora de la incursión en otra zona horaria diferente a la configurada en el grupo, en este ejemplo la de Europe/Madrid , con un enlace a un conversor horario a hora local. Se puede poner cualquier zona horaria válida de la IANA. Se debe configurar antes la zona horaria de tu grupo. Se puede forzar un 0 en la primera posición si la hora es de una única cifra añadiendo 0 después de la l del principio, por ejemplo, l0raidtime_europe/madrid . | - |
timewarn | Texto cierra pronto si la hora de organización de incursión está muy cerca de la hora de cierre. | - |
timewarn_icon | Icono ⚠️ si la hora de organización de incursión está muy cerca de la hora de cierre. | - |
minutesfromstart | El número de minutos entre la hora de apertura del huevo y la hora de la incursión. | - |
minutestoend | El número de minutos entre la hora de la incursión y la hora a la que desaparece el jefe de incursión. | - |
edited_icon | Icono 📝 si está editada. | - |
edited | Texto editada si está editada. | - |
refloated_icon | Icono 🎈 si está reflotada. | - |
refloated | Texto reflotada si está reflotada. | - |
note | Nota de texto añadida normalmente por un administrador o el organizador de la incursión. Si no se especifica en la plantilla, se añadirá automáticamente en el pie de la incursión en caso de añadir una nota. | - |
trainerscount | El texto con la cuenta de entrenadores apuntados y los correspondientes subtotales, según la configuración del grupo. Si no se especifica en la plantilla, se añadirá automáticamente justo encima de la lista de entrenadores apuntados. | - |
trainerscount_all | El número de inscritos totales (únicamente el número). También están disponibles trainerscount_notremote para los entrenadores presenciales, trainerscount_remote para los remotos (incluyendo a invitados), trainerscount_invited para los entrenadores invitados; y también trainerscount_valor , trainerscount_mystic y trainerscount_instinct en caso de que se tengan activados los +1 por equipos. | - |
trainerscount_pendinginvites | El número de entrenadores que están solicitando invitación y están esperando a que otro entrenador acepte invitarlos. | - |
Formato con HTML
Las plantillas se pueden formatear con HTML sencillo, con las restricciones de Telegram habituales:
- Las etiquetas válidas son
<i></i>
(cursiva),<b></b>
(negrita),<u></u>
(subrayado),<s></s>
(tachado),<code></code>
(texto de ancho fijo) y<a href=""></a>
(enlace). - Si quieres que se vean los caracteres
<
,>
y&
se deben usar las entidades<
,>
y&
. - Se puede poner, por ejemplo, texto en negrita y subrayado al mismo tiempo, anidando las etiquetas correctamente. Es decir
<u><b>bien</b></u>
es correcto, pero<u><b>mal</u></b>
no es correcto y no funcionará - Los saltos de línea deben indicarse con
<br>
. Se pueden separar los elementos poniendo varios seguidos, por ejemplo<br><br>
.
Recuerda que estás especificando código para la plantilla, y el formato que apliques directamente se ignorará. Es decir, si quieres que algo se muestre en negrita, debes ponerlo <b>de esta manera</b>
, pero no utilizar la opción de negrita integrada en Telegram.
Variantes de las variables
Para ayudar a construir mejores mensajes hay versiones de las variables con espacios al principio, con espacios al final, en mayúsculas… Estas son las variantes disponibles:
{VARIABLE}
: contiene{variable}
en mayúsculas.{Variable}
: contiene{variable}
forzando la primera letra mayúscula.{_variable}
: contiene{variable}
con un espacio al principio.{variable_}
: contiene{variable}
con un espacio al final.{_variable_}
: contiene{variable}
con un espacio al principio y al final.
Variantes de las variables con enlaces
Las variables que ponen Enlace en la columna HTML contienen enlaces. Es decir, {pokemon_gameinfo}
se mostrará como el nombre del Pokémon con un enlace a Gameinfo.
Este tipo de variables se pueden descomponer para mostrar de manera independiente solo el texto, añadiendo _text
al final, o solo la URL, añadiendo _link
al final.
Por ejemplo, la variable {pokemon_gameinfo_text}
contendrá el texto con el nombre del Pokémon y {pokemon_gameinfo_link}
contendrá la URL.
Bloques condicionales
Hay dos tipos de bloques condicionales, que permiten mostrar o esconder porciones de las plantillas según la situación.
Bloque condicional simple
Este bloque condicional más simple se escribe simplemente así: {{texto {variables} y más texto }}
.
En este caso, el contenido entre llaves dobles se mostrará únicamente si todas las variables que se utilizan dentro están definidas o son verdaderas.
Hay varios ejemplos de este tipo de bloque en la plantilla por defecto, donde solo se muestra una porción de texto si está definida la variable weekday_day_month
y otro si están definidas opentime
y endtime
.
Bloque condicional con condiciones
El otro tipo de bloque conditional permite usar condiciones complejas y se escribe así: [condiciones]{{texto {variables} y más texto}}
.
En este caso, el contenido entre llaves dobles se mostrará únicamente si las condiciones definidas entre []
resultan verdaderas. No importa si las variables dentro de las llaves dobles {{}}
no están definidas o son falsas, el contenido se muestra igualmente.
Las condiciones pueden ser simplemente variables como opentime
o isegg
. También pueden negarse poniendo una !
delante. Por ejemplo:
[opentime]{{<em>Abre entre {opentime} y {endtime}</em><br>}}
[!isegg]{{🐒 Incursión de <b>{pokemon_kingcasualbot} ({maxcp}/{maxcp_boosted})}}
Dentro de las condiciones pueden usarse comparadores matemáticos habituales: menor que <
, mayor que >
, igual que ==
, diferente que !=
, menor o igual que <=
y mayor o igual que >=
. Pueden usarse para comparar valores de variables contra valores arbitrarios, por ejemplo:
[opentime>20:00]{{🌚 ¡¡Ten cuidado, que se hace de noche!}}
[minutestoend<5]{{⛔️ ¡¡Hay muy poco tiempo para hacer la incursión, ponla un poco antes!!}}
[tier==ex]{{🎟 '¡Recuerda que necesitas un pase especial para poder hacer la incursión, no te apuntes si no lo tienes!}}
También pueden usarse las conjunciones lógicas: and &&
y or ||
. De esta forma puden unirse varias condiciones para hacer una más compleja, por ejemplo:
[isegg && minutesfromstart<10]{{<em>🥚🚫 Pueden salir varios Pokémon y has puesto la hora muy cerca de la hora de eclosión. Si puedes, cambia la hora para un poco para más tarde.}}
[raidispending && trainerscount_remote > 5]{{⛔️💌 <u>¡Prohibido invitar a nadie que no esté apuntado!</u> }}
En caso de usar más de dos condiciones y mezclar &&
y ||
, ten en cuenta que siempre se evalúan de izquierda a derecha y este orden de evaluación no puede alterarse.
Variables específicas para usar en los bloques condicionales
Todas las variables descritas en la tabla anterior pueden usarse como condiciones. En caso de que tengan un valor definido, la condición será verdadera. En caso de que no tengan un valor definido, la condición será falsa.
Además, hay algunas variables especialmente indicadas para utilizar como condiciones, que no imprimen nada aunque sean verdaderas:
Variable | Descripción |
---|---|
isegg | Verdadero si es un huevo. |
ispokemon | Verdadero si es un jefe de incursión. |
isannounce | Verdadero si es un anuncio de incursión sin organizar (para usar con las plantillas de imagen). |
israid | Verdadero si es una incursión organizada (para usar con las plantillas de imagen). |
istier5 | Verdadero si es un jefe o huevo de nivel 5. También disponible para el resto de niveles. |
hasforms | Verdadero si el Pokémon tiene definidas formas globalmente (una o más). |
has1type | Verdadero si el Pokémon tiene 1 único tipo. |
has2types | Verdadero si el Pokémon tiene 2 tipos. |
has1weatherboost | Verdadero si el Pokémon tiene 1 único clima potenciado. |
has2weatherboosts | Verdadero si el Pokémon tiene 2 climas potenciados. |
ismissingform | Verdadero si el Pokémon tiene definidas formas globalmente (una o más) pero no se ha escogido en la incursión. |
timenearopen | Verdadero si la hora de organización de incursión está a menos de 12 minutos de la hora de apertura. También disponibles timenearend , timefaropen , timefarend y timeverynearend (como timenearend pero a menos de 6 minutos). |
pendinginvites | Verdadero si hay peticiones de invitaciones pendientes de aceptar. |
maxjoined | Verdadero si se ha alcanzado el máximo de entrenadores presenciales configurados en el grupo. |
maxtotal | Verdadero si se ha alcanzado el máximo total de entrenadores configurados en el grupo. |
maxremote | Verdadero si se ha alcanzado el máximo de entrenadores remotos configurados en el grupo. |
maxinvited | Verdadero si se ha alcanzado el máximo de entrenadores invitados configurados en el grupo. |
maxgametotal | Verdadero si se ha superado el máximo total de entrenadores según límite en el juego, independientemente de la configuración del grupo. |
maxgameremote | Verdadero si se ha superado el máximo de entrenadores remotos según el límite en el juego, independientemente de la configuración del grupo. |
raidpending | Verdadero si la incursión todavía no se ha celebrado, o si se está celebrando pero no se ha cerrado manualmente, ni ha desaparecido el huevo, ni ha pasado un tiempo prudencial desde la hora marcada. |
raidended | Verdadero si la incursión se ha cerrado manualmente, o ha desaparecido el huevo, o ha pasado un tiempo prudencial desde la hora marcada. |
raidcancelled | Verdadero si la incursión se ha cancelado. |
pokemon_hatchable_canbeshiny1 | Si el Pokémon que puede salir del huevo en la posición 1 puede capturarse shiny (se pueden usar del 1 al 10, para usar con las plantillas de imagen). |
Plantillas de imagen
Las plantillas de imagen permiten añadir imágenes a las incursiones, que se pueden personalizar con información de cada incursión. Están desactivadas por defecto. Para activarlas o cambiarlas por otras, se utiliza el comando /imagetemplate
. Por ejemplo, para utilizar la plantilla default
:
/imagetemplate default
Para ver las plantillas disponibles o descargar la plantilla actual, utiliza /imagetemplate
sin parámetros. Para dejar de usar plantillas de imagen, utiliza el parámetro -
, es decir:
/imagetemplate -
Las plantillas de imagen también se pueden personalizar. Son archivos SVG con un tamaño de entre 600x300 píxeles y 600x400 píxeles. Dentro, contienen elementos de texto e imágenes que son interpretados y reemplazados por el bot por los datos reales de la incursión o el anuncio. Se recomienda utilizar Inkscape para editarlas (es necesario un ordenador con Linux, Windows o Mac).
Para comenzar a utilizar una plantilla personalizada, se debe enviar el archivo SVG de la plantilla al grupo, poniendo /imagetemplate
en la descripción.
Puedes empezar una plantilla de cero, pero lo más sencillo es comenzar cogiendo una plantilla preexistente y modificarla. Con el comando /imagetemplate
puedes descargar la plantilla de imagen actual y hacer modificaciones para después usarla como plantilla personalizada.
Si abres una plantilla, las imágenes enlazadas se mostrarán con un error al no existir el archivo referenciado (lee debajo la sección sobre imágenes). Para evitar esto, puedes descargar este pack de imágenes y descomprimirlo en el mismo directorio donde tengas la plantilla, lo que facilitará la edición al hacerte una mejor idea de cómo quedan las imágenes mientras editas.
Para interpretar los elementos de la plantilla se utilizan las propiedades id
, class
y algunas propiedades que comienzan por data-
, específicas para cada caso. Para poder ver y editar estas propiedades necesitas activar el editor XML de Inkscape. Habilítalo en el menú Editar » Visor XML….
Reemplazos en los elementos de texto
Los elementos de texto pueden interpretarse, como si fueran plantillas de texto normales. No se pueden utilizar condicionales de ningún tipo. Para que un elemento de texto se interprete, debe tener un class
llamado parsetext
.
Ten en cuenta que en las imágenes no se puede utilizar HTML, por lo que las variables que contienen enlaces mostrarán el código HTML. Por ejemplo, la variable {gym}
. Para evitar que se muestre el código HTML, puedes usar la variante de sólo texto, es decir, {gym_text}
.
Condicionales
Se pueden mostrar y esconder elementos completos utilizando los condicionales. Para que se interpreten los condicionales de un elemento, debe tener un class
llamado parseconditions
.
Las condiciones deben ponerse como valor de un atributo llamado data-conditions
. Pueden usarse todas las condiciones descritas en la sección de plantillas de texto, como por ejemplo isegg && minutestoend<10
.
Imágenes
En un archivo SVG se pueden incrustar (embed) imágenes o enlazar (link) imágenes externas. Si arrastras un archivo de imagen a Inkscape, debes decirle cuál de las dos cosas quieres hacer. Si quieres incluir una imagen propia (por ejemplo, una imagen de fondo, o el logotipo del grupo), querrás incrustarla. Por el contrario, si quieres que la imagen se sustituya por una de las disponibles en el bot, debes enlazarla.
El bot puede sustituir imágenes enlazadas para mostrar los Pokémon, los tipos de los Pokémon y algunas cosas más. Para especificar por qué imagen se desea sustituir, hay que especificar el identificador correcto en el atributio id
, según la siguiente tabla:
Id | Descripción | Relación |
---|---|---|
pokemon_img | Imagen del Pokémon o el huevo con un escalado más realista (según los sprites del juego) | 1:1 |
spokemon_img | Imagen del Pokémon o el huevo con un escalado alternativo menos realista pero más equilibrado, centrado completamente | 1:1 |
dspokemon_img | Imagen del Pokémon o el huevo con un escalado alternativo menos realista pero más equilibrado, centrado verticalmente abajo | 1:1 |
pokemon_img_shiny | Imagen del Pokémon o el huevo con un escalado más realista (según los sprites del juego) en su variante shiny | 1:1 |
spokemon_img_shiny | Imagen del Pokémon o el huevo con un escalado alternativo menos realista pero más equilibrado, centrado completamente, en su variante shiny | 1:1 |
dspokemon_img_shiny | Imagen del Pokémon o el huevo con un escalado alternativo menos realista pero más equilibrado, centrado verticalmente abajo, en su variante shiny | 1:1 |
pokemon_type1 | Icono del primer tipo del Pokémon | 1:1 |
pokemon_type2 | Icono del segundo tipo del Pokémon (si lo tuviese) | 1:1 |
pokemon_weatherboost1 | Icono del clima potenciado para el primer tipo del Pokémon | 1:1 |
pokemon_weatherboost2 | Icono del clima potenciado para el segundo tipo del Pokémon (si lo tuviese) | 1:1 |
pokemon_weatherboostw1 | Icono del clima potenciado para el primer tipo del Pokémon (en color blanco) | 1:1 |
pokemon_weatherboostw2 | Icono del clima potenciado para el segundo tipo del Pokémon (si lo tuviese, en color blanco) | 1:1 |
pokemon_x1weakness1 | Icono del tipo al que es débil el Pokémon en la posición 1 (se puede usar del 1 en adelante, hasta 7) | 1:1 |
pokemon_x2weakness1 | Icono del tipo al que es doblemente débil el Pokémon en la posición 1 (se puede usar un 1 o un 2) | 1:1 |
pokemon_hatchable1 | Imagen del Pokémon que puede salir del huevo en la posición 1 (se pueden usar del 1 al 10) | 1:1 |
spokemon_hatchable1 | Imagen del Pokémon que puede salir del huevo en la posición 1 (se pueden usar del 1 al 10) con un escalado alternativo menos realista pero más equilibrado, centrado completamente | 1:1 |
dspokemon_hatchable1 | Imagen del Pokémon que puede salir del huevo en la posición 1 (se pueden usar del 1 al 10) con un escalado alternativo menos realista pero más equilibrado, centrado verticalmente abajo | 1:1 |
country_img | Bandera del país de la ubicación de la incursión, similar al country_flag de las plantillas de texto. | 4:3 |
gym_img | Imagen del gimnasio (es necesario subirlas, lee la sección de imágenes de gimnasio) | 1:1 |
Si se define una imagen enlazada con uno de estos id
y la imagen no existe, se esconde automáticamente. Por ejemplo, si el Pokémon solo tiene un tipo pero se utilizan imágenes que hagan referencia al segundo tipo. Las imágenes enlazadas que no tengan ninguno de estos ids serán ignoradas y mostrarán errores en la plantilla.
Posición y tamaño del texto
Los elementos de texto se pueden reposicionar verticalmente o cambiar su tamaño en función de la longitud de su texto, para ayudar a acomodar el texto en las plantillas. Acomodar texto de longitud variable es complicado, y usando estas técnicas es difícil conseguir un resultado perfecto al utilizar tipos de letra de ancho variable, pero con un poco de prueba y error se pueden obtener buenos resultados.
Para cambiar el tamaño del tipo de letra en función de la longitud del texto, el elemento debe tener un class
llamado resizetext
. Se puede especificar la longitud a partir de la cual se va a redimensionar poniendo la longitud como valor de un atributo llamado data-resizetext-length
y el tamaño deseado en data-resizetext-size
. El tamaño debe especificarse con unidades y se aplicará en la propiedad CSS font-size
. Por ejemplo:
class: resizetext
data-resizetext-length: 30
data-resizetext-size: 8px
Para cambiar la posición vertical del texto en función de su longitud, el elemento debe tener un class
llamado movetext
. Se puede especificar la longitud a partir de la cual se va a reposicionar el texto poniendo la longitud como valor de un atributo llamado data-movetext-length
y el tamaño deseado en data-movetext-distance
. La distancia debe especificarse sin unidades y se aplicará como el atributo y
del elemento. Por ejemplo:
class: movetext
data-movetext-length: 25
data-movetext-distance: -5
Imágenes de gimnasio
Para que funcionen las imágenes de gimnasio, es necesario que el grupo tenga definida una hoja de cálculo y los gimnasios estén cargados. Una vez esté eso hecho, hay que obtener las imágenes y enviarlas por el grupo dentro de un archivo ZIP poniendo en el comentario el comando /gymimages
.
Las imágenes deben estar en formato JPEG y llamarse tal cual está puesto el nombre del gimnasio (primera columna) en la hoja de cálculo, con la extensión .jpg
o .jpeg
al final. Además, cada imagen no puede superar los 300kB de tamaño y el archivo ZIP no puede superar los 5MB. El archivo ZIP no debe contener subdirectorios: las imágenes deben estar todas en el directorio principal. Se procesan un máximo de 300 archivos, por lo que si tienes más gimnasios en tu grupo, tendrás que limitarte a 300 de ellos.
Las imágenes recibidas solo se aceptan si hay un gimnasio cargado previamente con ese nombre. Una vez aceptadas, se redimensionan y se cortan a un cuadrado centrado de 250x250 píxeles, independientemente del formato de imagen original.
Si se quiere subir más imágenes más tarde, hay que volver a enviarlas todas ya que, cada vez que se recibe un nuevo archivo ZIP, primero se borran todas las anteriores.
Limitaciones
Al contrario que ocurre con las plantillas de texto, las plantillas de imagen no se refrescan cada vez que se actualiza el mensaje, tan solo se actualizan cuando cambian datos básicos de la incursión, como: el Pokémon, hora, gimnasio, etc. Es por eso que en la plantilla de imagen no se deberían usar variables y condicionales que hagan referencia al número de entrenadores inscritos, ya que la imagen no se va a actualizar adecuadamente.
Los tipos de letra que pueden utilizarse son todos los incluidos en esta colección de Google Fonts. Si utilizas tipos de letra no soportados, se verán de manera incorrecta. Para solucionar esto, puedes convertir esos textos a paths. Esto no puede hacerse si pretendes que se interpreten variables dentro del texto, ya que al convertirlos a paths dejan de comportarse como textos.
Los ids de los elementos no pueden repetirse, por lo que al usar el atributo id
para especificar el tipo de imagen, no se puede poner la misma imagen enlazada dos veces en la misma plantilla. Para solucionar esto, puedes añadir barras bajas _
al final y el bot lo entenderá igual. Es decir, pokemon_img_
y pokemon_img__
funcionan igual que pokemon_img
.
Los mensajes con imagen tardan más en generarse, y según la carga del servidor esto puede significar problemas. Debes intentar utilizar plantillas lo más sencillas posible y, si incrustas imágenes, comprimirlas antes en un tamaño adecuado. Las plantillas de más de 400 elementos o de 2MB de tamaño son rechazadas automáticamente.
Los mensajes con imagen en Telegram tienen un máximo de 1024 caracteres, mientras que los mensajes normales tienen un máximo de 4096 caracteres. Con unas plantillas de texto no muy excesivas y un máximo de 20 apuntados por incursión no debería haber problema, pero si no limitas los apuntados en tu grupo o pones grandes textos en las plantillas, podrías alcanzar ese límite y la incursión dejaría de funcionar. Puedes copiar y pegar el texto de una incursión con muchos apuntados en alguna herramienta como charactercountonline.com para ver el número de caracteres que utilizas habitualmente. Ten en cuenta que, si pones información en la imagen, normalmente no querrás tenerla duplicada también en texto, por lo que puedes eliminar la información duplicada de las plantillas de texto para ahorrar caracteres.
Probar las plantillas
Para facilitar el desarrollo de plantillas, se pueden enviar los archivos SVG de las plantillas junto con la descripción /testimagetemplate
para probarlas por privado (no en un grupo). El bot renderizará la plantilla en varias situaciones diferentes para que puedas comprobar cómo queda y corregir errores.