diff --git a/src/bot/commands/lobby.rs b/src/bot/commands/lobby.rs index d324459..0cb35c6 100644 --- a/src/bot/commands/lobby.rs +++ b/src/bot/commands/lobby.rs @@ -254,7 +254,7 @@ impl LobbyCommand { None => { interaction .edit_original_interaction_response(ctx, |response| { - response.content(format!("Failed to get players")) + response.content("Failed to get players") }) .await?; return Ok(()); @@ -263,12 +263,12 @@ impl LobbyCommand { let players = players .into_iter() - .map(|p| Player::new(p)) + .map(Player::new) .collect::>(); let slots = vec![ Role::Tank, - Role::DPS, - Role::DPS, + Role::Dps, + Role::Dps, Role::Support, Role::Support, ]; @@ -307,7 +307,7 @@ impl LobbyCommand { .iter() .sorted_by(|((a, _), _), ((b, _), _)| i32::from(*a).cmp(&i32::from(*b))) .map(|(_, i)| async { - if let Some(user) = players[i.unwrap()].discord_id.to_user(ctx).await.ok() { + if let Ok(user) = players[i.unwrap()].discord_id.to_user(ctx).await { user.name } else { players[i.unwrap()] @@ -322,7 +322,7 @@ impl LobbyCommand { .iter() .sorted_by(|((a, _), _), ((b, _), _)| i32::from(*a).cmp(&i32::from(*b))) .map(|(_, i)| async { - if let Some(user) = players[i.unwrap()].discord_id.to_user(ctx).await.ok() { + if let Ok(user) = players[i.unwrap()].discord_id.to_user(ctx).await { user.name } else { players[i.unwrap()] @@ -348,9 +348,10 @@ impl LobbyCommand { let team1_rank = team1.average_rating(&players); let team2_rank = team2.average_rating(&players); - image_gen.draw_teams_to_png( + image_gen.draw_teams_to_vec( player_names, [team1_rank.value as i32, team2_rank.value as i32], + image::ImageOutputFormat::Png ) }; @@ -607,25 +608,13 @@ impl LobbyCommand { .players .clone() .into_iter() - .filter_map(|((role, _), player)| { - if player.is_some() { - Some((role, player.unwrap())) - } else { - None - } - }) + .filter_map(|((role, _), player)| player.map(|id| (role, id))) .collect::>(); let team2 = team2 .players .clone() .into_iter() - .filter_map(|((role, _), player)| { - if player.is_some() { - Some((role, player.unwrap())) - } else { - None - } - }) + .filter_map(|((role, _), player)| player.map(|id| (role, id))) .collect::>(); let data = ctx.data.read().await; diff --git a/src/bot/commands/preference.rs b/src/bot/commands/preference.rs index 9aa618a..4ee8f1d 100644 --- a/src/bot/commands/preference.rs +++ b/src/bot/commands/preference.rs @@ -122,7 +122,7 @@ impl MixerCommand for PreferenceCommand { response .kind(InteractionResponseType::ChannelMessageWithSource) .interaction_response_data(|message| { - message.content(format!("User not found")).ephemeral(true) + message.content("User not found").ephemeral(true) }) }) .await?; diff --git a/src/bot/commands/rating.rs b/src/bot/commands/rating.rs index 9981041..86c1f4c 100644 --- a/src/bot/commands/rating.rs +++ b/src/bot/commands/rating.rs @@ -87,7 +87,7 @@ impl MixerCommand for RatingCommand { response .kind(InteractionResponseType::ChannelMessageWithSource) .interaction_response_data(|message| { - message.content(format!("User not found")).ephemeral(true) + message.content("User not found").ephemeral(true) }) }) .await?; @@ -126,14 +126,14 @@ impl MixerCommand for RatingCommand { .as_u64() .unwrap(); - if rating < 1 || rating > 5000 { + if !(1..=5000).contains(&rating) { interaction .create_interaction_response(ctx, |response| { response .kind(InteractionResponseType::ChannelMessageWithSource) .interaction_response_data(|message| { message - .content(format!("Rank must be between 1 and 5000")) + .content("Rank must be between 1 and 5000") .ephemeral(true) }) }) diff --git a/src/bot/commands/settings.rs b/src/bot/commands/settings.rs index e860594..e484b0e 100644 --- a/src/bot/commands/settings.rs +++ b/src/bot/commands/settings.rs @@ -79,8 +79,8 @@ impl SettingsCommand { let roles: HashMap<_, _, RandomState> = HashMap::from_iter( [ ("support", Role::Support), - ("damage", Role::DPS), - ("dps", Role::DPS), + ("damage", Role::Dps), + ("dps", Role::Dps), ("tank", Role::Tank), ] .into_iter(), diff --git a/src/bot/handlers/command_handler.rs b/src/bot/handlers/command_handler.rs index 7d78de2..98c5925 100644 --- a/src/bot/handlers/command_handler.rs +++ b/src/bot/handlers/command_handler.rs @@ -44,7 +44,7 @@ impl MixerCommandHandler { interaction.user.id, command.name() ); - return command.execute(&ctx, interaction).await; + return command.execute(ctx, interaction).await; } else { info!( "User {} ({}) executed unknown command \"{}\"", diff --git a/src/bot/mod.rs b/src/bot/mod.rs index 5b73310..cae78d6 100644 --- a/src/bot/mod.rs +++ b/src/bot/mod.rs @@ -64,9 +64,7 @@ impl EventHandler for MixerBot { let data = ctx.data.read().await; let db = data.get::().unwrap().read().await; - if let Some(_) = - LobbyQuery::lobby_by_channel_id(db.connection(), guild_id, channel_id).await - { + if LobbyQuery::lobby_by_channel_id(db.connection(), guild_id, channel_id).await.is_some() { if let Some(member) = new.member { if member.user.bot { return; diff --git a/src/database/models/role.rs b/src/database/models/role.rs index 9cf6552..ba2c043 100644 --- a/src/database/models/role.rs +++ b/src/database/models/role.rs @@ -6,7 +6,7 @@ pub enum Role { #[sea_orm(string_value = "tank")] Tank, #[sea_orm(string_value = "dps")] - DPS, + Dps, #[sea_orm(string_value = "support")] Support, } @@ -15,7 +15,7 @@ impl From for String { fn from(role: Role) -> Self { match role { Role::Tank => "tank".to_string(), - Role::DPS => "dps".to_string(), + Role::Dps => "dps".to_string(), Role::Support => "support".to_string(), } } @@ -27,7 +27,7 @@ impl TryFrom<&str> for Role { fn try_from(role: &str) -> Result { match role { "tank" => Ok(Role::Tank), - "dps" => Ok(Role::DPS), + "dps" => Ok(Role::Dps), "support" => Ok(Role::Support), _ => Err(()), } @@ -38,7 +38,7 @@ impl From for i32 { fn from(role: Role) -> Self { match role { Role::Tank => 0, - Role::DPS => 1, + Role::Dps => 1, Role::Support => 2, } } diff --git a/src/database/queries/player.rs b/src/database/queries/player.rs index 79a9cb9..7460779 100644 --- a/src/database/queries/player.rs +++ b/src/database/queries/player.rs @@ -73,7 +73,7 @@ impl Query { player.tank_rd = Set(rating.rd); player.tank_volatility = Set(rating.volatility); } - Role::DPS => { + Role::Dps => { player.dps_rating = Set(rating.value); player.dps_rd = Set(rating.rd); player.dps_volatility = Set(rating.volatility); diff --git a/src/image_manipulation.rs b/src/image_manipulation.rs index 5e86f1a..921ae9f 100644 --- a/src/image_manipulation.rs +++ b/src/image_manipulation.rs @@ -1,8 +1,8 @@ -use image::{codecs::png, ImageEncoder}; +use image::ImageOutputFormat; use imageproc::drawing::text_size; use rusttype::{Font, Scale}; use serenity::prelude::TypeMapKey; -use std::{io::BufWriter, sync::Arc}; +use std::{io::Cursor, sync::Arc}; pub struct ImageGenerator<'a> { pub player_font: Font<'a>, @@ -11,7 +11,7 @@ pub struct ImageGenerator<'a> { } impl<'a> ImageGenerator<'a> { - pub fn draw_teams_to_png(&self, player_names: Vec, teams_rating: [i32; 2]) -> Vec { + pub fn draw_teams_to_vec(&self, player_names: Vec, teams_rating: [i32; 2], format: ImageOutputFormat) -> Vec { let mut image: image::ImageBuffer, Vec> = self.teams_image.clone(); let player_text_scale = Scale::uniform(60.0); @@ -47,8 +47,8 @@ impl<'a> ImageGenerator<'a> { } let rating_text_scale = Scale::uniform(86.5); - for i in 0..2 { - let rating = teams_rating[i].to_string(); + for (i, rating) in teams_rating.iter().enumerate() { + let rating = rating.to_string(); let size = text_size(rating_text_scale, &self.player_font, &rating); imageproc::drawing::draw_text_mut( @@ -62,16 +62,11 @@ impl<'a> ImageGenerator<'a> { ); } - let mut buf = BufWriter::new(Vec::new()); - png::PngEncoder::new(&mut buf) - .write_image( - image.as_raw(), - image.width(), - image.height(), - image::ColorType::Rgb8, - ) - .unwrap(); - buf.into_inner().unwrap() + + let mut buf = Cursor::new(Vec::new()); + image.write_to(&mut buf, format).unwrap(); + + buf.into_inner() } } diff --git a/src/mixer/mixer.rs b/src/mixer/mixer.rs index 75b13a9..9feb36b 100644 --- a/src/mixer/mixer.rs +++ b/src/mixer/mixer.rs @@ -30,14 +30,14 @@ fn get_role_entries( let (tanks, rest) = entries .into_iter() .partition::, _>(|e| e.role == Role::Tank); - let (dps, supports) = rest.into_iter().partition(|e| e.role == Role::DPS); + let (dps, supports) = rest.into_iter().partition(|e| e.role == Role::Dps); (tanks, dps, supports) } fn get_combinations(entries: &[PlayerRoleEntry], count: usize) -> Vec> { entries - .into_iter() + .iter() .combinations(count) .sorted_by(|a, b| { let a = a.iter().map(|e| e.priority).sum::(); @@ -55,7 +55,7 @@ pub fn mix_players(players: &[Player], slots: Vec) -> Option<(Team, Team)> let tank_count = slots.iter().filter(|r| **r == Role::Tank).count(); let support_count = slots.iter().filter(|r| **r == Role::Support).count(); - let dps_count = slots.iter().filter(|r| **r == Role::DPS).count(); + let dps_count = slots.iter().filter(|r| **r == Role::Dps).count(); let tank_combos = get_combinations(&tanks, tank_count); let dps_combos = get_combinations(&dps, dps_count); diff --git a/src/mixer/player.rs b/src/mixer/player.rs index ba98a8c..8a6d1fd 100644 --- a/src/mixer/player.rs +++ b/src/mixer/player.rs @@ -36,7 +36,7 @@ impl Player { Rating::new(model.tank_rating, model.tank_rd, model.tank_volatility), ), ( - Role::DPS, + Role::Dps, Rating::new(model.dps_rating, model.dps_rd, model.dps_volatility), ), ( @@ -77,7 +77,7 @@ impl Player { for (i, role) in self.priority_roles.iter().enumerate() { if let Some(role) = role { - priorities.insert(role.clone(), priority_points / (i + 1) as f32); + priorities.insert(*role, priority_points / (i + 1) as f32); } } diff --git a/src/mixer/team.rs b/src/mixer/team.rs index be0bcbd..07bb10d 100644 --- a/src/mixer/team.rs +++ b/src/mixer/team.rs @@ -47,7 +47,7 @@ impl Team { } pub fn count_role(&self, role: &Role) -> usize { - self.count_role.get(role).unwrap().clone() + *self.count_role.get(role).unwrap() } pub fn full_rating(&self, players: &[Player]) -> Rating { @@ -55,7 +55,7 @@ impl Team { .iter() .map(|((role, _), index)| { if let Some(index) = index { - players[*index].ranks.get(role).unwrap().clone() + *players[*index].ranks.get(role).unwrap() } else { Rating::zero() } @@ -64,7 +64,7 @@ impl Team { } pub fn average_rating(&self, players: &[Player]) -> Rating { - if self.players.len() == 0 { + if self.players.is_empty() { return Rating::zero(); } @@ -77,7 +77,7 @@ impl Team { .filter(|((r, _), _)| r == role) .map(|((_, _), index)| { if let Some(index) = index { - players[*index].ranks.get(&role).unwrap().clone() + *players[*index].ranks.get(role).unwrap() } else { Rating::zero() }