aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2020-10-30 12:58:50 -0700
committerFuwn <[email protected]>2020-10-30 12:58:50 -0700
commit3ca642734629b108ece241ea9644f5ed1ee339cb (patch)
tree515fc5c33c62eb4ab970f3d3e5bb7f40ff417df1 /src
parentchore: change cc env vars file type, (md -> txt) (diff)
downloaddep-core-next-3ca642734629b108ece241ea9644f5ed1ee339cb.tar.xz
dep-core-next-3ca642734629b108ece241ea9644f5ed1ee339cb.zip
feat (desc)
feat: - add `Procfile` and `app.json` to "prep" for heroku (probably not going to go to heroku though). - implement a plugin system and enable `random_hi` plugin. - move webserver to seperate location
Diffstat (limited to 'src')
-rw-r--r--src/core/handler.rs6
-rw-r--r--src/core/mod.rs1
-rw-r--r--src/core/model.rs12
-rw-r--r--src/lib.rs5
-rw-r--r--src/macros.rs9
-rw-r--r--src/modules/mod.rs1
-rw-r--r--src/modules/plugins/macros.rs11
-rw-r--r--src/modules/plugins/mod.rs3
-rw-r--r--src/modules/plugins/random_hi.rs18
-rw-r--r--src/webserver/mod.rs2
-rw-r--r--src/webserver/model.rs15
-rw-r--r--src/webserver/rocket.rs (renamed from src/core/webserver.rs)20
-rw-r--r--src/wisp.rs16
13 files changed, 106 insertions, 13 deletions
diff --git a/src/core/handler.rs b/src/core/handler.rs
index 7fbb005..e1d1a12 100644
--- a/src/core/handler.rs
+++ b/src/core/handler.rs
@@ -5,6 +5,7 @@ use crate::core::consts::DB as db;
use crate::core::model::*;
use crate::core::utils::*;
use crate::db::models::UserUpdate;
+use crate::modules::plugins::*;
use levenshtein::levenshtein;
use rand::prelude::*;
use serenity::CACHE;
@@ -107,7 +108,7 @@ impl EventHandler for Handler {
info!("Caching complete.");
}
- fn message(&self, _ctx: Context, message: Message) {
+ fn message(&self, ctx: Context, message: Message) {
// check_error!(message.guild().unwrap().read()
// .edit_member(712088369206919269, |member| member.nickname("Wisp")));
@@ -118,6 +119,9 @@ impl EventHandler for Handler {
if message.mention_everyone {
check_error!(message.react("👀"))
}
+
+ exec_on_message!([&ctx, &message],
+ random_hi);
}
fn message_delete(&self, _: Context, channel_id: ChannelId, message_id: MessageId) {
diff --git a/src/core/mod.rs b/src/core/mod.rs
index 3abe541..2ddcba0 100644
--- a/src/core/mod.rs
+++ b/src/core/mod.rs
@@ -6,4 +6,3 @@ pub mod handler;
pub mod model;
pub mod timers;
pub mod utils;
-// pub mod webserver;
diff --git a/src/core/model.rs b/src/core/model.rs
index 1b19f13..e90f5e1 100644
--- a/src/core/model.rs
+++ b/src/core/model.rs
@@ -5,10 +5,12 @@ use serenity::client::bridge::{
gateway::ShardManager,
// voice::ClientVoiceManager
};
+// use serenity::model::id::{UserId, GuildId};
use serenity::model::id::UserId;
use serenity::prelude::Mutex;
// use serenity::voice;
use std::sync::Arc;
+// use std::collections::HashSet;
use typemap::Key;
pub struct Owner;
@@ -40,3 +42,13 @@ impl Key for TC {
// impl Key for VoiceManager {
// type Value = Arc<Mutex<ClientVoiceManager>>;
// }
+
+// pub struct Lavalink;
+// impl Key for Lavalink {
+// type Value = Arc<Mutex<LavalinkClient>>;
+// }
+
+// pub struct VoiceGuildUpdate;
+// impl Key for VoiceGuildUpdate {
+// type Value = Arc<RwLock<HashSet<GuildId>>>;
+// }
diff --git a/src/lib.rs b/src/lib.rs
index ec43ea4..3ec9c47 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,12 +1,11 @@
#![recursion_limit = "128"]
#![allow(proc_macro_derive_resolution_fallback)]
-// #![feature(decl_macro)]
+#![feature(decl_macro, async_closure)]
#[macro_use] extern crate diesel;
#[macro_use] extern crate lazy_static;
#[macro_use] extern crate log;
#[macro_use] extern crate serde_derive;
-// #[macro_use] extern crate rocket;
extern crate serenity;
extern crate chrono;
extern crate forecast;
@@ -25,11 +24,13 @@ extern crate threadpool;
extern crate typemap;
extern crate urbandictionary;
// extern crate rocket_contrib;
+// extern crate tokio;
pub mod macros;
pub mod core;
pub mod db;
pub mod modules;
+// pub mod webserver;
pub mod wisp; // Client
pub use crate::wisp::WispClient;
diff --git a/src/macros.rs b/src/macros.rs
index 8b4d3af..05ce731 100644
--- a/src/macros.rs
+++ b/src/macros.rs
@@ -17,3 +17,12 @@ macro_rules! failed {
macro_rules! now {
() => { Utc::now().format("%FT%T").to_string() };
}
+
+macro_rules! exec_on_message {
+ ([$ctx:expr, $message:expr], $($plugin:ident), *) => {{
+ // use utils::config::get_pool;
+ // let pool = get_pool(&$ctx);
+
+ $($plugin::on_message($ctx, /* &pool, */ $message);)*
+ }}
+}
diff --git a/src/modules/mod.rs b/src/modules/mod.rs
index 82b6da3..af500d5 100644
--- a/src/modules/mod.rs
+++ b/src/modules/mod.rs
@@ -1 +1,2 @@
pub mod commands;
+pub mod plugins;
diff --git a/src/modules/plugins/macros.rs b/src/modules/plugins/macros.rs
new file mode 100644
index 0000000..f28cf7c
--- /dev/null
+++ b/src/modules/plugins/macros.rs
@@ -0,0 +1,11 @@
+#![macro_use]
+
+#[macro_export]
+macro_rules! exec_on_message {
+ ([$ctx:expr, $message:expr], $($plugin:ident), *) => {{
+ // use utils::config::get_pool;
+ // let pool = get_pool(&$ctx);
+
+ $($plugin::on_message($ctx, /* &pool, */ $message);)*
+ }}
+}
diff --git a/src/modules/plugins/mod.rs b/src/modules/plugins/mod.rs
new file mode 100644
index 0000000..10e3e24
--- /dev/null
+++ b/src/modules/plugins/mod.rs
@@ -0,0 +1,3 @@
+// #[macro_use] pub mod macros;
+
+pub mod random_hi;
diff --git a/src/modules/plugins/random_hi.rs b/src/modules/plugins/random_hi.rs
new file mode 100644
index 0000000..ff2b7e5
--- /dev/null
+++ b/src/modules/plugins/random_hi.rs
@@ -0,0 +1,18 @@
+use serenity::model::channel::Message;
+use serenity::prelude::Context;
+use rand::{thread_rng, Rng};
+
+pub fn on_message(_ctx: &Context, message: &Message) {
+ let greatings = vec!["hi", "hey", "hello", "hei", "yo"];
+ let message_content: &str = &message.content.to_lowercase();
+ if !greatings.contains(&message_content) || message.author.bot {
+ return ();
+ }
+
+ let mut rng = thread_rng();
+ let n: u32 = rng.gen_range(0, 16);
+
+ if n == 1 {
+ let _ = message.channel_id.say("Hi!");
+ }
+}
diff --git a/src/webserver/mod.rs b/src/webserver/mod.rs
new file mode 100644
index 0000000..526a59d
--- /dev/null
+++ b/src/webserver/mod.rs
@@ -0,0 +1,2 @@
+pub mod model;
+pub mod rocket;
diff --git a/src/webserver/model.rs b/src/webserver/model.rs
new file mode 100644
index 0000000..260f1f5
--- /dev/null
+++ b/src/webserver/model.rs
@@ -0,0 +1,15 @@
+use serenity::framework::standard::Command;
+use serenity::prelude::Mutex;
+use std::collections::HashMap;
+use std::sync::Arc;
+use typemap::TypeMap;
+
+pub type WispResult<T = ()> = Result<T, Box<dyn std::error::Error + Send + Sync>>;
+pub type CommandMap = HashMap<String, dyn Command>;
+
+#[derive(Clone)]
+pub struct WispData {
+ // pub writer: Arc<Mutex<Writer>>,
+ // pub commands: CommandMap,
+ pub data: Arc<Mutex<TypeMap>>
+}
diff --git a/src/core/webserver.rs b/src/webserver/rocket.rs
index 0234fda..ac7401b 100644
--- a/src/core/webserver.rs
+++ b/src/webserver/rocket.rs
@@ -1,7 +1,17 @@
use rocket::response::content;
+use rocket::{State, get, post, request::Form, routes};
use rocket::response::NamedFile;
-// use serenity::prelude::*;
// use std::sync::Arc;
+use crate::webserver::model::*;
+
+pub async fn start_rocket() -> WispResult { // ctx: WispData
+ rocket::ignite()
+ .mount("/", routes![
+ icon, index
+ ]).launch();
+
+ Ok(())
+}
#[get("/favicon.ico")]
pub fn icon() -> Option<NamedFile> {
@@ -12,11 +22,3 @@ pub fn icon() -> Option<NamedFile> {
pub fn index() -> content::Json<&'static str> {
content::Json("{\"message\": \"online\"}")
}
-
-// #[get("/")]
-// pub fn get_context() -> content::Json<&'static str> {
-// let ctx = Arc::new(Context);
-// let ctx_clone = Arc::clone(&ctx);
-
-// content::Json(format!("{\"message\": \"{}\"}", data))
-// }
diff --git a/src/wisp.rs b/src/wisp.rs
index e1f2310..f870bda 100644
--- a/src/wisp.rs
+++ b/src/wisp.rs
@@ -5,6 +5,10 @@ use crate::core::{
framework::WispFramework,
timers
};
+// use crate::webserver::{
+// model::*,
+// rocket::*
+// };
use serenity::Error as SerenityError;
use serenity::http;
use serenity::model::id::UserId;
@@ -16,6 +20,7 @@ use std::sync::Arc;
pub struct WispClient(Client);
impl WispClient {
+ // #[tokio::main]
pub fn new() -> Self {
let token = env::var("DISCORD_TOKEN").expect("Expected Discord bot token in environment.");
let mut client = Client::new(&token, Handler).expect("Unable to initialize Wisp client.");
@@ -38,6 +43,17 @@ impl WispClient {
},
Err(why) => panic!("Couldn't get the application info: {:?}", why),
};
+
+ // let bot = WispData {
+ // data: Arc::new(Mutex::new(TypeMap::new()))
+ // };
+ // let bot_clone = bot.clone();
+ // unsafe {
+ // tokio::spawn(async move {
+ // let _ = start_rocket(bot_clone);
+ // });
+ // }
+
client.with_framework(WispFramework::new(owners));
WispClient(client)
}