stat_summoner/module/championsinfos/
utils.rs1use mongodb::Collection;
2use poise::serenity_prelude::{CreateEmbed, CreateEmbedFooter};
3use serde_json::Value;
4
5use crate::models::data::{ChampionData, EmojiId};
6use crate::models::error::Error;
7use crate::utils::get_emoji;
8
9pub async fn create_embed_champions_info(
71 champion_data: ChampionData,
72 collection_emoji: &Collection<EmojiId>,
73) -> Result<CreateEmbed, Error> {
74 let primary_rune_emoji = get_emoji(
75 collection_emoji.clone(),
76 "rune",
77 &champion_data.runes.parent_primary_rune,
78 )
79 .await?;
80
81 let child_primary_rune_1_emoji = get_emoji(
82 collection_emoji.clone(),
83 "rune",
84 &champion_data.runes.child_primary_rune_1,
85 )
86 .await?;
87
88 let child_primary_rune_2_emoji = get_emoji(
89 collection_emoji.clone(),
90 "rune",
91 &champion_data.runes.child_primary_rune_2,
92 )
93 .await?;
94
95 let child_primary_rune_3_emoji = get_emoji(
96 collection_emoji.clone(),
97 "rune",
98 &champion_data.runes.child_primary_rune_3,
99 )
100 .await?;
101
102 let child_secondary_rune_1_emoji = get_emoji(
103 collection_emoji.clone(),
104 "rune",
105 &champion_data.runes.child_secondary_rune_1,
106 )
107 .await?;
108
109 let child_secondary_rune_2_emoji = get_emoji(
110 collection_emoji.clone(),
111 "rune",
112 &champion_data.runes.child_secondary_rune_2,
113 )
114 .await?;
115
116 let tertiary_rune_1_emoji = get_emoji(
118 collection_emoji.clone(),
119 "rune",
120 &champion_data.runes.tertiary_rune_1,
121 )
122 .await?;
123
124 let tertiary_rune_2_emoji = get_emoji(
125 collection_emoji.clone(),
126 "rune",
127 &champion_data.runes.tertiary_rune_2,
128 )
129 .await?;
130
131 let tertiary_rune_3_emoji = get_emoji(
132 collection_emoji.clone(),
133 "rune",
134 &champion_data.runes.tertiary_rune_3,
135 )
136 .await?;
137
138 let core_item_1_emoji = get_emoji(
140 collection_emoji.clone(),
141 "item",
142 &champion_data.core_build.first,
143 )
144 .await?;
145
146 let core_item_2_emoji = get_emoji(
147 collection_emoji.clone(),
148 "item",
149 &champion_data.core_build.second,
150 )
151 .await?;
152
153 let core_item_3_emoji = get_emoji(
154 collection_emoji.clone(),
155 "item",
156 &champion_data.core_build.third,
157 )
158 .await?;
159
160 let popularity = champion_data.popularity.parse::<f64>().unwrap_or(0.0) * 100.0;
161 let winrate = champion_data.winrate.parse::<f64>().unwrap_or(0.0) * 100.0;
162 let banrate = champion_data.banrate.parse::<f64>().unwrap_or(0.0) * 100.0;
163
164 let runes_description = format!(
165 "**Primary Rune:** {}\n{} {} {}\n\n**Secondary Runes:** \n{} {}\n\n**Shards:** {} {} {}",
166 primary_rune_emoji,
167 child_primary_rune_1_emoji,
168 child_primary_rune_2_emoji,
169 child_primary_rune_3_emoji,
170 child_secondary_rune_1_emoji,
171 child_secondary_rune_2_emoji,
172 tertiary_rune_1_emoji,
173 tertiary_rune_2_emoji,
174 tertiary_rune_3_emoji
175 );
176
177 let core_build_description = format!(
178 "{} {} {}",
179 core_item_1_emoji, core_item_2_emoji, core_item_3_emoji
180 );
181 let version_json: Value = reqwest::get("https://ddragon.leagueoflegends.com/api/versions.json")
182 .await?
183 .json()
184 .await?;
185 let version = version_json[0].as_str().unwrap();
186 let embed = CreateEmbed::default()
187 .title(format!("Informations about {}", champion_data.name))
188 .color(0x00ff00)
189 .field("Role", champion_data.role.join(", "), false)
190 .field("Winrate", format!("{:.2}%", winrate), true)
191 .field("Banrate", format!("{:.2}%", banrate), true)
192 .field("Popularity", format!("{:.2}%", popularity), true)
193 .field("Runes", runes_description, false)
194 .field("Build", core_build_description, false)
195 .footer(CreateEmbedFooter::new(
196 "This message will be deleted in 60 seconds.",
197 ))
198 .thumbnail(format!(
199 "https://ddragon.leagueoflegends.com/cdn/{}/img/champion/{}.png",
200 version, champion_data.id_name
201 ));
202
203 Ok(embed)
204}