Compare commits
	
		
			2 Commits
		
	
	
		
			current
			...
			jude/restr
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					192e316926 | ||
| 
						 | 
					19cfacffe5 | 
							
								
								
									
										12676
									
								
								gb-ipv4.csv
									
									
									
									
									
								
							
							
						
						
									
										12676
									
								
								gb-ipv4.csv
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										84
									
								
								migrations/20250506184716_remove_unused_columns.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								migrations/20250506184716_remove_unused_columns.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
-- Drop all old tables
 | 
			
		||||
DROP TABLE IF EXISTS users_old;
 | 
			
		||||
DROP TABLE IF EXISTS messages;
 | 
			
		||||
DROP TABLE IF EXISTS embeds;
 | 
			
		||||
DROP TABLE IF EXISTS embed_fields;
 | 
			
		||||
DROP TABLE IF EXISTS command_aliases;
 | 
			
		||||
DROP TABLE IF EXISTS macro;
 | 
			
		||||
DROP TABLE IF EXISTS command_restrictions;
 | 
			
		||||
DROP TABLE IF EXISTS roles;
 | 
			
		||||
 | 
			
		||||
SET FOREIGN_KEY_CHECKS = 0;
 | 
			
		||||
 | 
			
		||||
-- Drop columns from channels that are no longer used
 | 
			
		||||
ALTER TABLE channels DROP COLUMN `name`;
 | 
			
		||||
ALTER TABLE channels DROP COLUMN `blacklisted`;
 | 
			
		||||
 | 
			
		||||
-- Drop columns from guilds table that are no longer used and rebuild table
 | 
			
		||||
CREATE TABLE guilds_new (
 | 
			
		||||
    id BIGINT UNSIGNED NOT NULL PRIMARY KEY,
 | 
			
		||||
    ephemeral_confirmations BOOLEAN NOT NULL DEFAULT 0
 | 
			
		||||
);
 | 
			
		||||
INSERT INTO guilds_new (id, ephemeral_confirmations) SELECT guild, ephemeral_confirmations FROM guilds;
 | 
			
		||||
RENAME TABLE guilds TO guilds_old;
 | 
			
		||||
RENAME TABLE guilds_new TO guilds;
 | 
			
		||||
 | 
			
		||||
-- Update fk on channels to point at new guild table
 | 
			
		||||
ALTER TABLE channels
 | 
			
		||||
    DROP FOREIGN KEY `channels_ibfk_1`,
 | 
			
		||||
    MODIFY COLUMN guild_id BIGINT UNSIGNED,
 | 
			
		||||
    ADD FOREIGN KEY `fk_guild_id` (`guild_id`)
 | 
			
		||||
        REFERENCES `guilds` (`id`)
 | 
			
		||||
        ON DELETE CASCADE
 | 
			
		||||
        ON UPDATE CASCADE;
 | 
			
		||||
UPDATE channels SET guild_id = (SELECT guild FROM guilds_old WHERE id = guild_id);
 | 
			
		||||
 | 
			
		||||
-- Rebuild todos table
 | 
			
		||||
CREATE TABLE `todos_new` (
 | 
			
		||||
    `id`         INT UNSIGNED NOT NULL AUTO_INCREMENT,
 | 
			
		||||
    `guild_id`   BIGINT UNSIGNED DEFAULT NULL,
 | 
			
		||||
    `channel_id` INT UNSIGNED DEFAULT NULL,
 | 
			
		||||
    `user_id`    BIGINT UNSIGNED DEFAULT NULL,
 | 
			
		||||
    `value`      VARCHAR(2000) NOT NULL,
 | 
			
		||||
    PRIMARY KEY (`id`),
 | 
			
		||||
    FOREIGN KEY `fk_channel_id` (`channel_id`)
 | 
			
		||||
        REFERENCES `channels` (`id`)
 | 
			
		||||
        ON DELETE SET NULL
 | 
			
		||||
        ON UPDATE CASCADE,
 | 
			
		||||
    FOREIGN KEY `fk_guild_id` (`guild_id`)
 | 
			
		||||
        REFERENCES `guilds` (`id`)
 | 
			
		||||
        ON DELETE CASCADE
 | 
			
		||||
        ON UPDATE CASCADE,
 | 
			
		||||
    FOREIGN KEY `fk_user_id` (`user_id`)
 | 
			
		||||
        REFERENCES `users` (`id`)
 | 
			
		||||
        ON DELETE SET NULL
 | 
			
		||||
        ON UPDATE CASCADE
 | 
			
		||||
);
 | 
			
		||||
