2020-09-08 18:29:15 +02:00
use serenity ::model ::channel ::ReactionType ;
use serenity ::model ::id ::{ ChannelId , EmojiId , GuildId } ;
2020-08-28 09:45:19 +02:00
use serenity ::model ::prelude ::* ;
use serenity ::prelude ::* ;
use serenity ::Client ;
#[ macro_use ]
extern crate lazy_static ;
struct Handler ;
lazy_static! {
static ref SERVER_ID : GuildId = GuildId ( std ::env ::args ( ) . nth ( 1 ) . unwrap ( ) . parse ( ) . unwrap ( ) ) ;
2020-09-08 18:29:15 +02:00
static ref MEME_CHANNEL : ChannelId =
ChannelId ( std ::env ::args ( ) . nth ( 2 ) . unwrap ( ) . parse ( ) . unwrap ( ) ) ;
2020-08-28 09:45:19 +02:00
}
impl EventHandler for Handler {
fn message ( & self , ctx : Context , message : Message ) {
2020-09-08 18:29:15 +02:00
if message . guild_id ! = Some ( * SERVER_ID ) {
return ;
}
if is_meme ( & message ) {
react ( & ctx , & message , 748564944449962017 , " based " ) ;
react ( & ctx , & message , 748564944819060856 , " cringe " ) ;
return ;
}
2020-08-28 10:05:52 +02:00
if is_based ( & message . content . to_lowercase ( ) ) {
2020-09-08 18:29:15 +02:00
react ( & ctx , & message , 748564944449962017 , " based " ) ;
2020-08-28 10:05:52 +02:00
}
if is_cringe ( & message . content . to_lowercase ( ) ) {
2020-09-08 18:29:15 +02:00
react ( & ctx , & message , 748564944819060856 , " cringe " ) ;
2020-08-28 09:45:19 +02:00
}
}
}
2020-09-08 18:29:15 +02:00
fn react ( ctx : & Context , msg : & Message , emoji : u64 , name : & str ) {
let reaction = ReactionType ::Custom {
animated : false ,
id : EmojiId ( emoji ) ,
name : Some ( name . to_string ( ) ) ,
} ;
if let Err ( e ) = msg . react ( ctx , reaction ) {
2020-08-28 10:05:52 +02:00
println! ( " Could not react, error was: {:?} " , e ) ;
}
}
2020-09-08 18:29:15 +02:00
fn is_meme ( msg : & Message ) -> bool {
msg . channel_id = = * MEME_CHANNEL
& & ( ! msg . attachments . is_empty ( ) | | msg . content . to_lowercase ( ) . contains ( " http " ) )
}
2020-08-28 09:45:19 +02:00
fn is_cringe ( s : & str ) -> bool {
2020-09-08 18:29:15 +02:00
s . contains ( " cringe " ) | | s . contains ( " cringy " )
2020-08-28 09:45:19 +02:00
}
fn is_based ( s : & str ) -> bool {
( s . contains ( " based " ) | | s . contains ( " basiert " ) ) & & ! s . contains ( " based on " )
}
pub fn main ( ) {
let mut client = Client ::new (
std ::env ::var ( " DISCORD_TOKEN " ) . expect ( " no token in environment " ) ,
Handler ,
)
. expect ( " Could not create client " ) ;
client . start ( ) . expect ( " could not start " ) ;
}