more commands. fixed an issue with text only commands
This commit is contained in:
		
							
								
								
									
										107
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										107
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -33,7 +33,7 @@ use sqlx::mysql::MySqlPool;
 | 
			
		||||
use tokio::sync::RwLock;
 | 
			
		||||
 | 
			
		||||
use crate::{
 | 
			
		||||
    commands::info_cmds,
 | 
			
		||||
    commands::{info_cmds, moderation_cmds, reminder_cmds},
 | 
			
		||||
    consts::{CNC_GUILD, DEFAULT_PREFIX, SUBSCRIPTION_ROLES, THEME_COLOR},
 | 
			
		||||
    framework::RegexFramework,
 | 
			
		||||
    models::guild_data::GuildData,
 | 
			
		||||
@@ -79,28 +79,17 @@ trait LimitExecutors {
 | 
			
		||||
#[async_trait]
 | 
			
		||||
impl LimitExecutors for Context {
 | 
			
		||||
    async fn check_executing(&self, user: UserId) -> bool {
 | 
			
		||||
        let currently_executing = self
 | 
			
		||||
            .data
 | 
			
		||||
            .read()
 | 
			
		||||
            .await
 | 
			
		||||
            .get::<CurrentlyExecuting>()
 | 
			
		||||
            .cloned()
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        let currently_executing =
 | 
			
		||||
            self.data.read().await.get::<CurrentlyExecuting>().cloned().unwrap();
 | 
			
		||||
 | 
			
		||||
        let lock = currently_executing.read().await;
 | 
			
		||||
 | 
			
		||||
        lock.get(&user)
 | 
			
		||||
            .map_or(false, |now| now.elapsed().as_secs() < 4)
 | 
			
		||||
        lock.get(&user).map_or(false, |now| now.elapsed().as_secs() < 4)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async fn set_executing(&self, user: UserId) {
 | 
			
		||||
        let currently_executing = self
 | 
			
		||||
            .data
 | 
			
		||||
            .read()
 | 
			
		||||
            .await
 | 
			
		||||
            .get::<CurrentlyExecuting>()
 | 
			
		||||
            .cloned()
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        let currently_executing =
 | 
			
		||||
            self.data.read().await.get::<CurrentlyExecuting>().cloned().unwrap();
 | 
			
		||||
 | 
			
		||||
        let mut lock = currently_executing.write().await;
 | 
			
		||||
 | 
			
		||||
@@ -108,13 +97,8 @@ impl LimitExecutors for Context {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async fn drop_executing(&self, user: UserId) {
 | 
			
		||||
        let currently_executing = self
 | 
			
		||||
            .data
 | 
			
		||||
            .read()
 | 
			
		||||
            .await
 | 
			
		||||
            .get::<CurrentlyExecuting>()
 | 
			
		||||
            .cloned()
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        let currently_executing =
 | 
			
		||||
            self.data.read().await.get::<CurrentlyExecuting>().cloned().unwrap();
 | 
			
		||||
 | 
			
		||||
        let mut lock = currently_executing.write().await;
 | 
			
		||||
 | 
			
		||||
@@ -171,11 +155,9 @@ DELETE FROM channels WHERE channel = ?
 | 
			
		||||
                    .cloned()
 | 
			
		||||
                    .expect("Could not get SQLPool from data");
 | 
			
		||||
 | 
			
		||||
                GuildData::from_guild(guild, &pool)
 | 
			
		||||
                    .await
 | 
			
		||||
                    .unwrap_or_else(|_| {
 | 
			
		||||
                        panic!("Failed to create new guild object for {}", guild_id)
 | 
			
		||||
                    });
 | 
			
		||||
                GuildData::from_guild(guild, &pool).await.unwrap_or_else(|_| {
 | 
			
		||||
                    panic!("Failed to create new guild object for {}", guild_id)
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if let Ok(token) = env::var("DISCORDBOTS_TOKEN") {
 | 
			
		||||
@@ -236,13 +218,7 @@ DELETE FROM channels WHERE channel = ?
 | 
			
		||||
            .cloned()
 | 
			
		||||
            .expect("Could not get SQLPool from data");
 | 
			
		||||
 | 
			
		||||
        let guild_data_cache = ctx
 | 
			
		||||
            .data
 | 
			
		||||
            .read()
 | 
			
		||||
            .await
 | 
			
		||||
            .get::<GuildDataCache>()
 | 
			
		||||
            .cloned()
 | 
			
		||||
            .unwrap();
 | 
			
		||||
        let guild_data_cache = ctx.data.read().await.get::<GuildDataCache>().cloned().unwrap();
 | 
			
		||||
        guild_data_cache.remove(&deleted_guild.id);
 | 
			
		||||
 | 
			
		||||
        sqlx::query!(
 | 
			
		||||
@@ -292,10 +268,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | 
			
		||||
 | 
			
		||||
    let http = Http::new_with_token(&token);
 | 
			
		||||
 | 
			
		||||
    let logged_in_id = http
 | 
			
		||||
        .get_current_user()
 | 
			
		||||
        .map_ok(|user| user.id.as_u64().to_owned())
 | 
			
		||||
        .await?;
 | 
			
		||||
    let logged_in_id = http.get_current_user().map_ok(|user| user.id.as_u64().to_owned()).await?;
 | 
			
		||||
    let application_id = http.get_current_application_info().await?.id;
 | 
			
		||||
 | 
			
		||||
    let dm_enabled = env::var("DM_ENABLED").map_or(true, |var| var == "1");
 | 
			
		||||
@@ -305,9 +278,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | 
			
		||||
        .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"),
 | 
			
		||||
            ))
 | 
			
		||||
            Some(GuildId(g.parse::<u64>().expect("DEBUG_GUILD must be a guild ID")))
 | 
			
		||||
        }))
 | 
			
		||||
        .dm_enabled(dm_enabled)
 | 
			
		||||
        // info commands
 | 
			
		||||
@@ -329,6 +300,11 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | 
			
		||||
        // management commands
 | 
			
		||||
        .add_command("look", &reminder_cmds::LOOK_COMMAND)
 | 
			
		||||
        .add_command("del", &reminder_cmds::DELETE_COMMAND)
 | 
			
		||||
        */
 | 
			
		||||
        .add_command(&reminder_cmds::PAUSE_COMMAND)
 | 
			
		||||
        /*
 | 
			
		||||
        .add_command("offset", &reminder_cmds::OFFSET_COMMAND)
 | 
			
		||||
        .add_command("nudge", &reminder_cmds::NUDGE_COMMAND)
 | 
			
		||||
        // to-do commands
 | 
			
		||||
        .add_command("todo", &todo_cmds::TODO_USER_COMMAND)
 | 
			
		||||
        .add_command("todo user", &todo_cmds::TODO_USER_COMMAND)
 | 
			
		||||
@@ -337,15 +313,13 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | 
			
		||||
        .add_command("todos", &todo_cmds::TODO_GUILD_COMMAND)
 | 
			
		||||
        .add_command("todo server", &todo_cmds::TODO_GUILD_COMMAND)
 | 
			
		||||
        .add_command("todo guild", &todo_cmds::TODO_GUILD_COMMAND)
 | 
			
		||||
        */
 | 
			
		||||
        // moderation commands
 | 
			
		||||
        .add_command("blacklist", &moderation_cmds::BLACKLIST_COMMAND)
 | 
			
		||||
        .add_command("restrict", &moderation_cmds::RESTRICT_COMMAND)
 | 
			
		||||
        .add_command("timezone", &moderation_cmds::TIMEZONE_COMMAND)
 | 
			
		||||
        .add_command("prefix", &moderation_cmds::PREFIX_COMMAND)
 | 
			
		||||
        .add_command("lang", &moderation_cmds::LANGUAGE_COMMAND)
 | 
			
		||||
        .add_command("pause", &reminder_cmds::PAUSE_COMMAND)
 | 
			
		||||
        .add_command("offset", &reminder_cmds::OFFSET_COMMAND)
 | 
			
		||||
        .add_command("nudge", &reminder_cmds::NUDGE_COMMAND)
 | 
			
		||||
        .add_command(&moderation_cmds::BLACKLIST_COMMAND)
 | 
			
		||||
        .add_command(&moderation_cmds::RESTRICT_COMMAND)
 | 
			
		||||
        .add_command(&moderation_cmds::TIMEZONE_COMMAND)
 | 
			
		||||
        .add_command(&moderation_cmds::PREFIX_COMMAND)
 | 
			
		||||
        /*
 | 
			
		||||
        .add_command("alias", &moderation_cmds::ALIAS_COMMAND)
 | 
			
		||||
        .add_command("a", &moderation_cmds::ALIAS_COMMAND)
 | 
			
		||||
        */
 | 
			
		||||
@@ -397,9 +371,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if let Ok((Some(lower), Some(upper))) = env::var("SHARD_RANGE").map(|sr| {
 | 
			
		||||
        let mut split = sr
 | 
			
		||||
            .split(',')
 | 
			
		||||
            .map(|val| val.parse::<u64>().expect("SHARD_RANGE not an integer"));
 | 
			
		||||
        let mut split =
 | 
			
		||||
            sr.split(',').map(|val| val.parse::<u64>().expect("SHARD_RANGE not an integer"));
 | 
			
		||||
 | 
			
		||||
        (split.next(), split.next())
 | 
			
		||||
    }) {
 | 
			
		||||
@@ -409,24 +382,14 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | 
			
		||||
            .flatten()
 | 
			
		||||
            .expect("No SHARD_COUNT provided, but SHARD_RANGE was provided");
 | 
			
		||||
 | 
			
		||||
        assert!(
 | 
			
		||||
            lower < upper,
 | 
			
		||||
            "SHARD_RANGE lower limit is not less than the upper limit"
 | 
			
		||||
        );
 | 
			
		||||
        assert!(lower < upper, "SHARD_RANGE lower limit is not less than the upper limit");
 | 
			
		||||
 | 
			
		||||
        info!(
 | 
			
		||||
            "Starting client fragment with shards {}-{}/{}",
 | 
			
		||||
            lower, upper, total_shards
 | 
			
		||||
        );
 | 
			
		||||
        info!("Starting client fragment with shards {}-{}/{}", lower, upper, total_shards);
 | 
			
		||||
 | 
			
		||||
        client
 | 
			
		||||
            .start_shard_range([lower, upper], total_shards)
 | 
			
		||||
            .await?;
 | 
			
		||||
    } else if let Ok(total_shards) = env::var("SHARD_COUNT").map(|shard_count| {
 | 
			
		||||
        shard_count
 | 
			
		||||
            .parse::<u64>()
 | 
			
		||||
            .expect("SHARD_COUNT not an integer")
 | 
			
		||||
    }) {
 | 
			
		||||
        client.start_shard_range([lower, upper], total_shards).await?;
 | 
			
		||||
    } else if let Ok(total_shards) = env::var("SHARD_COUNT")
 | 
			
		||||
        .map(|shard_count| shard_count.parse::<u64>().expect("SHARD_COUNT not an integer"))
 | 
			
		||||
    {
 | 
			
		||||
        info!("Starting client with {} shards", total_shards);
 | 
			
		||||
 | 
			
		||||
        client.start_shards(total_shards).await?;
 | 
			
		||||
@@ -441,9 +404,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
 | 
			
		||||
 | 
			
		||||
pub async fn check_subscription(cache_http: impl CacheHttp, user_id: impl Into<UserId>) -> bool {
 | 
			
		||||
    if let Some(subscription_guild) = *CNC_GUILD {
 | 
			
		||||
        let guild_member = GuildId(subscription_guild)
 | 
			
		||||
            .member(cache_http, user_id)
 | 
			
		||||
            .await;
 | 
			
		||||
        let guild_member = GuildId(subscription_guild).member(cache_http, user_id).await;
 | 
			
		||||
 | 
			
		||||
        if let Ok(member) = guild_member {
 | 
			
		||||
            for role in member.roles {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user