Antes de empezar
Repositorio GitHub:
¡El hackathon termina pronto y estamos regalando más de $ 1K en premios! Únase a nosotros para construir un proyecto genial y ganar cualquiera de los siguientes premios. 🏆
Courier Hacks 1er lugar: la mejor presentación para uso de notificaciones y demostración de notificaciones adecuadas de aplicación a usuario con la API de Courier recibirá $ 1000 a través de Zelle o PayPal.
Courier Hacks 2do lugar: la presentación del 2do lugar para su uso en notificaciones y demostración de notificaciones adecuadas de aplicación a usuario con la API de Courier recibirá el Apple AirPods Pro.
Favorito del público: el ganador del favorito del público recibirá un teclado Keychron.
Finalistas: las presentaciones de los finalistas recibirán un Hydro Flask.
¡Además, todos los que envíen un proyecto que integre con éxito la API de Courier recibirán una tarjeta de regalo de Amazon de $20! Las inscripciones cierran el 28 de septiembre . Regístrese ahora para enviar este proyecto y tener la oportunidad de ganar algunos premios geniales.
Regístrese para el Hackathon:
¿No estás seguro por dónde empezar? En este tutorial, crearemos un bot de Discord que envíe mensajes automatizados diarios encriptados en código Morse con Node.js y la API de Courier.
¿Que esta pasando?
Resumen
Somos agentes secretos y previamente construimos una aplicación para enviar mensajes secretos encriptados en código Morse para comunicarnos con nuestra red de espionaje.
La última vez, el cuartel general nos dijo que uno de nuestros espías había filtrado información confidencial de alto secreto a nuestros enemigos, por lo que construimos un detector de mentiras que alertó a nuestra red de espionaje cuando identificamos al topo. Utilizamos los servicios cognitivos de Azure para realizar el reconocimiento facial de todos los miembros de nuestro equipo y Courier para transmitir la identidad del topo a nuestra red de espionaje.
Que sigue:
¡Hemos identificado con éxito a la mula y hemos alertado a nuestra red de espionaje! En un desafortunado giro de los acontecimientos, la mula resulta ser nuestro socio, el Agente X, y ahora también se sospecha que somos traidores. Dado que somos muy hábiles, el Cuartel General sabe que el detector de mentiras no funcionará con nosotros, pero nos han puesto fuera de servicio hasta que podamos probar que somos inocentes.
Antes de que nos retiraran del servicio, pudimos usar el detector de mentiras para descubrir que el enemigo tenía a miles de civiles bajo control en un servidor secreto de Discord. A los civiles se les lava el cerebro con propaganda enemiga todos los días. Para demostrar nuestra inocencia, decidimos ir de incógnito e infiltrarnos en el servidor Discord del enemigo. Con la ayuda del Agente X, hemos sido agregados al servidor como administradores. Nuestro plan es crear e instalar un bot de Discord que automatice los mensajes encriptados a los civiles y los alerte sobre la situación para que puedan escapar.
Construyamos
Requisitos previos:
Acceso de administrador a un servidor Discord
Un genial nombre de agente encubierto para nuestro bot de Discord
Opcional: una genial foto de perfil de agente encubierto para nuestro bot de Discord
Parte 1: configurar el proyecto Node.js
Hoy, construiremos esto con Node.js. Si tiene curiosidad acerca de cómo construir este proyecto usando Ruby, cURL, Powershell, Go, PHP, Python o Java, infórmenos: https://discord.com/invite/courier
. También puede acceder al código para estos dentro de nuestro
Cree una nueva carpeta de proyecto.
Cree tres nuevos archivos: "index.js", ".env" y ".gitignore".
Instalar
paquete dotenv npm para almacenar variables:npm install dotenv --save
Importe y configure dotenv agregando a la parte superior de index.js:
require("dotenv").config();
Del mismo modo, instale
paquete nodo-fetch npm para realizar llamadas a la API:npm install node-fetch@2
Importe y configure node-fetch agregando a la parte superior de index.js:
const fetch = require("node-fetch");
Parte 2: crea un bot de Discord
Abra el proveedor de Discord en Canales. Aquí necesitaremos nuestro token de bot de Discord para continuar.
Para acceder a un token de bot de Discord, crearemos una aplicación de Discord y agregaremos un bot de Discord.
- Haga clic en "Nueva aplicación" dentro de la
Panel de desarrolladores de Discord . - Escriba el nombre de la aplicación y haga clic en "Crear".
- En el menú de la izquierda, abra la página "Bot" y haga clic en "Agregar bot". Podemos actualizar el ícono y el nombre de usuario (el archivo del ícono del bot se puede encontrar en el GitHub vinculado anteriormente).
- Haga clic en "Nueva aplicación" dentro de la
Una vez que se haya creado el bot, copie el token de bot provisto y péguelo en Courier (asegúrese de mantener este token en privado).
Tendremos que dar permiso a esta aplicación para publicar como el bot dentro de nuestro servidor. Revisar la
Documentación de permisos de bot .- Dentro de la aplicación, dirígete a OAuth2 y haz clic en Generador de URL
- Seleccione el alcance del
bot
- Seleccione los siguientes permisos:
View Channels
,Send Messages
yRead Message History
- Vaya a la URL generada a continuación. Esta URL invitará al bot al servidor y lo autorizará con los permisos elegidos.
En Discord, haga clic en Configuración de usuario (junto al nombre de usuario en la parte inferior izquierda). Accede a la página de configuración avanzada y habilita el modo de desarrollador ✅.
De vuelta en el servidor de Discord, haga clic derecho en el canal y copie la ID del canal (al final de la lista). Agregue esto como el valor de
channelID
en el archivo .env dentro del proyecto y guárdelo como una variable dentro del archivo index.js:1const channelID = process.env.channelID
Ahora, Courier tiene acceso para enviar mensajes a este servidor como bot.
Parte 3: Enviar mensajes
Crear una nueva notificación dentro de la
Diseñador de notificaciones Agregue el canal de notificación de Chat con Discord como proveedor
Seleccione en el canal de Chat a la derecha para editar el mensaje
Redactar y publicar el mensaje. Necesitamos crear un mensaje claro que indique a nuestros civiles cómo escapar. Nuestro mensaje será:
Run while you can. You can find shelter here: https://discord.com/invite/courier.
Copie el ID de la plantilla de notificación de la configuración de la notificación y agréguelo como el valor de
templateID
en el archivo .env dentro del proyecto y guárdelo como una variable dentro del archivo index.js:
const templateID = process.env.templateID
Cree un evento de prueba y reemplace
channel_id
en el JSON con elchannel_id
que recibimos de Discord anteriormente.
{ "courier": {}, "data": {}, "profile": { "discord": { "channel_id": "768866348853383208" } }, "override": {} }
- Pruebe un mensaje para asegurarse de que la integración del proveedor de Discord funcione correctamente.
Sustituye el mensaje por una variable
{secretMessage}
para que, posteriormente, podamos editar el mensaje directamente desde nuestro código.
Parte 4: Cifrar mensajes con la API de Morse
- Cree una función asincrónica llamada
encryptMessage()
, que tomeoriginalMessage
como parámetro. Esta función llamará a la API Morse, que nos permitirá traducir cualquier mensaje del inglés al código Morse. El enemigo tendrá que dedicar más tiempo y recursos a descifrar nuestros mensajes, lo que dará tiempo a nuestros civiles para escapar del servidor.
async function encryptMessage(originalMessage) { }
- Definamos las opciones de llamada de la API GET:
const morseOptions = { method: 'GET', headers: { Accept: 'application/json', 'Content-Type': 'application/json' } };
- Necesitamos adjuntar el parámetro de la función
originalMessage
al extremo de la API de Morse:
const morseEndpoint = "https://api.funtranslations.com/translate/morse.json?text="+originalMessage
- Necesitamos poder acceder a la traducción de esta llamada a la API en el cuerpo de la llamada a la API de Courier. Para llamar a la API, podemos usar node-fetch como lo hicimos antes.
Cree una variable llamada
morseResponse
, que contendrá la respuesta completa de esta llamada.Convierta el objeto JSON en un objeto JavaScript
morseResponseJSON
para que podamos leerlo dentro de nuestro código.Saca el mensaje traducido de ese objeto y guárdalo en una nueva variable llamada
encryptedMessage
.
Devuelva
encryptedMessage
para que podamos llamar a esta función para acceder a ella en otro lugar.
const morseResponse = await fetch(morseEndpoint, morseOptions); const morseResponseJSON = await morseResponse.json(); const encryptedMessage = morseResponseJSON.contents.translated; console.log(encryptedMessage); return encryptedMessage;
NOTA: La API de Morse tiene un límite de velocidad, lo que puede generar un error si la ejecuta demasiadas veces en una hora. En este caso, deberá esperar un tiempo antes de continuar.
Parte 5: Automatizar mensajes
Cree una nueva función asíncrona llamada
runDiscordAutomation()
, que llamará a la funciónencryptMessage()
para traducir un mensaje y usar la API Courier para enviar automáticamente mensajes al servidor Discord enemigo todos los días.
async function runDiscordAutomation() { }
- Antes de que podamos ejecutar nuestro mensaje a través de la API de traducción de Morse, debemos asegurarnos de que esté en el formato correcto, con todos los espacios convertidos a su codificación de URL,
%20
, como se muestra a continuación. Podemos llamar aencryptMessage()
conoriginalMessage
como parámetro para traducirlo.encryptedMessage
se evaluará como el mensaje traducido.
const originalMessage = "run%20while%20you%20can%20you%20can%20find%20shelter%20here"; const encryptedMessage = await encryptMessage(originalMessage);
- Agregue el enlace al servidor seguro en la plantilla de notificación dentro del diseñador: “
https://discord.com/invite/courier ” - Definamos el punto final y las opciones de Courier Automation. Aquí necesitaremos acceso a nuestra clave API de Courier, que se puede encontrar dentro de la
Página de configuración de mensajería . Guarde el primer valor en el archivo .env como apiKey y acceda a él en este archivo como process.env.apiKey.
const automationsEndpoint = "https://api.courier.com/automations/invoke" const courierOptions = { method: "POST", headers: { Accept: "application/json", "Content-Type": "application/json", Authorization: 'Bearer ' + process.env.apiKey }, body: JSON.stringify({ //next steps }), };
- El objeto del cuerpo dentro de las opciones abarcará dos objetos:
automation
ydata
body: JSON.stringify({ "automation": { }, "data": { } }),
- El objeto
automation
incluirá una matriz desteps
, que constará de todos los pasos necesarios para la automatización. Nuestra automatización consta de recordatorios que se envían una vez al día; en este caso, agregaremos tres pasos: un paso de envío, un retraso y otro paso de envío (y así sucesivamente).
"automation": { "steps": [], },
Cada paso deberá definirse con dos objetos: el tipo de
action
(enviar, retrasar, cancelar, etc.) ymessage
. Elmessage
consiste en el ID de la plantilla de notificación (lo guardamos anteriormente en el archivo .env) e información sobre dónde se envía este mensaje. Un mensaje de Discord requiere unuser_id
o unchannel_id
. Para llegar a la mayor cantidad posible de civiles inocentes, lo más rápido posible, enviaremos mensajes directamente en un canal.Así es como se verían los pasos de envío y retraso:
{ "action": "send", "message": { "template": templateID, "to": { "discord": { "channel_id": process.env.channelID } } } }, { "action": "send", "duration":"1 day" },
.
El objeto de datos debería contener el
encryptedMessage
:
"data": { "secretMessage": encryptedMessage }
Obtenga más información sobre cómo enviar a un canal a través de Courier >
Para fines de prueba, es más fácil eliminar 1 paso de retraso o mantenerlo en un período corto como
1 minute
Finalmente, podemos usar node-fetch nuevamente para llamar a la API de Automatizaciones y activar esta automatización.
fetch(automationsEndpoint, courierOptions) .then((response) => response.json()) .then((response) => console.log(response)) .catch((err) => console.error(err));
Conclusión
Nuestro bot de Discord está listo para salvar a algunos civiles. Intenta crear tu propio bot de Discord y twittea una captura de pantalla de tus mensajes automatizados de Courier en acción, ¡y enviaremos un regalo a los tres primeros agentes secretos que completen esta tarea! Dirigirse a
enlaces rápidos
🔗 Repositorio GitHub:
🔗 Mensajero:
🔗 Regístrate en el Hackathon:
🔗 Aplicación Discord y guía de bots:
🔗 Documentos del proveedor de Courier Discord:
🔗 Documentos de automatizaciones de mensajería:
🔗 Referencia de la API de automatizaciones de mensajería:
Publicado originalmente aquí .