INSERT INTO todos_new (id, guild_id, channel_id, user_id, value) SELECT id, (SELECT guild FROM guilds_old WHERE id = guild_id), channel_id, user_id, value FROM todos;
 | 
			
		||||
RENAME TABLE todos TO todos_old;
 | 
			
		||||
RENAME TABLE todos_new TO todos;
 | 
			
		||||
 | 
			
		||||
-- Update fk on reminder_template to point at new guild table
 | 
			
		||||
ALTER TABLE reminder_template
 | 
			
		||||
    DROP FOREIGN KEY `reminder_template_ibfk_1`,
 | 
			
		||||
    MODIFY COLUMN guild_id BIGINT UNSIGNED NOT NULL,
 | 
			
		||||
    ADD FOREIGN KEY `fk_guild_id` (`guild_id`)
 | 
			
		||||
        REFERENCES `guilds` (`id`)
 | 
			
		||||
        ON DELETE CASCADE
 | 
			
		||||
        ON UPDATE CASCADE;
 | 
			
		||||
UPDATE reminder_template SET guild_id = (SELECT guild FROM guilds_old WHERE id = guild_id);
 | 
			
		||||
 | 
			
		||||
-- Update fk on command_macro to point at new guild table
 | 
			
		||||
ALTER TABLE command_macro
 | 
			
		||||
    DROP FOREIGN KEY `command_macro_ibfk_1`,
 | 
			
		||||
    MODIFY COLUMN guild_id BIGINT UNSIGNED NOT NULL,
 | 
			
		||||
    ADD FOREIGN KEY `fk_guild_id` (`guild_id`)
 | 
			
		||||
        REFERENCES `guilds` (`id`)
 | 
			
		||||
        ON DELETE CASCADE
 | 
			
		||||
        ON UPDATE CASCADE;
 | 
			
		||||
UPDATE command_macro SET guild_id = (SELECT guild FROM guilds_old WHERE id = guild_id);
 | 
			
		||||
 | 
			
		||||
DROP TABLE todos_old;
 | 
			
		||||
DROP TABLE guilds_old;
 | 
			
		||||
 | 
			
		||||
SET FOREIGN_KEY_CHECKS = 1;
 | 
			
		||||
