diff --git a/Cargo.lock b/Cargo.lock index faf43a5..6fc91e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -533,6 +533,8 @@ dependencies = [ name = "makomo" version = "0.1.0" dependencies = [ + "serde 1.0.101 (registry+https://github.com/rust-lang/crates.io-index)", + "serde_json 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "serenity 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/Cargo.toml b/Cargo.toml index b9c0c11..99baa6d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,3 +8,5 @@ edition = "2018" [dependencies] serenity = "0.7" +serde = "1.0" +serde_json = "1.0" diff --git a/conf.json b/conf.json new file mode 100644 index 0000000..f90084f --- /dev/null +++ b/conf.json @@ -0,0 +1,5 @@ +{ + "token": "NjI5MzgwNjE2NDM3MzY2ODI0.Xa5CTg.ynVtKebrpgY6YKyis2bNLg-e0S8", + "prefix": "mako", + "owner_id": 257521982021566464 +} \ No newline at end of file diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..7ccca21 --- /dev/null +++ b/src/config.rs @@ -0,0 +1,22 @@ +use std::path::Path; +use std::fs::File; +use std::io::Read; +use serde_json::from_str; +use serde::{Deserialize, Serialize}; +use serde_json::Result; + +#[derive(Deserialize, Serialize)] +pub struct Config { + pub token: String, + pub prefix: String, + pub owner_id: u64 +} + +impl Config { + pub fn new>(file: P) -> Result { + let mut file = File::open(file).unwrap(); + let mut data = String::new(); + file.read_to_string(&mut data); + Ok(from_str(&data)?) + } +} \ No newline at end of file diff --git a/src/handler.rs b/src/handler.rs new file mode 100644 index 0000000..c5f0783 --- /dev/null +++ b/src/handler.rs @@ -0,0 +1,20 @@ +use serenity::prelude::*; +use serenity::model::{ + gateway:: { + Ready, + Activity + } +}; + +pub struct Handler; + +impl EventHandler for Handler { + fn ready(&self, ctx: Context, ready: Ready) { + println!("Bot is ready on {}", ready.user.tag()); + println!("Servers: {}", ready.guilds.len()); + + let act = Activity::playing("with rust"); + + ctx.set_activity(act); + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index e7a11a9..ac16688 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,19 @@ +#![allow(unused_must_use)] + +mod config; +mod makomo; +mod handler; +mod modules; + +use config::Config; +use makomo::init_client; + fn main() { - println!("Hello, world!"); + let conf: Config = Config::new("conf.json").unwrap(); + + let mut client = init_client(conf); + + if let Err(why) = client.start() { + println!("Error starting client. {}", why) + } } diff --git a/src/makomo.rs b/src/makomo.rs new file mode 100644 index 0000000..c12a453 --- /dev/null +++ b/src/makomo.rs @@ -0,0 +1,33 @@ +use serenity::client::Client; +use serenity::framework::standard::StandardFramework; +use serenity::model::id::UserId; +use crate::config::Config; +use crate::handler::Handler; + +// Modules + +use crate::modules::generic::GENERIC_GROUP; + +pub fn init_client(conf: Config) -> Client { + let mut client = Client::new(&conf.token, Handler).expect("Error creating client."); + client.with_framework(framework(conf)); + + return client +} + +fn framework(conf: Config) -> StandardFramework { + let fw = StandardFramework::new() + .configure(|c| c + .prefix(&conf.prefix) + .with_whitespace(true) + .owners(vec![UserId(conf.owner_id)].into_iter().collect())) + .after(|_ctx, msg, cmd_name, error| { + match error { + Ok(()) => println!("Processed command '{}' from author {}", cmd_name, msg.author.name), + Err(why) => println!("The command '{}' gave the error: {:?}", cmd_name, why) + } + }) + .group(&GENERIC_GROUP); + + return fw; +} \ No newline at end of file diff --git a/src/modules/generic.rs b/src/modules/generic.rs new file mode 100644 index 0000000..3e8cb06 --- /dev/null +++ b/src/modules/generic.rs @@ -0,0 +1,22 @@ +use serenity::model::channel::Message; +use serenity::prelude::*; +use serenity::framework::standard::{ + CommandResult, + macros::{ + command, + group + } +}; + +group!({ + name: "generic", + options: {}, + commands: [ping] +}); + +#[command] +pub fn ping(ctx: &mut Context, msg: &Message) -> CommandResult { + msg.reply(ctx, "Pong!")?; + + Ok(()) +} \ No newline at end of file diff --git a/src/modules/mod.rs b/src/modules/mod.rs new file mode 100644 index 0000000..0add7db --- /dev/null +++ b/src/modules/mod.rs @@ -0,0 +1 @@ +pub mod generic;