Channel
ReferenciaCrea una referencia de canal a partir de un ID de Discord.
Channel(channelId: String): ChannelReference
- Devuelve:
ChannelReference- Parámetros:
- channelId
String(ID de Discord (17 a 20 dígitos))
Channel("123456789012345678")Todo lo que necesitás para escribir comandos personalizados a mano. Si solo querés mandar un mensaje, una tarjeta o dar un rol, el modo simple lo hace sin código.
Un comando personalizado es un pequeño programa que el bot ejecuta cuando alguien escribe un texto en tu servidor, por ejemplo !hola. El lenguaje se parece a JavaScript, pero es mucho más chico: tiene solo lo necesario para mandar mensajes y tarjetas, consultar miembros y dar roles.
ReplyMessage({
message: "¡Hola! Soy el bot de este servidor",
})El comando se activa cuando un mensaje contiene su texto de activación. Si el comando usa menciones, el texto puede ir antes o después de la mención:
!darrol @Serez Dev @Serez Dev !darrol
Distingue mayúsculas y minúsculas. Si varios comandos coinciden, se ejecuta el de texto más largo. Las menciones de roles, @everyone y @here no cuentan como menciones de miembros.
Un programa tiene una o más instrucciones, normalmente una por línea. El punto y coma es opcional; el formatter lo quita.
const role = Role("371826690424569866")
const member = GetMember("123456789012345678")Los saltos de línea dentro de paréntesis, objetos y arrays no terminan la instrucción, así que podés repartir una llamada larga en varias líneas.
Los nombres distinguen mayúsculas: GetMember existe, getMember no.
// Comentario de una línea
/*
* Comentario de varias líneas.
* No pueden anidarse.
*/
ReplyMessage({
message: "Hola",
})Con comillas dobles o simples; el formatter las pasa a dobles. Para unir textos se usa +.
const first = "Hola"
const second = 'Mundo'
const greeting = first + ", " + second| Escritura | Resultado |
|---|---|
\n | Salto de línea |
\t | Tabulación |
\" | Comilla doble |
\' | Comilla simple |
\\ | Barra invertida |
\uFFFF | Carácter Unicode (cuatro dígitos hexadecimales) |
const attempts = 0
const average = 4.5
const offset = -5
const enabled = true
const nothing = nullNo hay notación exponencial (1e6). null representa la ausencia de un valor.
Las propiedades van sin comillas. La coma final es válida y recomendada.
const card = {
title: "Panel informativo",
description: "Contenido del panel",
}
SendEmbed(card)Los elementos se leen por posición, empezando en cero.
const roleIds = ["371826690424569866", "371826690424569867"]
AddRole(GetAuthor(), Role(roleIds[0]))let crea una variable que se puede cambiar; const, una que no. Las dos necesitan un valor inicial.
let attempts = 0
attempts += 1
attempts++
const message = "Hola"const message = "Hola"
message = "Otro mensaje"Una variable existe solo dentro del bloque { } donde se declaró.
Un objeto guardado en una const sí puede cambiar sus propiedades; lo que no se puede es reemplazarlo entero:
const config = {
message: "Mensaje inicial",
}
config.message = "Mensaje actualizado"
SendMessage(config)Las propiedades se leen con punto o con corchetes, y se pueden encadenar.
const author = GetAuthor()
ReplyMessage({
message: "Hola, " + author.displayName + ". Tu ID es " + author.id,
})| Operadores | Uso |
|---|---|
+ - * / % | Aritmética. + también une textos (dos textos o dos números). |
=== !== | Igualdad estricta. No existen == ni !=. |
< <= > >= | Comparación entre dos números o dos textos. |
&& || ! | Lógicos, solo con valores verdadero o falso. |
= += -= | Asignación. |
++ -- | Sumar o restar 1 a una variable numérica. |
( ) | Agrupar para cambiar el orden de evaluación. |
Los paréntesis y las llaves son obligatorios.
const author = GetAuthor()
const role = Role("371826690424569866")
if (author.bot) {
ReplyMessage({
message: "Los bots no pueden usar este comando",
})
} else if (HasRole(author, role)) {
ReplyMessage({
message: "Ya tenés el rol",
})
} else {
AddRole(author, role)
}GetAuthor() devuelve a quien escribió el comando. GetMentionedMember() devuelve al primer miembro mencionado y GetMentionedMembers(), a todos. Las tres siempre devuelven un valor, así que se usan directamente.
AddRole(GetMentionedMember(), Role("371826690424569866"))
ReplyMessage({
message: "Rol entregado",
})GetMentionedMember o GetMentionedMembers en cualquier parte, aunque sea dentro de un if, el comando exige una mención. Sin ella, el bot responde con un error y no ejecuta nada, así que un comando nunca queda hecho a medias.GetMember("id") puede devolver null si la persona no está en el servidor. Antes de usar el resultado hay que descartarlo; dentro del if, el editor ya sabe que existe.
const member = GetMember("123456789012345678")
if (member === null) {
ReplyMessage({
message: "No se encontró el miembro",
})
} else {
AddRole(member, Role("371826690424569866"))
}const member = GetMember("123456789012345678")
AddRole(member, Role("371826690424569866"))null tiene que ser la condición completa del if. Si además necesitás otra condición, anidá los if en vez de unirlas con &&.El único bucle es for...of: recorre una lista. continue pasa al siguiente elemento y break termina el recorrido.
for (const member of GetMentionedMembers()) {
if (member.bot) {
continue
}
AddRole(member, Role("371826690424569866"))
}let found = false
for (const member of GetMembers()) {
if (member.id === "123456789012345678") {
found = true
break
}
}
if (found) {
ReplyMessage({
message: "Miembro encontrado",
})
}Los IDs de canales, roles y usuarios se escriben como texto, entre comillas, y tienen entre 17 y 20 dígitos. Para copiar un ID en Discord, activá el modo desarrollador y usá «Copiar ID».
SendMessage({
channel: Channel("123456789012345678"),
message: "Anuncio",
})Channel(123456789012345678)Estas son todas las funciones disponibles. Los nombres se escriben exactamente así.
Crea una referencia controlada a partir de un identificador.
Crea una referencia de canal a partir de un ID de Discord.
Channel(channelId: String): ChannelReference
ChannelReferenceString (ID de Discord (17 a 20 dígitos))Channel("123456789012345678")Crea una referencia de rol a partir de un ID de Discord.
Role(roleId: String): RoleReference
RoleReferenceString (ID de Discord (17 a 20 dígitos))Role("371826690424569866")Obtiene un valor controlado para utilizar dentro del programa.
Obtiene un miembro mediante su ID. Puede devolver null.
GetMember(userId: String): Member | Null
Member | Null — puede ser null: descartalo antes de usarlo.String (ID de Discord (17 a 20 dígitos))const member = GetMember("123456789012345678")const member = GetMember("123456789012345678")
if (member !== null) {
ReplyMessage({ message: member.displayName })
}Obtiene una colección de miembros disponibles.
GetMembers(): Array<Member>
Array<Member>const members = GetMembers()Obtiene el miembro que escribió el mensaje que activó el comando.
GetAuthor(): Member
Memberconst author = GetAuthor()AddRole(GetAuthor(), Role("371826690424569866"))Obtiene el primer miembro mencionado en el mensaje, según el orden del texto. Ignora menciones de roles, @everyone, @here y usuarios que no pertenecen al servidor. El comando exige una mención: si el mensaje no menciona a ningún miembro, no se ejecuta.
GetMentionedMember(): Member
Memberconst target = GetMentionedMember()AddRole(GetMentionedMember(), Role("371826690424569866"))Obtiene todos los miembros mencionados en el orden del texto, sin duplicados. Ignora menciones de roles, @everyone, @here y usuarios que no pertenecen al servidor. El comando exige una mención: si el mensaje no menciona a ningún miembro, no se ejecuta, por lo que el array nunca está vacío.
GetMentionedMembers(): Array<Member>
Array<Member>const members = GetMentionedMembers()for (const member of GetMentionedMembers()) {
AddRole(member, Role("371826690424569866"))
}Indica si un miembro contiene la referencia de rol indicada.
HasRole(member: Member, role: RoleReference): Boolean
BooleanMember, role RoleReferenceHasRole(member, Role("371826690424569866"))Representa una acción disponible en el lenguaje.
Solicita agregar un rol a un miembro.
AddRole(member: Member, role: RoleReference): Void
VoidMember, role RoleReferenceAddRole(member, Role("371826690424569866"))Envía un mensaje al canal indicado o al canal actual cuando channel se omite.
SendMessage(config: SendMessageConfig): Void
VoidSendMessageConfigSendMessage({ message: "Hola" })SendMessage({ channel: Channel("123456789012345678"), message: "Hola" })Responde con texto al mensaje que originó el comando.
ReplyMessage(config: ReplyMessageConfig): Void
VoidReplyMessageConfigReplyMessage({ message: "Rol agregado" })Envía un embed al canal indicado o al canal actual cuando channel se omite.
SendEmbed(config: SendEmbedConfig): Void
VoidSendEmbedConfigSendEmbed({ description: "Información" })SendEmbed({ image: "https://example.com/banner.png" })SendEmbed({ channel: Channel("123456789012345678"), message: "Aviso", title: "Novedad", image: "https://example.com/banner.png" })Responde al mensaje de origen con un embed.
ReplyEmbed(config: ReplyEmbedConfig): Void
VoidReplyEmbedConfigReplyEmbed({ description: "Contenido de la respuesta" })ReplyEmbed({ image: "https://example.com/banner.png" })Los devuelven las funciones y son de solo lectura: se pueden leer, pero no modificar.
| Propiedad | Tipo | Obligatoria | Reglas |
|---|---|---|---|
| id | String | Sí | ID de Discord (17 a 20 dígitos) · Solo lectura |
| Propiedad | Tipo | Obligatoria | Reglas |
|---|---|---|---|
| id | String | Sí | ID de Discord (17 a 20 dígitos) · Solo lectura |
| Propiedad | Tipo | Obligatoria | Reglas |
|---|---|---|---|
| id | String | Sí | ID de Discord (17 a 20 dígitos) · Solo lectura |
| displayName | String | Sí | Solo lectura |
| bot | Boolean | Sí | Solo lectura |
| roles | Array<RoleReference> | Sí | Solo lectura |
Son los objetos que reciben SendMessage, SendEmbed y las demás acciones. Solo admiten las propiedades de la tabla. Los colores usan el formato #RRGGBB y los enlaces tienen que empezar con http:// o https://.
| Propiedad | Tipo | Obligatoria | Reglas |
|---|---|---|---|
| name | String | Sí | 1 a 256 caracteres |
| icon | String | No | 1 a 2048 caracteres · URL http:// o https:// |
| url | String | No | 1 a 2048 caracteres · URL http:// o https:// |
| Propiedad | Tipo | Obligatoria | Reglas |
|---|---|---|---|
| channel | ChannelReference | No | — |
| message | String | Sí | 1 a 2000 caracteres |
| Propiedad | Tipo | Obligatoria | Reglas |
|---|---|---|---|
| message | String | Sí | 1 a 2000 caracteres |
Requiere al menos una de: titledescriptioncolorurlimageauthorfooter
| Propiedad | Tipo | Obligatoria | Reglas |
|---|---|---|---|
| channel | ChannelReference | No | — |
| message | String | No | 1 a 2000 caracteres |
| title | String | No | 1 a 256 caracteres |
| description | String | No | 1 a 4096 caracteres |
| color | String | No | Color #RRGGBB |
| url | String | No | 1 a 2048 caracteres · URL http:// o https:// |
| image | String | No | 1 a 2048 caracteres · URL http:// o https:// |
| author | EmbedAuthor | No | — |
| footer | EmbedFooter | No | — |
Requiere al menos una de: titledescriptioncolorurlimageauthorfooter
| Propiedad | Tipo | Obligatoria | Reglas |
|---|---|---|---|
| message | String | No | 1 a 2000 caracteres |
| title | String | No | 1 a 256 caracteres |
| description | String | No | 1 a 4096 caracteres |
| color | String | No | Color #RRGGBB |
| url | String | No | 1 a 2048 caracteres · URL http:// o https:// |
| image | String | No | 1 a 2048 caracteres · URL http:// o https:// |
| author | EmbedAuthor | No | — |
| footer | EmbedFooter | No | — |
SendMessage({
channel: Channel("123456789012345678"),
message: "El evento comienza en diez minutos",
})SendEmbed({
title: "Actualización",
description: "Se publicó una nueva versión",
color: "#5865F2",
image: "https://example.com/release.png",
footer: {
text: "Servidor oficial",
},
})const author = GetAuthor()
const role = Role("371826690424569866")
if (HasRole(author, role)) {
ReplyMessage({
message: "Ya tenés el rol",
})
} else {
AddRole(author, role)
ReplyMessage({
message: "Rol agregado",
})
}Discord muestra como mención cualquier texto con la forma <@ID>. Se arma uniendo el ID con +. Funciona en el mensaje y en la descripción de una tarjeta. En el modo simple es lo mismo que escribir {autor} o {mencionado}.
AddRole(GetMentionedMember(), Role("371826690424569866"))
ReplyMessage({
message: "<@" + GetAuthor().id + "> le dio el rol a <@" + GetMentionedMember().id + ">",
})La autorización se comprueba sobre quien escribe (GetAuthor()), nunca sobre la persona mencionada.
if (HasRole(GetAuthor(), Role("111111111111111111"))) {
AddRole(GetMentionedMember(), Role("371826690424569866"))
} else {
ReplyMessage({
message: "No tenés permiso para usar este comando",
})
}El editor marca estos errores mientras escribís. Debajo de cada ejemplo está el mensaje exacto que vas a ver.
SendMessage({
"message": "Hola",
})message y channel no cuentan como contenido de la tarjeta.
SendEmbed({
message: "Solo texto externo",
})SendEmbed({
title: "Hola",
thumbnail: "https://example.com/icon.png",
})sendMessage({
message: "Hola",
})const same = 1 == 1const greeting = `Hola ${name}`El botón Formatear del editor (o Shift+Alt+F) ordena el código con estas reglas, sin cambiar lo que hace ni borrar comentarios: