Begin Discord client implementation
This commit is contained in:
parent
85a61bb463
commit
b03625443a
2
src/discord.rs
Normal file
2
src/discord.rs
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
mod client;
|
||||||
|
mod event_handler;
|
32
src/discord/client.rs
Normal file
32
src/discord/client.rs
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
use serenity::{prelude::GatewayIntents, Client};
|
||||||
|
|
||||||
|
use crate::environment::get_env_variable;
|
||||||
|
|
||||||
|
use super::event_handler::Handler;
|
||||||
|
|
||||||
|
const INTENTS: GatewayIntents = GatewayIntents::empty();
|
||||||
|
|
||||||
|
struct DiscordClient {
|
||||||
|
serenity_client: Option<Client>,
|
||||||
|
|
||||||
|
discord_token: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DiscordClient {
|
||||||
|
pub async fn new() -> Self {
|
||||||
|
let discord_token = get_env_variable("DISCORD_TOKEN");
|
||||||
|
|
||||||
|
let serenity_client = match Client::builder(&discord_token, INTENTS)
|
||||||
|
.event_handler(Handler)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(c) => c,
|
||||||
|
Err(e) => panic!("Failed to instantiate Discord Client: {e}"),
|
||||||
|
};
|
||||||
|
|
||||||
|
DiscordClient {
|
||||||
|
discord_token,
|
||||||
|
serenity_client: Some(serenity_client),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
68
src/discord/event_handler.rs
Normal file
68
src/discord/event_handler.rs
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
use serenity::{
|
||||||
|
async_trait,
|
||||||
|
model::gateway::Ready,
|
||||||
|
model::{
|
||||||
|
application::command::{Command, CommandOptionType},
|
||||||
|
prelude::ResumedEvent,
|
||||||
|
},
|
||||||
|
prelude::{Context, EventHandler},
|
||||||
|
};
|
||||||
|
|
||||||
|
const MAX_ARGS_NUMBER: u32 = 25;
|
||||||
|
|
||||||
|
pub struct Handler;
|
||||||
|
|
||||||
|
#[async_trait]
|
||||||
|
impl EventHandler for Handler {
|
||||||
|
async fn ready(&self, ctx: Context, ready: Ready) {
|
||||||
|
println!("Successfully connected as {}", ready.user.name);
|
||||||
|
|
||||||
|
let _ = Command::create_global_application_command(&ctx.http, |command| {
|
||||||
|
command
|
||||||
|
.name("tag new")
|
||||||
|
.description("Add a new tag")
|
||||||
|
.create_option(|option| {
|
||||||
|
option
|
||||||
|
.name("new_tag")
|
||||||
|
.description("The new tag to add")
|
||||||
|
.kind(CommandOptionType::String)
|
||||||
|
.required(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let _ = Command::create_global_application_command(&ctx.http, |command| {
|
||||||
|
let command = command
|
||||||
|
.name("tag bulk_new")
|
||||||
|
.description("Add multiples tags");
|
||||||
|
|
||||||
|
for i in 0..MAX_ARGS_NUMBER {
|
||||||
|
command.create_option(|option| {
|
||||||
|
option
|
||||||
|
.name("new_tag_{i+1}")
|
||||||
|
.kind(CommandOptionType::String)
|
||||||
|
.required(i == 0)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
command
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let _ = Command::create_global_application_command(&ctx.http, |command| {
|
||||||
|
command
|
||||||
|
.name("tag delete")
|
||||||
|
.description("Delete a tag")
|
||||||
|
.create_option(|option| {
|
||||||
|
option
|
||||||
|
.name("tag")
|
||||||
|
.kind(CommandOptionType::String)
|
||||||
|
.required(true)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn resume(&self, _: Context, _: ResumedEvent) {
|
||||||
|
println!("Successfully reconnected.")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue