silly goober bot
at main 49 lines 1.5 kB view raw
1use crate::types::Context; 2use color_eyre::eyre::Result; 3use poise::serenity_prelude::{OnlineStatus, UserId}; 4use rand::Rng; 5 6/// Rolls dice based on given # of sides 7#[poise::command(slash_command)] 8pub async fn roll( 9 ctx: Context<'_>, 10 #[description = "# of sides"] sides: Option<u32>, 11) -> Result<()> { 12 let sides = sides.unwrap_or(6); 13 let roll = rand::rng().random_range(1..=sides); 14 ctx.say(format!("You rolled a **{roll}**")).await?; 15 Ok(()) 16} 17 18/// Select a random person to win a raffle 19#[poise::command(slash_command)] 20pub async fn raffle(ctx: Context<'_>) -> Result<()> { 21 let mut memeberid: UserId = UserId::new(1); 22 23 let members = ctx 24 .guild_id() 25 .unwrap() 26 .members(&ctx.http(), None, None) 27 .await?; 28 29 let mut find_member = false; 30 while !find_member { 31 let selected = rand::rng().random_range(1..=members.len()); 32 let memeber = &members[selected].user; 33 memeberid = memeber.id; 34 35 if let Some(presence) = ctx.guild().unwrap().presences.get(&memeberid) { 36 find_member = presence.status == OnlineStatus::Online 37 || presence.status == OnlineStatus::Idle 38 && !memeber.bot 39 && memeberid != ctx.author().id; 40 } 41 } 42 43 if Some(memeberid).is_some() && memeberid != UserId::new(1) { 44 ctx.say(format!("<@{memeberid}> has won the raffle")) 45 .await?; 46 } 47 48 Ok(()) 49}