Add basic connection to Discord + a basic command
This commit is contained in:
parent
fcb55609e2
commit
7e8da0d900
1 changed files with 81 additions and 3 deletions
|
@ -1,12 +1,90 @@
|
||||||
/// Permet de stocker les informations nécessaire pour utiliser le bot discord
|
use serenity::{
|
||||||
|
async_trait,
|
||||||
|
model::{channel::Message, gateway::Ready},
|
||||||
|
prelude::*,
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(Debug)]
|
mod erreur {
|
||||||
|
include!("erreur.rs");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Permet de stocker les informations nécessaire pour utiliser le bot discord
|
||||||
pub struct ConnectionInfoDiscord {
|
pub struct ConnectionInfoDiscord {
|
||||||
pub token: String,
|
pub token: String,
|
||||||
pub prefix: String,
|
pub prefix: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static mut _PREFIX: Option<String> = None;
|
||||||
|
|
||||||
|
/// Récupère le string du prefix
|
||||||
|
/// Attention, on fait paniqué le programme si la valeur est vide, pour éviter
|
||||||
|
/// ça, il faut appeller cette fonction seulement quand `start_discord`
|
||||||
|
/// a été appellé car c'est elle qui ajoute le préfixe à `_PREFIX`
|
||||||
|
///
|
||||||
|
/// Je sais que c'est vraiment naze de faire ça (variable static + blocs unsafe)
|
||||||
|
/// mais c'est la seul solution que j'ai trouvé en évitant de trop étoffé avec du
|
||||||
|
/// code pas très utile.
|
||||||
|
unsafe fn recuperation_prefix() -> String {
|
||||||
|
match &_PREFIX {
|
||||||
|
Some(p) => p.to_string(),
|
||||||
|
None => panic!(
|
||||||
|
"{}",
|
||||||
|
erreur::message_erreur("[RUST] Erreur lors de la récupération du préfix Discord\nTips: start_discord function may not have been called...")
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Handler;
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
impl EventHandler for Handler {
|
||||||
|
// Appellé quand un message est récupérer par le bot
|
||||||
|
async fn message(&self, ctx: Context, msg: Message) {
|
||||||
|
#[allow(unused_assignments)] // n'importe quoi...
|
||||||
|
let mut prefix = String::from("");
|
||||||
|
unsafe {
|
||||||
|
prefix = recuperation_prefix();
|
||||||
|
}
|
||||||
|
if msg.content == format!("{}info", prefix) {
|
||||||
|
let reponse = "\
|
||||||
|
Bot réalisé dans le cadre du cours de Programmation avancée.\n\
|
||||||
|
Code source du bot : https://code.up8.edu/Anri/matter_bot\n\
|
||||||
|
But du bot : Faire un pont entre Mattermost et Discord.";
|
||||||
|
|
||||||
|
if let Err(err) = msg.reply(&ctx.http, reponse).await {
|
||||||
|
// Gestion erreur lors de l'envoie de la réponse
|
||||||
|
erreur::affiche_message_erreur(&format!("Erreur d'envoie de message : {:?}", err));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fonction appellé quand le bot est lancé et connecté
|
||||||
|
async fn ready(&self, _: Context, _ready: Ready) {
|
||||||
|
println!("Écoute les évènements Discord...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Lance le bot Discord
|
/// Lance le bot Discord
|
||||||
pub async fn start_discord(informations: ConnectionInfoDiscord) {
|
pub async fn start_discord(informations: ConnectionInfoDiscord) {
|
||||||
println!("\n{:?}", informations);
|
unsafe {
|
||||||
|
// On définit notre préfix
|
||||||
|
_PREFIX = Some(informations.prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Client Discord (https://docs.rs/serenity/latest/serenity/client/index.html)
|
||||||
|
let mut client = Client::builder(&informations.token)
|
||||||
|
.event_handler(Handler)
|
||||||
|
.await
|
||||||
|
.unwrap_or_else(|_| {
|
||||||
|
panic!(
|
||||||
|
"{}",
|
||||||
|
erreur::message_erreur("Impossible de créer le client Discord",)
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
|
// Lance le bot
|
||||||
|
if let Err(err) = client.start().await {
|
||||||
|
// Si une erreur apparaît
|
||||||
|
erreur::affiche_message_erreur(&format!("Erreur Discord : {:?}", err));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue