Teams Tab

This commit is contained in:
Evann Regnault 2023-07-15 11:22:18 +02:00
parent 7de38097eb
commit b4962194fa
2 changed files with 61 additions and 2 deletions

View file

@ -1,6 +1,6 @@
[package] [package]
name = "obsessed-yanqing" name = "obsessed-yanqing"
version = "1.1.0" version = "1.1.1"
edition = "2021" edition = "2021"
authors = ["Evann Regnault"] authors = ["Evann Regnault"]
license = "MIT" license = "MIT"

View file

@ -18,6 +18,7 @@ enum CharacterTab {
Home, Home,
Review, Review,
Gear(usize), Gear(usize),
Team
} }
async fn create_menu(ctx: Context<'_>, chars: Vec<Characters>) -> ReplyHandle { async fn create_menu(ctx: Context<'_>, chars: Vec<Characters>) -> ReplyHandle {
@ -147,11 +148,48 @@ async fn get_character_build(character: &Character, index: usize) -> Option<Crea
) )
} }
async fn get_character_team(character: &Character) -> Option<CreateEmbed> {
struct Team {
name: String,
member_1: Character,
member_2: Character,
member_3: Character,
member_4: Character
}
let teams = join_all(character.teams.as_ref().expect("No teams").into_iter().map(|team| async move {
Team {
name: team.name.clone(),
member_1: get_character_data(team.member_1.clone()).await.expect(format!("{} doesn't exist", team.member_1).as_str()),
member_2: get_character_data(team.member_2.clone()).await.expect(format!("{} doesn't exist", team.member_2).as_str()),
member_3: get_character_data(team.member_3.clone()).await.expect(format!("{} doesn't exist", team.member_3).as_str()),
member_4: get_character_data(team.member_4.clone()).await.expect(format!("{} doesn't exist", team.member_4).as_str())
}
})).await;
Some(
CreateEmbed::default()
.title(format!("{} {} {}", get_element_emote(&character.element), character.name, get_path_emote(&character.path)))
.set_footer(CreateEmbedFooter::default().text("Data from https://www.prydwen.gg/").to_owned())
.description(format!("{}\n{}\n",
":star:".repeat(character.rarity.parse().unwrap_or(4)),
character.default_role))
.color(get_element_color(&character.element))
.thumbnail(format!("https://www.prydwen.gg{}", character.small_image.local_file.child_image_sharp.gatsby_image_data.images.fallback.src))
.fields(teams.into_iter().map(|team| {
(team.name, format!("{} / {} / {} / {}", team.member_1.name, team.member_2.name, team.member_3.name, team.member_4.name), false)
}))
.to_owned()
)
}
fn create_character_tabs_button<'a>(f: &'a mut CreateComponents, char: &Character, current_tab: &CharacterTab) -> &'a mut CreateComponents { fn create_character_tabs_button<'a>(f: &'a mut CreateComponents, char: &Character, current_tab: &CharacterTab) -> &'a mut CreateComponents {
let mut all_buttons: Vec<CreateButton> = vec![]; let mut all_buttons: Vec<CreateButton> = vec![];
let mut home_button: CreateButton = CreateButton::default(); let mut home_button: CreateButton = CreateButton::default();
let mut review_button: CreateButton = CreateButton::default(); let mut review_button: CreateButton = CreateButton::default();
let mut gear_button: CreateButton = CreateButton::default(); let mut gear_button: CreateButton = CreateButton::default();
let mut team_button: CreateButton = CreateButton::default();
// Home Button // Home Button
{ {
@ -208,6 +246,22 @@ fn create_character_tabs_button<'a>(f: &'a mut CreateComponents, char: &Characte
} }
// Team Button
{
match current_tab {
CharacterTab::Team => { team_button.style(ButtonStyle::Success); }
_ => { team_button.style(ButtonStyle::Primary); }
};
match &char.teams {
None => { team_button.disabled(true); }
Some(_) => { team_button.disabled(false); }
};
team_button.label("Teams");
team_button.custom_id(CharacterTab::Team.to_button_id());
all_buttons.push(team_button);
}
f.create_action_row(|r| { f.create_action_row(|r| {
all_buttons.into_iter().for_each(|b| { all_buttons.into_iter().for_each(|b| {
r.add_button(b); r.add_button(b);
@ -233,6 +287,9 @@ async fn menu_handler(ctx: Context<'_>, interaction: Arc<MessageComponentInterac
tab = CharacterTab::Gear(n); tab = CharacterTab::Gear(n);
get_character_build(&character, n).await get_character_build(&character, n).await
} }
CharacterTab::Team => {
get_character_team(&character).await
}
}; };
match looping { match looping {
true => { true => {
@ -288,6 +345,7 @@ async fn menu_handler(ctx: Context<'_>, interaction: Arc<MessageComponentInterac
_ => CharacterTab::Gear(0) _ => CharacterTab::Gear(0)
} }
}, },
"charactertab_team" => CharacterTab::Team,
_ => CharacterTab::Home _ => CharacterTab::Home
}; };
x.defer(ctx).await.expect("TODO: panic message"); x.defer(ctx).await.expect("TODO: panic message");
@ -318,7 +376,8 @@ impl CharacterTab {
match self { match self {
CharacterTab::Home => "charactertab_home", CharacterTab::Home => "charactertab_home",
CharacterTab::Review => "charactertab_review", CharacterTab::Review => "charactertab_review",
CharacterTab::Gear(_) => "charactertab_gear" CharacterTab::Gear(_) => "charactertab_gear",
CharacterTab::Team => "charactertab_team"
} }
} }
} }