feat: Account initialization

- discord: /answer now DM-s user and updated user balance
This commit is contained in:
Alexey 2025-12-10 16:59:28 +03:00
commit fb9fcfe6d7
3 changed files with 50 additions and 1 deletions

12
discord/src/account.rs Normal file
View file

@ -0,0 +1,12 @@
use squad_quest::{account::Account, config::Config};
pub fn fetch_or_init_account(conf: &Config, id: String) -> Account {
let accounts = conf.load_accounts();
match accounts.iter().find(|a| a.id == id) {
Some(a) => a.clone(),
None => Account {
id,
..Default::default()
},
}
}

View file

@ -1,6 +1,7 @@
use poise::serenity_prelude::{Attachment, ComponentInteractionCollector, CreateActionRow, CreateAttachment, CreateButton, CreateMessage, EditMessage, Mentionable};
use squad_quest::SquadObject;
use crate::{Context, Error};
use crate::{Context, Error, account::fetch_or_init_account};
#[poise::command(
prefix_command,
@ -103,6 +104,41 @@ pub async fn answer(
let builder = EditMessage::new().content(content).components(Vec::new());
message.edit(ctx, builder).await?;
let content: String;
if is_approved {
let mut no_errors = true;
let mut account = fetch_or_init_account(&ctx.data().config, ctx.author().id.to_string());
if let Err(error) = quest.complete_for_account(&mut account) {
eprintln!("{error}");
no_errors = false;
};
let path = ctx.data().config.full_accounts_path();
if let Err(error) = account.save(path) {
eprintln!("{error}");
no_errors = false;
};
if no_errors {
content = format!("Your answer to the quest #{quest_id} has been approved.\n\
You gained {reward} points.\n\
Your balance is now {balance} points",
reward = quest.reward,
balance = account.balance
);
} else {
content = format!("Your answer to the quest #{quest_id} has been approved, \
but some server error happened. \
Please contact administrator for details."
);
}
} else {
content = format!("Your answer to the quest #{quest_id} has been rejected.");
};
let dm_builder = CreateMessage::new().content(content);
ctx.author().dm(ctx, dm_builder).await?;
return Ok(());
}

View file

@ -10,6 +10,7 @@ use crate::config::{ConfigImpl, DiscordConfig};
mod commands;
mod cli;
mod config;
mod account;
struct Data {
pub config: Config,