From e69264d72697666dba8ba43e068fc0694dac8a51 Mon Sep 17 00:00:00 2001 From: jude Date: Tue, 18 Aug 2020 20:09:21 +0100 Subject: [PATCH] starting other commands --- .idea/dictionaries/jude.xml | 1 + Cargo.lock | 21 +++++++++++++++++++ Cargo.toml | 2 ++ src/commands/mod.rs | 1 + src/commands/moderation_cmds.rs | 25 ++++++++++++++++++++++ src/commands/todo_cmds.rs | 1 + src/main.rs | 3 +++ src/models.rs | 37 +++++++++++++++++++++++++++++++++ 8 files changed, 91 insertions(+) create mode 100644 src/commands/moderation_cmds.rs create mode 100644 src/models.rs 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 () + " + ) + } + } +}