silly goober bot
at main 73 lines 2.1 kB view raw
1use color_eyre::eyre::{eyre, Result}; 2use poise::serenity_prelude::{Context, FullEvent}; 3use serenity::all::{ChannelId, Member, RoleId, UserId}; 4 5use crate::types::Data; 6 7pub async fn handle(ctx: &Context, event: &FullEvent, _data: &Data) -> Result<()> { 8 if let FullEvent::GuildMemberAddition { new_member } = event { 9 if new_member.guild_id != 1095080242219073606 { 10 return Ok(()); 11 } 12 13 if new_member.user.bot { 14 return Ok(()); 15 } 16 17 warn_onboarding(ctx, &new_member.user.id).await?; 18 } 19 20 if let FullEvent::GuildMemberUpdate { 21 old_if_available: _, 22 new: Some(member), 23 event: _, 24 } = event 25 { 26 if member.user.bot { 27 return Ok(()); 28 } 29 30 // check if the user does not have the kitten role 31 if !member.roles.iter().any(|role| *role == 1249814690486423612) { 32 // check if the user has the pronouns role 33 if member 34 .roles 35 .iter() 36 .filter(|role| is_pronouns_role(**role)) 37 .count() 38 > 0 39 { 40 add_kitten_role(ctx, member).await?; 41 } 42 } 43 } 44 45 Ok(()) 46} 47 48async fn warn_onboarding(ctx: &Context, user_id: &UserId) -> Result<(), color_eyre::eyre::Error> { 49 ChannelId::new(1095084404168200302) 50 .say( 51 ctx, 52 format!( 53 "Welcome to the server, <@{user_id}>!\nPlease select your roles and pronouns from onboarding to get started." 54 ), 55 ) 56 .await?; 57 58 Ok(()) 59} 60 61async fn add_kitten_role(ctx: &Context, member: &Member) -> Result<()> { 62 member 63 .add_role(ctx, RoleId::new(1249814690486423612)) 64 .await 65 .map_err(|e| eyre!("Failed to add role: {}", e)) 66} 67 68fn is_pronouns_role(role: RoleId) -> bool { 69 role == 1095084950107209728 // she/her 70 || role == 1095085000241709217 // he/him 71 || role == 1095085169381232770 // they/them 72 || role == 1095085419265269922 // ask for pronouns 73}