refactor: move commands to separate module

user-register
Jef Roosens 2023-05-15 13:52:30 +02:00
parent 2999ca2301
commit 38994a29a0
Signed by: Jef Roosens
GPG Key ID: B75D4F293C7052DB
6 changed files with 47 additions and 24 deletions

14
Cargo.lock generated
View File

@ -33,6 +33,7 @@ name = "affy"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"affluences-api", "affluences-api",
"async-minecraft-ping",
"chrono", "chrono",
"poise", "poise",
"tokio", "tokio",
@ -97,6 +98,19 @@ dependencies = [
"windows-sys 0.48.0", "windows-sys 0.48.0",
] ]
[[package]]
name = "async-minecraft-ping"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "668b459c14dd8d9ef21e296af3f2a3651ff7dc3536e092fb0b09e528daaa6d89"
dependencies = [
"async-trait",
"serde",
"serde_json",
"thiserror",
"tokio",
]
[[package]] [[package]]
name = "async-trait" name = "async-trait"
version = "0.1.68" version = "0.1.68"

View File

@ -21,3 +21,4 @@ tokio = { version = "1.28.1", features = ["full"] }
chrono = "*" chrono = "*"
uuid = "*" uuid = "*"
poise = "0.5.5" poise = "0.5.5"
async-minecraft-ping = "0.8.0"

View File

@ -27,6 +27,8 @@ COPY --from=builder /build/dumb-init /build/affy/target/release/affy /bin/
WORKDIR /data WORKDIR /data
ENV TZ=Europe/Brussels
USER www-data:www-data USER www-data:www-data
ENTRYPOINT ["/bin/dumb-init", "--"] ENTRYPOINT ["/bin/dumb-init", "--"]

View File

@ -1,30 +1,11 @@
use crate::{Context, Error}; use crate::{Context, Error};
use chrono::NaiveDate; use chrono::NaiveDate;
use uuid::{uuid, Uuid}; use uuid::{uuid, Uuid};
const STERRE_BIB_ID: Uuid = uuid!("4737e57a-ee05-4f7b-901a-7bb541eeb297"); const STERRE_BIB_ID: Uuid = uuid!("4737e57a-ee05-4f7b-901a-7bb541eeb297");
const TIME_FORMAT: &str = "%H:%M"; const TIME_FORMAT: &str = "%H:%M";
/// Show this help menu
#[poise::command(prefix_command, track_edits, slash_command)]
pub async fn help(
ctx: Context<'_>,
#[description = "Specific command to show help about"]
#[autocomplete = "poise::builtins::autocomplete_command"]
command: Option<String>,
) -> Result<(), Error> {
poise::builtins::help(
ctx,
command.as_deref(),
poise::builtins::HelpConfiguration {
extra_text_at_bottom: "This is an example bot made to showcase features of my custom Discord bot framework",
..Default::default()
},
)
.await?;
Ok(())
}
/// List available timeslots for day /// List available timeslots for day
#[poise::command(prefix_command, slash_command)] #[poise::command(prefix_command, slash_command)]
pub async fn available(ctx: Context<'_>, date: NaiveDate) -> Result<(), Error> { pub async fn available(ctx: Context<'_>, date: NaiveDate) -> Result<(), Error> {

View File

@ -0,0 +1,27 @@
mod affluence;
use crate::{Context, Data, Error};
pub fn commands() -> Vec<poise::structs::Command<Data, Error>> {
vec![help(), affluence::available()]
}
/// Show this help menu
#[poise::command(prefix_command, track_edits, slash_command)]
pub async fn help(
ctx: Context<'_>,
#[description = "Specific command to show help about"]
#[autocomplete = "poise::builtins::autocomplete_command"]
command: Option<String>,
) -> Result<(), Error> {
poise::builtins::help(
ctx,
command.as_deref(),
poise::builtins::HelpConfiguration {
extra_text_at_bottom: "This is an example bot made to showcase features of my custom Discord bot framework",
..Default::default()
},
)
.await?;
Ok(())
}

View File

@ -2,7 +2,7 @@ mod commands;
use affluences_api::AffluencesClient; use affluences_api::AffluencesClient;
use poise::serenity_prelude as serenity; use poise::serenity_prelude as serenity;
use std::{collections::HashMap, env::var, sync::Mutex, time::Duration}; use std::{env::var, time::Duration};
// Types used by all command functions // Types used by all command functions
type Error = Box<dyn std::error::Error + Send + Sync>; type Error = Box<dyn std::error::Error + Send + Sync>;
@ -10,7 +10,6 @@ type Context<'a> = poise::Context<'a, Data, Error>;
// Custom user data passed to all command functions // Custom user data passed to all command functions
pub struct Data { pub struct Data {
votes: Mutex<HashMap<String, u32>>,
client: AffluencesClient, client: AffluencesClient,
} }
@ -36,7 +35,7 @@ async fn main() {
// FrameworkOptions contains all of poise's configuration option in one struct // FrameworkOptions contains all of poise's configuration option in one struct
// Every option can be omitted to use its default value // Every option can be omitted to use its default value
let options = poise::FrameworkOptions { let options = poise::FrameworkOptions {
commands: vec![commands::help(), commands::available()], commands: commands::commands(),
prefix_options: poise::PrefixFrameworkOptions { prefix_options: poise::PrefixFrameworkOptions {
prefix: Some("~".into()), prefix: Some("~".into()),
edit_tracker: Some(poise::EditTracker::for_timespan(Duration::from_secs(3600))), edit_tracker: Some(poise::EditTracker::for_timespan(Duration::from_secs(3600))),
@ -91,7 +90,6 @@ async fn main() {
println!("Logged in as {}", _ready.user.name); println!("Logged in as {}", _ready.user.name);
poise::builtins::register_globally(ctx, &framework.options().commands).await?; poise::builtins::register_globally(ctx, &framework.options().commands).await?;
Ok(Data { Ok(Data {
votes: Mutex::new(HashMap::new()),
client: AffluencesClient::new(), client: AffluencesClient::new(),
}) })
}) })