Tanto el framework como la documentación estan aún en desarrollo y podrían variar en su contenido, contener bugs no reportados, o encontrarse incompleta en el caso de la documentación. Por favor tener esto en consideración al momento de su uso.
Sandwichcord Framework [Proyecto descontinuado]
Si eres nuevo en el desarrollo de bots para Discord, puede que esto te interese.
Este framework contiene lo necesario para desarrollar un bot básico pero útil, simplificando algunas cosas.
*Este framework depende de la librería JDA 4
*Sandwich Framework ayuda con la gestion de categorias, comandos, opciones/parametros, idioma entre otros, mas se debe estudiar la documentación de la librería JDA 4 para un correcto desarrollo.
Versión estable: 0.9.0(BETA)
Actualmente no cuenta con soporte a Maven, por lo que si lo utilizas, tendrás que realizar una importación local del archivo sandwichcord-framework-VERSION.jar
siguiendo las instucciones para importar archivos .jar en proyecto Maven(en inglés).
Actualmente no cuenta con soporte a Gradle, por lo que si lo utilizas, tendrás que realizar una importación local del archivo sandwichcord-framework-VERSION.jar
siguiendo las instucciones para importar archivos .jar en proyecto Gradle(en inglés).
Si no usas alguna de las herramientas anteriores, puedes descargar el archivo sandwichcord-framework-VERSION.jar
e importarlo en el proyecto java para crear un Bot de Discord.
Java es un lenguaje de programación orientado a objetos(POO) y siguiendo estas buenas practicas, todas las interacciones dentro del framework se basan en objetos.
Una de las clases más importantes es la clase Bot y para crear un bot de Discord debes crear una clase que herede de esta.
Para este ejemplo básico, comenzaremos importando una serie de clases
import com.jaxsandwich.sandwichcord.core.Bot;
import com.jaxsandwich.sandwichcord.core.util.Language;
Después, creamos una clase que herede Bot, por ejemplo la clase MyBot
public class MyBot extends Bot{
public MyBot(String token) {
super(token, Language.ES);
this.setSingleGuildMode(true);
}
}
El constructor de la clase Bot requiere dos parametros: el Token de Discord y el idioma por defecto del bot, el cual corresponde al valor del enum Language.
El comportamiento del bot puede ser personalizado en su constructor, he aquí un ejemplo:
public MyBot(String token) {
super(token, Language.ES);
this.setPrefix("my!");
this.setOptionsPrefix("-");
this.setAutoHelpCommandEnabled(true);
this.setHideNSFWCategory(true);
this.setIgnoreSelfCommands(true);
this.setTypingOnCommand(true);
this.setIgnoreWebHook(true);
}
Para saber más que hacen estas y otras configuraciones, revise la documentación de la clase Bot.
Con lo anterior, ¡ya tienes un bot de Discord!... Un bot que aún no hace nada, ya que no conoce ningún comando.
Los comandos definen las capacidades del bot, son todo lo que este puede hacer y son la parte mas interesante de programar(y la que más tiempo lleva). Los comandos también son objetos, pero a diferencia del bot, no necesitas crear una clase por cada uno.
Para crear un comando es necesario crear una categoría. Esto ayuda a mantener un orden no solo durante el desarrollo del bot, sino que también para los usuarios de Discord que lo usen.
Lo primero es importar dos anotaciones y la clase CommandPacket.
import com.jaxsandwich.sandwichcord.annotations.Category;
import com.jaxsandwich.sandwichcord.annotations.Command;
import com.jaxsandwich.sandwichcord.models.packets.CommandPacket;
Comenzamos por crear la clase MyCategory, que será nuestra categoría. Para ello debemos indicarselo al framework anotando la clase con la anotación Category. Luego en ella crearemos un metodo que será nuestro comando, también indicándolo mediante la anotación Command.
La clase CommandPacket es la encargada de comunicar el mensaje que recibe el bot ya procesado con el comando. Puedes usar también alguna de las clases superiores en gerarquía, pero por ahora bastará con esta.
A continuación, un ejemplo de comando, recordando que estos deben pertenecer a una categoría obligatoriamente (requisito del framework, no de Discord). Todos los comandos deben ser metodos estáticos y recibir como único parámetro un objeto tipo Packet o subclases de este, de lo contrario serán ignorados.
@Category
public class MyCategory{
@Command(id="HelloWorld", desc="Sends a Hello World! message", alias={"hw","hello"})
public static void helloWorldCommand(CommandPacket packet){
packet.sendMessage("Hello Wolrd!").queue();
}
}
La clase CommandPacket ofrece una serie de metodos utiles para programar comandos, además de contener toda la información necesaria, ya que dentro de esta se encuentra el evento que desencadenó el comando, incluyendo información del servidor, el usuario que invocó el comando, entre otros. Para más información, revise la documentación al respecto.
El bot ya está listo, es un poco básico, pero ya cumple con los componentes requeridos para funcionar. Ahora solo queda encenderlo.
Para ejecutar el bot, se necesita crear una clase con el metodo estático main, como en cualquier otro programa Java, donde comenzaremos la ejecución del bot.
He aquí un ejemplo de la clase que contiene el metodo main, considerando que la clase MyBot.java y ClasePrincipal.java se encuentran en el mismo package:
public class ClasePrincipal {
public static void main(String[] args) throws Exception{
String discord_token = "Enter your Discord Token here!";
MyBot bot = new MyBot(discord_token);
bot.runBot();
}
}
Primero se instancia la clase MyBot creada anteriormente y luego se inicia la ejecución del bot con el metodo bot.runBot(). Esto último permite hacer configuraciones al objeto JDABuilder contenido en el bot, ya que una vez este comienza su ejecución, estas no pueden ser aplicadas.
El bot ya está listo y corriendo, solo queda invitarlo a tu servidor de Discord y seguir agregándole características.