reminder-bot/src/main.rs

125 lines
3.4 KiB
Rust
Raw Normal View History

2020-08-26 17:26:28 +00:00
#[macro_use]
extern crate lazy_static;
2020-08-18 19:09:21 +00:00
mod models;
2020-08-06 14:22:13 +00:00
mod framework;
2020-08-09 22:59:31 +00:00
mod commands;
mod time_parser;
2020-08-06 14:22:13 +00:00
use serenity::{
client::{
bridge::gateway::GatewayIntents,
Client,
2020-08-06 14:22:13 +00:00
},
framework::Framework,
2020-08-06 14:22:13 +00:00
prelude::TypeMapKey,
};
use sqlx::{
Pool,
mysql::{
MySqlPool,
2020-08-06 14:22:13 +00:00
MySqlConnection,
}
};
use dotenv::dotenv;
use std::{
sync::Arc,
env,
};
use crate::framework::RegexFramework;
2020-08-09 22:59:31 +00:00
use crate::commands::{
info_cmds,
reminder_cmds,
todo_cmds,
2020-08-18 19:09:21 +00:00
moderation_cmds,
2020-08-09 22:59:31 +00:00
};
2020-08-06 14:22:13 +00:00
struct SQLPool;
impl TypeMapKey for SQLPool {
type Value = Pool<MySqlConnection>;
}
struct ReqwestClient;
impl TypeMapKey for ReqwestClient {
type Value = Arc<reqwest::Client>;
}
struct FrameworkCtx;
impl TypeMapKey for FrameworkCtx {
type Value = Arc<Box<dyn Framework + Send + Sync>>;
}
static THEME_COLOR: u32 = 0x8fb677;
2020-08-06 14:22:13 +00:00
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
dotenv()?;
2020-08-07 00:02:01 +00:00
let framework = RegexFramework::new(env::var("CLIENT_ID").expect("Missing CLIENT_ID from environment").parse()?)
2020-08-06 14:22:13 +00:00
.ignore_bots(true)
.default_prefix("$")
2020-09-01 17:48:40 +00:00
.add_command("ping", &info_cmds::PING_COMMAND)
2020-08-09 22:59:31 +00:00
.add_command("help", &info_cmds::HELP_COMMAND)
.add_command("info", &info_cmds::INFO_COMMAND)
.add_command("donate", &info_cmds::DONATE_COMMAND)
.add_command("dashboard", &info_cmds::DASHBOARD_COMMAND)
2020-08-27 20:37:44 +00:00
.add_command("clock", &info_cmds::CLOCK_COMMAND)
.add_command("timer", &reminder_cmds::TIMER_COMMAND)
2020-09-11 16:41:15 +00:00
.add_command("remind", &reminder_cmds::REMIND_COMMAND)
.add_command("r", &reminder_cmds::REMIND_COMMAND)
.add_command("interval", &reminder_cmds::INTERVAL_COMMAND)
.add_command("i", &reminder_cmds::INTERVAL_COMMAND)
2020-09-05 20:17:45 +00:00
.add_command("look", &reminder_cmds::LOOK_COMMAND)
.add_command("del", &reminder_cmds::DELETE_COMMAND)
2020-09-05 20:17:45 +00:00
2020-08-17 23:18:33 +00:00
.add_command("todo", &todo_cmds::TODO_PARSE_COMMAND)
2020-08-18 19:09:21 +00:00
.add_command("blacklist", &moderation_cmds::BLACKLIST_COMMAND)
2020-09-02 16:13:17 +00:00
.add_command("restrict", &moderation_cmds::RESTRICT_COMMAND)
2020-08-27 20:37:44 +00:00
.add_command("timezone", &moderation_cmds::TIMEZONE_COMMAND)
.add_command("prefix", &moderation_cmds::PREFIX_COMMAND)
2020-09-01 14:34:50 +00:00
.add_command("lang", &moderation_cmds::LANGUAGE_COMMAND)
2020-09-01 14:34:50 +00:00
.add_command("pause", &reminder_cmds::PAUSE_COMMAND)
.add_command("offset", &reminder_cmds::OFFSET_COMMAND)
2020-09-01 17:37:43 +00:00
.add_command("nudge", &reminder_cmds::NUDGE_COMMAND)
2020-09-04 20:21:47 +00:00
.add_command("alias", &moderation_cmds::ALIAS_COMMAND)
2020-09-05 20:17:45 +00:00
.add_command("a", &moderation_cmds::ALIAS_COMMAND)
2020-09-04 20:21:47 +00:00
2020-08-06 14:22:13 +00:00
.build();
let framework_arc = Arc::new(Box::new(framework) as Box<dyn Framework + Send + Sync>);
2020-08-06 14:22:13 +00:00
let mut client = Client::new(&env::var("DISCORD_TOKEN").expect("Missing DISCORD_TOKEN from environment"))
.intents(GatewayIntents::GUILD_MESSAGES | GatewayIntents::GUILDS | GatewayIntents::DIRECT_MESSAGES)
.framework_arc(framework_arc.clone())
.await.expect("Error occurred creating client");
2020-08-06 14:22:13 +00:00
{
let pool = MySqlPool::new(&env::var("DATABASE_URL").expect("Missing DATABASE_URL from environment")).await.unwrap();
let mut data = client.data.write().await;
data.insert::<SQLPool>(pool);
data.insert::<ReqwestClient>(Arc::new(reqwest::Client::new()));
data.insert::<FrameworkCtx>(framework_arc);
}
2020-08-06 14:22:13 +00:00
client.start_autosharded().await?;
Ok(())
}