diff --git a/.idea/dictionaries/jude.xml b/.idea/dictionaries/jude.xml
index 67a690d..ac7ff8c 100644
--- a/.idea/dictionaries/jude.xml
+++ b/.idea/dictionaries/jude.xml
@@ -3,6 +3,7 @@
reqwest
todos
+ webhook
webhooks
diff --git a/Cargo.lock b/Cargo.lock
index ad3b2c1..cdbe603 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -205,6 +205,16 @@ dependencies = [
"time",
]
+[[package]]
+name = "chrono-tz"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65d96be7c3e993c9ee4356442db24ba364c924b6b8331866be6b6952bfe74b9d"
+dependencies = [
+ "chrono",
+ "parse-zoneinfo",
+]
+
[[package]]
name = "command_attr"
version = "0.2.0"
@@ -912,6 +922,15 @@ dependencies = [
"vcpkg",
]
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
+dependencies = [
+ "regex",
+]
+
[[package]]
name = "percent-encoding"
version = "2.1.0"
@@ -1071,6 +1090,8 @@ name = "reminder_rs"
version = "0.1.0"
dependencies = [
"async-trait",
+ "chrono",
+ "chrono-tz",
"dotenv",
"log",
"regex",
diff --git a/Cargo.toml b/Cargo.toml
index 63ec92c..c6c7e71 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,6 +13,8 @@ sqlx = {version = "0.3.5", default-features = false, features = ["runtime-tokio"
regex = "1.3.9"
async-trait = "0.1.36"
log = "0.4.11"
+chrono = "0.4"
+chrono-tz = "0.5"
[dependencies.regex_command_attr]
path = "./regex_command_attr"
diff --git a/src/commands/mod.rs b/src/commands/mod.rs
index 9363010..22b6f31 100644
--- a/src/commands/mod.rs
+++ b/src/commands/mod.rs
@@ -1,3 +1,4 @@
pub mod info_cmds;
pub mod reminder_cmds;
pub mod todo_cmds;
+pub mod moderation_cmds;
diff --git a/src/commands/moderation_cmds.rs b/src/commands/moderation_cmds.rs
new file mode 100644
index 0000000..28c94a8
--- /dev/null
+++ b/src/commands/moderation_cmds.rs
@@ -0,0 +1,25 @@
+use regex_command_attr::command;
+
+use serenity::{
+ client::Context,
+ model::{
+ channel::{
+ Message,
+ },
+ },
+ framework::standard::CommandResult,
+};
+
+use crate::SQLPool;
+
+#[command]
+#[supports_dm(false)]
+#[permission_level(Restricted)]
+async fn blacklist(ctx: &Context, msg: &Message, args: String) -> CommandResult {
+ let pool = ctx.data.read().await
+ .get::().cloned().expect("Could not get SQLPool from data");
+
+ if
+
+ Ok(())
+}
diff --git a/src/commands/todo_cmds.rs b/src/commands/todo_cmds.rs
index 0f51c93..7b34e2f 100644
--- a/src/commands/todo_cmds.rs
+++ b/src/commands/todo_cmds.rs
@@ -179,6 +179,7 @@ enum SubCommand {
}
#[command]
+#[permission_level(Managed)]
async fn todo_parse(ctx: &Context, msg: &Message, args: String) -> CommandResult {
let mut split = args.split(" ");
diff --git a/src/main.rs b/src/main.rs
index 86820ae..4c22000 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,3 +1,4 @@
+mod models;
mod framework;
mod commands;
@@ -29,6 +30,7 @@ use crate::commands::{
info_cmds,
reminder_cmds,
todo_cmds,
+ moderation_cmds,
};
struct SQLPool;
@@ -56,6 +58,7 @@ async fn main() -> Result<(), Box> {
.add_command("info", &info_cmds::INFO_COMMAND)
.add_command("donate", &info_cmds::DONATE_COMMAND)
.add_command("todo", &todo_cmds::TODO_PARSE_COMMAND)
+ .add_command("blacklist", &moderation_cmds::BLACKLIST_COMMAND)
.build();
let mut client = Client::new(&env::var("DISCORD_TOKEN").expect("Missing DISCORD_TOKEN from environment"))
diff --git a/src/models.rs b/src/models.rs
new file mode 100644
index 0000000..61dd791
--- /dev/null
+++ b/src/models.rs
@@ -0,0 +1,37 @@
+
+use sqlx::MySqlPool;
+use chrono::NaiveDateTime;
+
+struct Channel {
+ id: u32,
+ channel: u64,
+ name: String,
+ nudge: i16,
+ blacklisted: bool,
+ webhook_id: u64,
+ webhook_token: String,
+ paused: bool,
+ paused_until: NaiveDateTime,
+ guild_id: u32,
+}
+
+impl Channel {
+ async fn from_id(channel: u64, pool: MySqlPool) -> Result> {
+ if let Some(c) = sqlx::query_as!(Self,
+ "
+SELECT * FROM channels WHERE channel = ?
+ ", channel)
+ .fetch_one(&pool)
+ .await? {
+
+ c
+ }
+ else {
+ sqlx::query!(
+ "
+INSERT INTO channels (channel, guild_id) VALUES ()
+ "
+ )
+ }
+ }
+}