Compare commits

...

2 Commits

Author SHA1 Message Date
Edward Shen 408cd38d4c
improve desu 2020-05-02 03:06:43 -04:00
Edward Shen ea414b0577
add reeeee 2020-05-02 03:06:32 -04:00
4 changed files with 78 additions and 21 deletions

BIN
src/desu.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

View File

@ -1,19 +1,39 @@
use crate::simple_responder;
use futures::future::BoxFuture;
use lazy_static::lazy_static;
use regex::Regex;
use serenity::async_trait;
use serenity::model::channel::Message;
use serenity::prelude::{Context, EventHandler};
// Yes, the blocks are necessary, rustc is bugged; check macro declaration
// for more info.
simple_responder!(FufufuResponder, r"(?:[fF][uU]){3,}", { get_desu() });
lazy_static! {
static ref REGEX: Regex = Regex::new("(?:[fF][uU]){3,}").unwrap();
}
const DESU_STRINGS: &[&str] = &[
"です。",
"desu~",
"desu.",
r#"
pub(crate) struct FufufuResponder;
#[async_trait]
impl EventHandler for FufufuResponder {
async fn message(&self, ctx: Context, message: Message) {
if REGEX.is_match(&message.content_safe(ctx.clone()).await) {
use rand::seq::SliceRandom;
use rand::thread_rng;
let random_action = DESU_ACTIONS.choose(&mut thread_rng()).unwrap().clone();
let random_action = random_action(ctx, message);
random_action.await.unwrap();
}
}
}
type DesuAction<'r, T> = &'r (dyn Fn(Context, Message) -> T + Sync);
const DESU_ACTIONS: &[DesuAction<BoxFuture<Result<Message, serenity::Error>>>] = &[
&|ctx, msg| Box::pin(msg.channel_id.say(ctx, "です。")),
&|ctx, msg| Box::pin(msg.channel_id.say(ctx, "desu~")),
&|ctx, msg| Box::pin(msg.channel_id.say(ctx, "desu.")),
&|ctx, msg| {
Box::pin(msg.channel_id.say(
ctx,
r#"
```
      
          
@ -25,16 +45,22 @@ const DESU_STRINGS: &[&str] = &[
              
             
```"#,
))
},
&|ctx, msg| {
// https://imgur.com/a/yOb5n
// One day.
Box::pin(
msg.channel_id
.say(ctx, "https://www.youtube.com/watch?v=60mLvBWOMb4"),
)
},
&|ctx, msg| {
Box::pin(msg.channel_id.send_message(ctx, |m| {
m.add_file(serenity::http::AttachmentType::Bytes {
data: std::borrow::Cow::from(&include_bytes!("../desu.jpg")[..]),
filename: "desu.jpg".to_string(),
})
}))
},
];
fn get_desu() -> &'static str {
use rand::seq::SliceRandom;
use rand::thread_rng;
DESU_STRINGS.choose(&mut thread_rng()).unwrap()
// // https://imgur.com/a/yOb5n
// messageList.add(channel -> channel.sendMessage(new MessageBuilder()
// .setContent("https://www.youtube.com/watch?v=60mLvBWOMb4").build()));
// messageList.add(channel -> channel.sendFile(Desu.class.getResourceAsStream("/desu/desu.jpg"), "desu.jpg"));
// messageList.add(channel -> channel.sendMessage("desu~"));
}

View File

@ -1,6 +1,7 @@
use ahhhh::YellResponder;
use best_doctor::BestDoctorResponder;
use fufufu::FufufuResponder;
use reee::ReeeResponder;
use serenity::async_trait;
use serenity::model::channel::Message;
use serenity::prelude::{Context, EventHandler};
@ -8,6 +9,7 @@ use serenity::prelude::{Context, EventHandler};
mod ahhhh;
mod best_doctor;
mod fufufu;
mod reee;
pub(crate) struct Handler {
responders: Vec<Box<dyn EventHandler>>,
@ -20,6 +22,7 @@ impl Default for Handler {
Box::new(BestDoctorResponder),
Box::new(FufufuResponder),
Box::new(YellResponder),
Box::new(ReeeResponder),
],
}
}

28
src/passive/reee.rs Normal file
View File

@ -0,0 +1,28 @@
use lazy_static::lazy_static;
use regex::Regex;
use serenity::async_trait;
use serenity::model::channel::Message;
use serenity::prelude::{Context, EventHandler};
lazy_static! {
static ref REGEX: Regex = Regex::new("RE{5,}").unwrap();
}
pub(crate) struct ReeeResponder;
#[async_trait]
impl EventHandler for ReeeResponder {
async fn message(&self, ctx: Context, message: Message) {
if REGEX.is_match(&message.content_safe(ctx.clone()).await) {
if let Some(guild_id) = message.guild_id {
if guild_id == 679888177951277102 {
message
.channel_id
.say(ctx, "<:texaspat:680231475928498217>")
.await
.unwrap();
}
}
}
}
}