Rich Presence +

Ayudantes

Cualquier script puede llamar a estas funciones, sin importar ni pedir nada. Sus nombres están tomados: un script que declara su propia función o variable format, icon o cualquier otra de ellas no carga, y el error nombra el ayudante.

Ayudante Da
t(key, values) El texto de key en el idioma de la persona.
cut(text, max) Un texto lo bastante corto para Discord.
parseUrl(address) Las partes de una dirección.
bestPage(pages) La página que importa cuando coinciden varias.
playback(player, receivedAt) Si un video suena y su barra de progreso.
parseTime(text) Un texto de reloj en segundos.
progress(current, duration, now) La barra de progreso para una posición y una duración.
rotate(items, seconds, now) Una de varias cosas, por turnos.
format(template, values) Un texto que escribió la persona, completado.
icon(name) Una imagen chica para reproducir, pausa y similares.
console.log(...) Una línea en el bloque Consola de la página Desarrollo.

t(key, values)#

El texto de key en locales/<idioma>.json, con cada {name} completado desde values.

t("by", { name: "Manu" });   // "De Manu"

Una clave que falta en el idioma de la persona sale de en.json. Una que falta también ahí da la clave misma. Mirá Opciones e idiomas.

cut(text, max)#

Acorta un texto a max caracteres, 128 por defecto, que es el límite de Discord.

cut("Un título muy largo", 10);   // "Un título…"

Devuelve null cuando text no es un texto.

parseUrl(address)#

Separa una dirección. Una presencia no tiene la clase URL.

parseUrl("https://a.com/watch?v=1");   // { host: "a.com", path: "/watch", query: { v: "1" } }

Devuelve null cuando no es una dirección.

bestPage(pages)#

Elige cuando coinciden varias pestañas: la que suena, después una con reproductor, después la primera. Busca el valor llamado player, así que usá ese nombre para un extractor media.

const page = bestPage(context.pages);
if (!page) return null;

Devuelve null cuando pages está vacía.

playback(player, receivedAt)#

Convierte el valor de un extractor media en { playing, start, end }. Pasá page.received_at como receivedAt, así la barra cuenta desde que se leyó la página.

return { title, ...playback(page.values.player, page.received_at) };

En pausa, playing es false y start y end son null, así que la barra desaparece sola. Cuando no se conoce la duración, solo end es null y el tiempo cuenta hacia arriba. La velocidad del reproductor cuenta: a 2x, un video de 4 minutos termina en 2.

parseTime(text)#

Lee 1:02:03, 4:05 o 30 como segundos.

parseTime("1:02:03");   // 3723

Devuelve null cuando el texto no es una hora.

progress(current, duration, now)#

El { start, end } que dibuja una barra en current segundos de duration, para context.now. Sirve cuando un sitio muestra el tiempo como texto en vez de un reproductor.

const bar = progress(parseTime("4:05"), parseTime("10:00"), context.now);

rotate(items, seconds, now)#

Da uno de items, y el siguiente cada seconds segundos de now. Los vacíos (null, undefined, "") se saltean, así que los valores que pueden faltar entran como están.

state: rotate([video.channel, t("views", { count: video.views })], 30, context.now),

El cambio se ve cuando la presencia vuelve a leer, así que un seconds menor que interval del manifiesto no cambia nada. Menos de 1 cuenta como 30.

Devuelve null cuando ningún elemento tiene valor.

format(template, values)#

Completa un texto que la persona escribió en una opción, como {title} - {channel}, con values. Un valor null o que falta no deja nada, y un separador (-, |, ,, :, /) que queda al principio o al final se va con él. Un nombre que no está en values queda como está escrito, así se nota un error de tipeo.

const line = format(context.options.line, { title: video.title, channel: video.channel });
format("{title} - {channel}", { title: "Un paseo", channel: null });   // "Un paseo"

Usá t para los textos que escribís vos, y format para los que escribe la persona.

Devuelve null cuando no queda nada, o cuando template no es un texto.

icon(name)#

La dirección de una imagen chica que puede usar cualquier presencia, sea cual sea su aplicación de Discord. Discord muestra small_image como un círculo en la esquina de la imagen grande.

name Muestra
play Un triángulo
pause Dos barras
stop Un cuadrado
live Un punto rojo
repeat Dos flechas en círculo
repeat-one El círculo con un 1
shuffle Dos flechas cruzadas
small_image: icon(video.playing ? "play" : "pause"),
small_text: video.playing ? t("playing") : t("paused"),

Devuelve null para un nombre que no está en la tabla.

console.log(…)#

Escribe una línea en el bloque Consola de la página Desarrollo. Los objetos se escriben como JSON. console.warn y console.error funcionan igual y marcan la línea. La página guarda las últimas 200 líneas, 50 por llamada, de hasta 500 caracteres cada una.

Editar esta página en GitHub