linked everything together
This commit is contained in:
		
							
								
								
									
										67
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -9,11 +9,9 @@ mod time_parser;
 | 
			
		||||
 | 
			
		||||
use std::{collections::HashMap, env, sync::Arc, time::Instant};
 | 
			
		||||
 | 
			
		||||
use chrono::Utc;
 | 
			
		||||
use chrono_tz::Tz;
 | 
			
		||||
use dashmap::DashMap;
 | 
			
		||||
use dotenv::dotenv;
 | 
			
		||||
use inflector::Inflector;
 | 
			
		||||
use log::info;
 | 
			
		||||
use serenity::{
 | 
			
		||||
    async_trait,
 | 
			
		||||
@@ -23,11 +21,10 @@ use serenity::{
 | 
			
		||||
    http::{client::Http, CacheHttp},
 | 
			
		||||
    model::{
 | 
			
		||||
        channel::{GuildChannel, Message},
 | 
			
		||||
        gateway::{Activity, Ready},
 | 
			
		||||
        guild::{Guild, GuildUnavailable},
 | 
			
		||||
        id::{GuildId, UserId},
 | 
			
		||||
        interactions::{
 | 
			
		||||
            Interaction, InteractionApplicationCommandCallbackDataFlags, InteractionResponseType,
 | 
			
		||||
        },
 | 
			
		||||
        interactions::Interaction,
 | 
			
		||||
    },
 | 
			
		||||
    prelude::{Context, EventHandler, TypeMapKey},
 | 
			
		||||
    utils::shard_id,
 | 
			
		||||
@@ -39,11 +36,7 @@ use crate::{
 | 
			
		||||
    commands::info_cmds,
 | 
			
		||||
    consts::{CNC_GUILD, DEFAULT_PREFIX, SUBSCRIPTION_ROLES, THEME_COLOR},
 | 
			
		||||
    framework::RegexFramework,
 | 
			
		||||
    models::{
 | 
			
		||||
        guild_data::GuildData,
 | 
			
		||||
        reminder::{Reminder, ReminderAction},
 | 
			
		||||
        user_data::UserData,
 | 
			
		||||
    },
 | 
			
		||||
    models::guild_data::GuildData,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct GuildDataCache;
 | 
			
		||||
@@ -64,12 +57,6 @@ impl TypeMapKey for ReqwestClient {
 | 
			
		||||
    type Value = Arc<reqwest::Client>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct FrameworkCtx;
 | 
			
		||||
 | 
			
		||||
impl TypeMapKey for FrameworkCtx {
 | 
			
		||||
    type Value = Arc<RegexFramework>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct PopularTimezones;
 | 
			
		||||
 | 
			
		||||
impl TypeMapKey for PopularTimezones {
 | 
			
		||||
@@ -139,6 +126,18 @@ struct Handler;
 | 
			
		||||
 | 
			
		||||
#[async_trait]
 | 
			
		||||
impl EventHandler for Handler {
 | 
			
		||||
    async fn cache_ready(&self, ctx: Context, _: Vec<GuildId>) {
 | 
			
		||||
        let framework = ctx
 | 
			
		||||
            .data
 | 
			
		||||
            .read()
 | 
			
		||||
            .await
 | 
			
		||||
            .get::<RegexFramework>()
 | 
			
		||||
            .cloned()
 | 
			
		||||
            .expect("RegexFramework not found in context");
 | 
			
		||||
 | 
			
		||||
        framework.build_slash(ctx).await;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async fn channel_delete(&self, ctx: Context, channel: &GuildChannel) {
 | 
			
		||||
        let pool = ctx
 | 
			
		||||
            .data
 | 
			
		||||
@@ -256,6 +255,31 @@ DELETE FROM guilds WHERE guild = ?
 | 
			
		||||
        .await
 | 
			
		||||
        .unwrap();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async fn ready(&self, ctx: Context, _: Ready) {
 | 
			
		||||
        ctx.set_activity(Activity::watching("for /remind")).await;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async fn interaction_create(&self, ctx: Context, interaction: Interaction) {
 | 
			
		||||
        match interaction {
 | 
			
		||||
            Interaction::ApplicationCommand(application_command) => {
 | 
			
		||||
                if application_command.guild_id.is_none() {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                let framework = ctx
 | 
			
		||||
                    .data
 | 
			
		||||
                    .read()
 | 
			
		||||
                    .await
 | 
			
		||||
                    .get::<RegexFramework>()
 | 
			
		||||
                    .cloned()
 | 
			
		||||
                    .expect("RegexFramework not found in context");
 | 
			
		||||
 | 
			
		||||
                framework.execute(ctx, application_command).await;
 | 
			
		||||
            }
 | 
			
		||||
            _ => {}
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[tokio::main]
 | 
			
		||||
@@ -280,13 +304,18 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | 
			
		||||
        .default_prefix(DEFAULT_PREFIX.clone())
 | 
			
		||||
        .case_insensitive(env::var("CASE_INSENSITIVE").map_or(true, |var| var == "1"))
 | 
			
		||||
        .ignore_bots(env::var("IGNORE_BOTS").map_or(true, |var| var == "1"))
 | 
			
		||||
        .debug_guild(env::var("DEBUG_GUILD").map_or(None, |g| {
 | 
			
		||||
            Some(GuildId(
 | 
			
		||||
                g.parse::<u64>().expect("DEBUG_GUILD must be a guild ID"),
 | 
			
		||||
            ))
 | 
			
		||||
        }))
 | 
			
		||||
        .dm_enabled(dm_enabled)
 | 
			
		||||
        // info commands
 | 
			
		||||
        //.add_command("help", &info_cmds::HELP_COMMAND)
 | 
			
		||||
        .add_command(&info_cmds::INFO_COMMAND)
 | 
			
		||||
        .add_command(&info_cmds::DONATE_COMMAND)
 | 
			
		||||
        //.add_command("dashboard", &info_cmds::DASHBOARD_COMMAND)
 | 
			
		||||
        //.add_command("clock", &info_cmds::CLOCK_COMMAND)
 | 
			
		||||
        .add_command(&info_cmds::DASHBOARD_COMMAND)
 | 
			
		||||
        .add_command(&info_cmds::CLOCK_COMMAND)
 | 
			
		||||
        // reminder commands
 | 
			
		||||
        /*
 | 
			
		||||
        .add_command("timer", &reminder_cmds::TIMER_COMMAND)
 | 
			
		||||
@@ -364,7 +393,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | 
			
		||||
        data.insert::<SQLPool>(pool);
 | 
			
		||||
        data.insert::<PopularTimezones>(Arc::new(popular_timezones));
 | 
			
		||||
        data.insert::<ReqwestClient>(Arc::new(reqwest::Client::new()));
 | 
			
		||||
        data.insert::<FrameworkCtx>(framework_arc.clone());
 | 
			
		||||
        data.insert::<RegexFramework>(framework_arc.clone());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if let Ok((Some(lower), Some(upper))) = env::var("SHARD_RANGE").map(|sr| {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user