@@ -24,7 +24,7 @@ pub async fn macro_name_autocomplete(ctx: Context<'_>, partial: &str) -> Vec<Str
 | 
			
		||||
        SELECT name
 | 
			
		||||
        FROM command_macro
 | 
			
		||||
        WHERE
 | 
			
		||||
            guild_id = (SELECT id FROM guilds WHERE guild = ?)
 | 
			
		||||
            guild_id = ?
 | 
			
		||||
            AND name LIKE CONCAT(?, '%')
 | 
			
		||||
        ",
 | 
			
		||||
        ctx.guild_id().unwrap().get(),
 | 
			
		||||
 
 | 
			
		||||
@@ -17,12 +17,10 @@ pub async fn delete_macro(
 | 
			
		||||
) -> Result<(), Error> {
 | 
			
		||||
    match sqlx::query!(
 | 
			
		||||
        "
 | 
			
		||||
        SELECT m.id
 | 
			
		||||
        FROM command_macro m
 | 
			
		||||
        INNER JOIN guilds
 | 
			
		||||
            ON guilds.id = m.guild_id
 | 
			
		||||
        WHERE guild = ?
 | 
			
		||||
            AND m.name = ?
 | 
			
		||||
        SELECT id
 | 
			
		||||
        FROM command_macro
 | 
			
		||||
        WHERE guild_id = ?
 | 
			
		||||
            AND name = ?
 | 
			
		||||
        ",
 | 
			
		||||
        ctx.guild_id().unwrap().get(),
 | 
			
		||||
        name
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ pub async fn finish_macro(ctx: Context<'_>) -> Result<(), Error> {
 | 
			
		||||
            let json = serde_json::to_string(&command_macro.commands).unwrap();
 | 
			
		||||
 | 
			
		||||
            sqlx::query!(
 | 
			
		||||
                "INSERT INTO command_macro (guild_id, name, description, commands) VALUES ((SELECT id FROM guilds WHERE guild = ?), ?, ?, ?)",
 | 
			
		||||
                "INSERT INTO command_macro (guild_id, name, description, commands) VALUES (?, ?, ?, ?)",
 | 
			
		||||
                command_macro.guild_id.get(),
 | 
			
		||||
                command_macro.name,
 | 
			
		||||
                command_macro.description,
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ pub async fn record_macro(
 | 
			
		||||
        "
 | 
			
		||||
        SELECT 1 as _e
 | 
			
		||||
        FROM command_macro
 | 
			
		||||
        WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)
 | 
			
		||||
        WHERE guild_id = ?
 | 
			
		||||
            AND name = ?
 | 
			
		||||
        ",
 | 
			
		||||
        guild_id.get(),
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ impl Recordable for Options {
 | 
			
		||||
            "
 | 
			
		||||
            INSERT INTO todos (guild_id, channel_id, value)
 | 
			
		||||
            VALUES (
 | 
			
		||||
                (SELECT id FROM guilds WHERE guild = ?),
 | 
			
		||||
                ?,
 | 
			
		||||
                (SELECT id FROM channels WHERE channel = ?),
 | 
			
		||||
                ?
 | 
			
		||||
            )
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ impl Recordable for Options {
 | 
			
		||||
            "
 | 
			
		||||
            INSERT INTO todos (guild_id, value)
 | 
			
		||||
            VALUES (
 | 
			
		||||
                (SELECT id FROM guilds WHERE guild = ?), ?
 | 
			
		||||
                ?, ?
 | 
			
		||||
            )
 | 
			
		||||
            ",
 | 
			
		||||
            ctx.guild_id().unwrap().get(),
 | 
			
		||||
 
 | 
			
		||||
@@ -13,9 +13,8 @@ impl Recordable for Options {
 | 
			
		||||
    async fn run(self, ctx: Context<'_>) -> Result<(), Error> {
 | 
			
		||||
        let values = sqlx::query!(
 | 
			
		||||
            "
 | 
			
		||||
            SELECT todos.id, value FROM todos
 | 
			
		||||
            INNER JOIN guilds ON todos.guild_id = guilds.id
 | 
			
		||||
            WHERE guilds.guild = ?
 | 
			
		||||
            SELECT id, value FROM todos
 | 
			
		||||
            WHERE guild_id = ?
 | 
			
		||||
            ",
 | 
			
		||||
            ctx.guild_id().unwrap().get(),
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
@@ -219,9 +219,8 @@ impl ComponentDataModel {
 | 
			
		||||
                    } else {
 | 
			
		||||
                        sqlx::query!(
 | 
			
		||||
                            "
 | 
			
		||||
                            SELECT todos.id, value FROM todos
 | 
			
		||||
                            INNER JOIN guilds ON todos.guild_id = guilds.id
 | 
			
		||||
                            WHERE guilds.guild = ?
 | 
			
		||||
                            SELECT id, value FROM todos
 | 
			
		||||
                            WHERE guild_id = ?
 | 
			
		||||
                            ",
 | 
			
		||||
                            pager.guild_id,
 | 
			
		||||
                        )
 | 
			
		||||
@@ -311,9 +310,8 @@ impl ComponentDataModel {
 | 
			
		||||
                        } else {
 | 
			
		||||
                            sqlx::query!(
 | 
			
		||||
                                "
 | 
			
		||||
                            SELECT todos.id, value FROM todos
 | 
			
		||||
                            INNER JOIN guilds ON todos.guild_id = guilds.id
 | 
			
		||||
                            WHERE guilds.guild = ?
 | 
			
		||||
                                SELECT id, value FROM todos
 | 
			
		||||
                                WHERE guild_id = ?
 | 
			
		||||
                                ",
 | 
			
		||||
                                selector.guild_id,
 | 
			
		||||
                            )
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ pub async fn listener(
 | 
			
		||||
            if is_new.unwrap_or(false) {
 | 
			
		||||
                let guild_id = guild.id.get().to_owned();
 | 
			
		||||
 | 
			
		||||
                sqlx::query!("INSERT IGNORE INTO guilds (guild) VALUES (?)", guild_id)
 | 
			
		||||
                sqlx::query!("INSERT IGNORE INTO guilds (id) VALUES (?)", guild_id)
 | 
			
		||||
                    .execute(&data.database)
 | 
			
		||||
                    .await?;
 | 
			
		||||
 | 
			
		||||
@@ -56,7 +56,7 @@ To stay up to date on the latest features and fixes, join our [Discord](https://
 | 
			
		||||
        }
 | 
			
		||||
        FullEvent::GuildDelete { incomplete, .. } => {
 | 
			
		||||
            if !incomplete.unavailable {
 | 
			
		||||
                let _ = sqlx::query!("DELETE FROM guilds WHERE guild = ?", incomplete.id.get())
 | 
			
		||||
                let _ = sqlx::query!("DELETE FROM guilds WHERE id = ?", incomplete.id.get())
 | 
			
		||||
                    .execute(&data.database)
 | 
			
		||||
                    .await;
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,9 +8,7 @@ use crate::{consts::DEFAULT_AVATAR, Error};
 | 
			
		||||
pub struct ChannelData {
 | 
			
		||||
    pub id: u32,
 | 
			
		||||
    pub channel: u64,
 | 
			
		||||
    pub name: Option<String>,
 | 
			
		||||
    pub nudge: i16,
 | 
			
		||||
    pub blacklisted: bool,
 | 
			
		||||
    pub webhook_id: Option<u64>,
 | 
			
		||||
    pub webhook_token: Option<String>,
 | 
			
		||||
    pub paused: bool,
 | 
			
		||||
@@ -27,7 +25,7 @@ impl ChannelData {
 | 
			
		||||
        if let Ok(c) = sqlx::query_as_unchecked!(
 | 
			
		||||
            Self,
 | 
			
		||||
            "
 | 
			
		||||
            SELECT id, channel, name, nudge, blacklisted, webhook_id, webhook_token, paused,
 | 
			
		||||
            SELECT id, channel, nudge, webhook_id, webhook_token, paused,
 | 
			
		||||
                paused_until
 | 
			
		||||
            FROM channels
 | 
			
		||||
            WHERE channel = ?
 | 
			
		||||
@@ -39,15 +37,11 @@ impl ChannelData {
 | 
			
		||||
        {
 | 
			
		||||
            Ok(c)
 | 
			
		||||
        } else {
 | 
			
		||||
            let props = channel.to_owned().guild().map(|g| (g.guild_id.get().to_owned(), g.name));
 | 
			
		||||
 | 
			
		||||
            let (guild_id, channel_name) =
 | 
			
		||||
                if let Some((a, b)) = props { (Some(a), Some(b)) } else { (None, None) };
 | 
			
		||||
            let guild_id = channel.to_owned().guild().map(|g| g.guild_id.get().to_owned());
 | 
			
		||||
 | 
			
		||||
            sqlx::query!(
 | 
			
		||||
                "INSERT IGNORE INTO channels (channel, name, guild_id) VALUES (?, ?, (SELECT id FROM guilds WHERE guild = ?))",
 | 
			
		||||
                "INSERT IGNORE INTO channels (channel, guild_id) VALUES (?, ?)",
 | 
			
		||||
                channel_id,
 | 
			
		||||
                channel_name,
 | 
			
		||||
                guild_id
 | 
			
		||||
            )
 | 
			
		||||
            .execute(&pool.clone())
 | 
			
		||||
@@ -56,7 +50,7 @@ impl ChannelData {
 | 
			
		||||
            Ok(sqlx::query_as_unchecked!(
 | 
			
		||||
                Self,
 | 
			
		||||
                "
 | 
			
		||||
                SELECT id, channel, name, nudge, blacklisted, webhook_id, webhook_token, paused, paused_until
 | 
			
		||||
                SELECT id, channel, nudge, webhook_id, webhook_token, paused, paused_until
 | 
			
		||||
                FROM channels
 | 
			
		||||
                WHERE channel = ?
 | 
			
		||||
                ",
 | 
			
		||||
@@ -72,18 +66,14 @@ impl ChannelData {
 | 
			
		||||
            "
 | 
			
		||||
            UPDATE channels
 | 
			
		||||
            SET
 | 
			
		||||
                name = ?,
 | 
			
		||||
                nudge = ?,
 | 
			
		||||
                blacklisted = ?,
 | 
			
		||||
                webhook_id = ?,
 | 
			
		||||
                webhook_token = ?,
 | 
			
		||||
                paused = ?,
 | 
			
		||||
                paused_until = ?
 | 
			
		||||
            WHERE id = ?
 | 
			
		||||
            ",
 | 
			
		||||
            self.name,
 | 
			
		||||
            self.nudge,
 | 
			
		||||
            self.blacklisted,
 | 
			
		||||
            self.webhook_id,
 | 
			
		||||
            self.webhook_token,
 | 
			
		||||
            self.paused,
 | 
			
		||||
 
 | 
			
		||||
@@ -144,12 +144,10 @@ pub async fn guild_command_macro(ctx: &Context<'_>, name: &str) -> Option<Comman
 | 
			
		||||
    let row = sqlx::query_as!(
 | 
			
		||||
        Row,
 | 
			
		||||
        "
 | 
			
		||||
        SELECT m.name, m.description, m.commands
 | 
			
		||||
        SELECT name, description, commands
 | 
			
		||||
        FROM command_macro m
 | 
			
		||||
        INNER JOIN guilds g
 | 
			
		||||
            ON g.id = m.guild_id
 | 
			
		||||
        WHERE guild = ?
 | 
			
		||||
            AND m.name = ?
 | 
			
		||||
        WHERE guild_id = ?
 | 
			
		||||
            AND name = ?
 | 
			
		||||
        ",
 | 
			
		||||
        ctx.guild_id().unwrap().get(),
 | 
			
		||||
        name
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ use sqlx::MySqlPool;
 | 
			
		||||
 | 
			
		||||
pub struct GuildData {
 | 
			
		||||
    pub ephemeral_confirmations: bool,
 | 
			
		||||
    pub id: u32,
 | 
			
		||||
    pub guild_id: u64,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl GuildData {
 | 
			
		||||
@@ -13,7 +13,7 @@ impl GuildData {
 | 
			
		||||
    ) -> Result<Self, Box<dyn std::error::Error + Sync + Send>> {
 | 
			
		||||
        if let Ok(c) = sqlx::query_as_unchecked!(
 | 
			
		||||
            Self,
 | 
			
		||||
            "SELECT id, ephemeral_confirmations FROM guilds WHERE guild = ?",
 | 
			
		||||
            "SELECT ephemeral_confirmations, id as guild_id FROM guilds WHERE id = ?",
 | 
			
		||||
            guild_id.get()
 | 
			
		||||
        )
 | 
			
		||||
        .fetch_one(pool)
 | 
			
		||||
@@ -21,13 +21,13 @@ impl GuildData {
 | 
			
		||||
        {
 | 
			
		||||
            Ok(c)
 | 
			
		||||
        } else {
 | 
			
		||||
            sqlx::query!("INSERT IGNORE INTO guilds (guild) VALUES (?)", guild_id.get())
 | 
			
		||||
            sqlx::query!("INSERT IGNORE INTO guilds (id) VALUES (?)", guild_id.get())
 | 
			
		||||
                .execute(&pool.clone())
 | 
			
		||||
                .await?;
 | 
			
		||||
 | 
			
		||||
            Ok(sqlx::query_as_unchecked!(
 | 
			
		||||
                Self,
 | 
			
		||||
                "SELECT id, ephemeral_confirmations FROM guilds WHERE guild = ?",
 | 
			
		||||
                "SELECT ephemeral_confirmations, id as guild_id FROM guilds WHERE id = ?",
 | 
			
		||||
                guild_id.get()
 | 
			
		||||
            )
 | 
			
		||||
            .fetch_one(pool)
 | 
			
		||||
@@ -39,7 +39,7 @@ impl GuildData {
 | 
			
		||||
        sqlx::query!(
 | 
			
		||||
            "UPDATE guilds SET ephemeral_confirmations = ? WHERE id = ?",
 | 
			
		||||
            self.ephemeral_confirmations,
 | 
			
		||||
            self.id
 | 
			
		||||
            self.guild_id
 | 
			
		||||
        )
 | 
			
		||||
        .execute(pool)
 | 
			
		||||
        .await
 | 
			
		||||
 
 | 
			
		||||
@@ -68,16 +68,19 @@ impl Data {
 | 
			
		||||
        guild_id: GuildId,
 | 
			
		||||
    ) -> Result<Vec<CommandMacro>, Error> {
 | 
			
		||||
        let rows = sqlx::query!(
 | 
			
		||||
            "SELECT name, description, commands FROM command_macro WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)",
 | 
			
		||||
            "SELECT name, description, commands FROM command_macro WHERE guild_id = ?",
 | 
			
		||||
            guild_id.get()
 | 
			
		||||
        )
 | 
			
		||||
        .fetch_all(&self.database)
 | 
			
		||||
        .await?.iter().map(|row| CommandMacro {
 | 
			
		||||
        .await?
 | 
			
		||||
        .iter()
 | 
			
		||||
        .map(|row| CommandMacro {
 | 
			
		||||
            guild_id,
 | 
			
		||||
            name: row.name.clone(),
 | 
			
		||||
            description: row.description.clone(),
 | 
			
		||||
            commands: serde_json::from_str(&row.commands.to_string()).unwrap(),
 | 
			
		||||
        }).collect();
 | 
			
		||||
        })
 | 
			
		||||
        .collect();
 | 
			
		||||
 | 
			
		||||
        Ok(rows)
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -262,7 +262,7 @@ impl Reminder {
 | 
			
		||||
                            channels.id = reminders.channel_id
 | 
			
		||||
                        WHERE
 | 
			
		||||
                            `status` = 'pending' AND
 | 
			
		||||
                            channels.guild_id = (SELECT id FROM guilds WHERE guild = ?)
 | 
			
		||||
                            channels.guild_id = ?
 | 
			
		||||
                        ",
 | 
			
		||||
                        guild_id.get()
 | 
			
		||||
                    )
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@ pub async fn get_reminder_templates(
 | 
			
		||||
 | 
			
		||||
    match sqlx::query_as_unchecked!(
 | 
			
		||||
        ReminderTemplate,
 | 
			
		||||
        "SELECT * FROM reminder_template WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)",
 | 
			
		||||
        "SELECT * FROM reminder_template WHERE guild_id = ?",
 | 
			
		||||
        id
 | 
			
		||||
    )
 | 
			
		||||
    .fetch_all(pool.inner())
 | 
			
		||||
@@ -57,7 +57,6 @@ pub async fn create_guild_reminder_template(
 | 
			
		||||
    check_authorization(cookies, ctx.inner(), id).await?;
 | 
			
		||||
 | 
			
		||||
    match create_reminder_template(
 | 
			
		||||
        ctx.inner(),
 | 
			
		||||
        &mut transaction,
 | 
			
		||||
        GuildId::new(id),
 | 
			
		||||
        reminder_template.into_inner(),
 | 
			
		||||
@@ -87,15 +86,14 @@ pub async fn delete_reminder_template(
 | 
			
		||||
    check_authorization(cookies, ctx.inner(), id).await?;
 | 
			
		||||
 | 
			
		||||
    match sqlx::query!(
 | 
			
		||||
        "DELETE FROM reminder_template WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?) AND id = ?",
 | 
			
		||||
        id, delete_reminder_template.id
 | 
			
		||||
        "DELETE FROM reminder_template WHERE guild_id = ? AND id = ?",
 | 
			
		||||
        id,
 | 
			
		||||
        delete_reminder_template.id
 | 
			
		||||
    )
 | 
			
		||||
    .fetch_all(pool.inner())
 | 
			
		||||
    .await
 | 
			
		||||
    {
 | 
			
		||||
        Ok(_) => {
 | 
			
		||||
            Ok(json!({}))
 | 
			
		||||
        }
 | 
			
		||||
        Ok(_) => Ok(json!({})),
 | 
			
		||||
        Err(e) => {
 | 
			
		||||
            warn!("Could not delete template from {}: {:?}", id, e);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@ pub async fn create_todo(
 | 
			
		||||
                "
 | 
			
		||||
                INSERT INTO todos (guild_id, channel_id, value)
 | 
			
		||||
                VALUES (
 | 
			
		||||
                    (SELECT id FROM guilds WHERE guild = ?),
 | 
			
		||||
                    ?,
 | 
			
		||||
                    (SELECT id FROM channels WHERE channel = ?),
 | 
			
		||||
                    ?
 | 
			
		||||
                )
 | 
			
		||||
@@ -88,7 +88,7 @@ pub async fn create_todo(
 | 
			
		||||
                "
 | 
			
		||||
                INSERT INTO todos (guild_id, channel_id, value)
 | 
			
		||||
                VALUES (
 | 
			
		||||
                    (SELECT id FROM guilds WHERE guild = ?),
 | 
			
		||||
                    ?,
 | 
			
		||||
                    NULL,
 | 
			
		||||
                    ?
 | 
			
		||||
                )
 | 
			
		||||
@@ -130,11 +130,9 @@ pub async fn get_todo(
 | 
			
		||||
            channels.channel AS channel_id,
 | 
			
		||||
            value
 | 
			
		||||
        FROM todos
 | 
			
		||||
        INNER JOIN guilds
 | 
			
		||||
        ON guilds.id = todos.guild_id
 | 
			
		||||
        LEFT JOIN channels
 | 
			
		||||
        ON channels.id = todos.channel_id
 | 
			
		||||
        WHERE guilds.guild = ?
 | 
			
		||||
        WHERE todos.guild_id = ?
 | 
			
		||||
        ",
 | 
			
		||||
        id
 | 
			
		||||
    )
 | 
			
		||||
@@ -167,7 +165,7 @@ pub async fn update_todo(
 | 
			
		||||
        "
 | 
			
		||||
        UPDATE todos
 | 
			
		||||
        SET value = ?
 | 
			
		||||
        WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)
 | 
			
		||||
        WHERE guild_id = ?
 | 
			
		||||
            AND id = ?
 | 
			
		||||
        ",
 | 
			
		||||
        todo.value,
 | 
			
		||||
@@ -202,7 +200,7 @@ pub async fn delete_todo(
 | 
			
		||||
    sqlx::query!(
 | 
			
		||||
        "
 | 
			
		||||
        DELETE FROM todos
 | 
			
		||||
        WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)
 | 
			
		||||
        WHERE guild_id = ?
 | 
			
		||||
            AND id = ?
 | 
			
		||||
        ",
 | 
			
		||||
        guild_id,
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,8 @@ pub async fn export(
 | 
			
		||||
 | 
			
		||||
    match sqlx::query_as_unchecked!(
 | 
			
		||||
        ReminderTemplateCsv,
 | 
			
		||||
        "SELECT
 | 
			
		||||
        "
 | 
			
		||||
        SELECT
 | 
			
		||||
            name,
 | 
			
		||||
            attachment,
 | 
			
		||||
            attachment_name,
 | 
			
		||||
@@ -60,7 +61,9 @@ pub async fn export(
 | 
			
		||||
            interval_months,
 | 
			
		||||
            tts,
 | 
			
		||||
            username
 | 
			
		||||
        FROM reminder_template WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)",
 | 
			
		||||
        FROM reminder_template
 | 
			
		||||
        WHERE guild_id = ?
 | 
			
		||||
        ",
 | 
			
		||||
        id
 | 
			
		||||
    )
 | 
			
		||||
    .fetch_all(pool.inner())
 | 
			
		||||
@@ -144,7 +147,6 @@ pub async fn import(
 | 
			
		||||
                        };
 | 
			
		||||
 | 
			
		||||
                        create_reminder_template(
 | 
			
		||||
                            ctx.inner(),
 | 
			
		||||
                            &mut transaction,
 | 
			
		||||
                            GuildId::new(id),
 | 
			
		||||
                            reminder_template,
 | 
			
		||||
 
 | 
			
		||||
@@ -38,10 +38,11 @@ pub async fn export(
 | 
			
		||||
 | 
			
		||||
    match sqlx::query_as_unchecked!(
 | 
			
		||||
        TodoCsv,
 | 
			
		||||
        "SELECT value, CONCAT('#', channels.channel) AS channel_id FROM todos
 | 
			
		||||
        "
 | 
			
		||||
        SELECT value, CONCAT('#', channels.channel) AS channel_id FROM todos
 | 
			
		||||
        LEFT JOIN channels ON todos.channel_id = channels.id
 | 
			
		||||
        INNER JOIN guilds ON todos.guild_id = guilds.id
 | 
			
		||||
        WHERE guilds.guild = ?",
 | 
			
		||||
        INNER JOIN guilds ON todos.guild_id = ?
 | 
			
		||||
        ",
 | 
			
		||||
        id
 | 
			
		||||
    )
 | 
			
		||||
    .fetch_all(pool.inner())
 | 
			
		||||
@@ -96,7 +97,7 @@ pub async fn import(
 | 
			
		||||
            Ok(body) => {
 | 
			
		||||
                let mut reader = csv::Reader::from_reader(body.as_slice());
 | 
			
		||||
 | 
			
		||||
                let query_placeholder = "(?, (SELECT id FROM channels WHERE channel = ?), (SELECT id FROM guilds WHERE guild = ?))";
 | 
			
		||||
                let query_placeholder = "(?, (SELECT id FROM channels WHERE channel = ?), ?)";
 | 
			
		||||
                let mut query_params = vec![];
 | 
			
		||||
 | 
			
		||||
                for result in reader.deserialize::<TodoCsv>() {
 | 
			
		||||
 
 | 
			
		||||
@@ -373,12 +373,12 @@ pub(crate) async fn create_reminder(
 | 
			
		||||
    reminder: CreateReminder,
 | 
			
		||||
) -> JsonResult {
 | 
			
		||||
    // check guild in db
 | 
			
		||||
    match sqlx::query!("SELECT 1 as A FROM guilds WHERE guild = ?", guild_id.get())
 | 
			
		||||
    match sqlx::query!("SELECT 1 as A FROM guilds WHERE id = ?", guild_id.get())
 | 
			
		||||
        .fetch_one(transaction.executor())
 | 
			
		||||
        .await
 | 
			
		||||
    {
 | 
			
		||||
        Err(sqlx::Error::RowNotFound) => {
 | 
			
		||||
            if sqlx::query!("INSERT INTO guilds (guild) VALUES (?)", guild_id.get())
 | 
			
		||||
            if sqlx::query!("INSERT INTO guilds (id) VALUES (?)", guild_id.get())
 | 
			
		||||
                .execute(transaction.executor())
 | 
			
		||||
                .await
 | 
			
		||||
                .is_err()
 | 
			
		||||
@@ -594,7 +594,6 @@ pub(crate) async fn create_reminder(
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub(crate) async fn create_reminder_template(
 | 
			
		||||
    ctx: &Context,
 | 
			
		||||
    transaction: &mut Transaction<'_>,
 | 
			
		||||
    guild_id: GuildId,
 | 
			
		||||
    reminder_template: ReminderTemplate,
 | 
			
		||||
@@ -659,7 +658,7 @@ pub(crate) async fn create_reminder_template(
 | 
			
		||||
         interval_months,
 | 
			
		||||
         tts,
 | 
			
		||||
         username
 | 
			
		||||
        ) VALUES ((SELECT id FROM guilds WHERE guild = ?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
 | 
			
		||||
        ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
 | 
			
		||||
         ?, ?, ?, ?, ?, ?, ?)",
 | 
			
		||||
        guild_id.get(),
 | 
			
		||||
        name,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user