diff --git a/src/main.rs b/src/main.rs index d177a3e91a285cff41498aaad18126a6ca105fc6..9276f6b156ecc606f4c05d997b1249c3a737bd21 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,6 +15,9 @@ static MAIN_CHANNEL: serenity::model::id::ChannelId = // #the-corner static WELCOME_CHANNEL: serenity::model::id::ChannelId = serenity::model::id::ChannelId(606351613816209418); +// #general +static ANNOUNCEMENT_CHANNEL: serenity::model::id::ChannelId = + serenity::model::id::ChannelId(606351521117896706); static BOT_ID: u64 = 607078903969742848; @@ -261,6 +264,7 @@ fn update_motion( let old_embed = msg.embeds[0].clone(); let topic = old_embed.clone().title.unwrap(); + println!( " {:10} {:6} {} on {}", user.name, @@ -268,11 +272,38 @@ fn update_motion( reaction.emoji.as_data().as_str(), topic ); + + let update_status = |e: &mut serenity::builder::CreateEmbed, + status: &str, + last_status_full: String, + topic: &str| { + let last_status = last_status_full.lines().next().expect("No previous status"); + if last_status == status { + e.field("Status", last_status_full, true); + } else { + e.field( + "Status", + format!("{}\n_was_ {}", status, last_status_full), + true, + ); + println!("Motion to {} now {}", topic, status); + // + let mut message = MessageBuilder::new(); + message.push_bold(topic); + message.push(" is now "); + message.push_bold(status); + message.push_italic(format!(" (was {})", last_status)); + if let Err(why) = ANNOUNCEMENT_CHANNEL.say(&ctx.http, message.build()) { + println!("Error sending message: {:?}", why); + }; + } + }; + if let Err(why) = msg.edit(ctx, |m| { m.embed(|e| { e.title(&topic); e.description(old_embed.description.unwrap()); - let last_status = old_embed + let last_status_full = old_embed .fields .iter() .filter(|f| f.name == "Status") @@ -282,23 +313,13 @@ fn update_motion( .value; if for_strength > (VOTE_POOL_SIZE / 2) as f32 { e.colour(serenity::utils::Colour::TEAL); - e.field("Status", format!("Passed\n_was_ {}", last_status), true); - println!("Motion to {} PASSED", &topic) + update_status(e, "Passed", last_status_full, &topic); } else if against_strength + abstain_strength > (VOTE_POOL_SIZE / 2) as f32 { e.colour(serenity::utils::Colour::RED); - e.field("Status", format!("Failed\n_was_ {}", last_status), true); - println!("Motion to {} FAILED", &topic) + update_status(e, "Failed", last_status_full, &topic); } else { e.colour(serenity::utils::Colour::GOLD); - e.field( - "Status", - if last_status != "Under Consideration" { - format!("Under Consideration\n_was_ {}", last_status) - } else { - "Under Consideration".to_string() - }, - true, - ); + update_status(e, "Under Consideration", last_status_full, &topic); } e.field( format!(