Use API for welcome modal
This commit is contained in:
parent
839d6f80ab
commit
6118231117
6 changed files with 91 additions and 14 deletions
|
@ -3,3 +3,6 @@ pub use user::User;
|
|||
|
||||
mod challenge;
|
||||
pub use challenge::Challenge;
|
||||
|
||||
mod settings;
|
||||
pub use settings::Settings;
|
||||
|
|
56
src/models/settings.rs
Normal file
56
src/models/settings.rs
Normal file
|
@ -0,0 +1,56 @@
|
|||
use derive_more::From;
|
||||
use poise::serenity_prelude::Http;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::fs;
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct Settings {
|
||||
pub guilds: Vec<Guild>,
|
||||
}
|
||||
|
||||
impl Settings {
|
||||
pub async fn new(http: &Http) -> Result<Self, GetSettingsError> {
|
||||
let file = fs::read_to_string("settings.yaml").unwrap();
|
||||
let mut settings: Self = serde_yaml::from_str(&file)?;
|
||||
settings.load(http).await?;
|
||||
Ok(settings)
|
||||
}
|
||||
|
||||
pub async fn load(&mut self, http: &Http) -> poise::serenity_prelude::Result<()> {
|
||||
for guild in self.guilds.iter_mut() {
|
||||
guild.load(http).await?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(From, Debug)]
|
||||
pub enum GetSettingsError {
|
||||
Io(std::io::Error),
|
||||
Deserialize(serde_yaml::Error),
|
||||
Serenity(poise::serenity_prelude::Error),
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct Guild {
|
||||
pub id: u64,
|
||||
#[serde(default)]
|
||||
pub hidden: bool,
|
||||
#[serde(default)]
|
||||
pub recommended: bool,
|
||||
pub channel: u64,
|
||||
// None case means guild is not yet loaded
|
||||
#[serde(default)]
|
||||
pub icon: Option<Option<String>>,
|
||||
#[serde(default)]
|
||||
pub name: Option<String>,
|
||||
}
|
||||
|
||||
impl Guild {
|
||||
pub async fn load(&mut self, http: &Http) -> poise::serenity_prelude::Result<()> {
|
||||
let server = http.get_guild(self.id).await?;
|
||||
self.icon = Some(server.icon);
|
||||
self.name = Some(server.name);
|
||||
Ok(())
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue