🚸 gdpr fix for removing guild when bot has bent offline during removal of bot.
This commit is contained in:
parent
5c40cd70e1
commit
88c6740adc
9 changed files with 76 additions and 40 deletions
|
@ -48,6 +48,7 @@
|
||||||
"tsconfig-paths": "^4.0.0",
|
"tsconfig-paths": "^4.0.0",
|
||||||
"typescript": "^4.6.3",
|
"typescript": "^4.6.3",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
|
"winston": "^3.8.0",
|
||||||
"winston-daily-rotate-file": "^4.6.1"
|
"winston-daily-rotate-file": "^4.6.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -7,66 +7,60 @@ import timeoutSchema from "../../models/timeout";
|
||||||
|
|
||||||
import logger from "../../logger";
|
import logger from "../../logger";
|
||||||
|
|
||||||
import { Guild } from "discord.js";
|
import { Snowflake } from "discord.js";
|
||||||
|
|
||||||
export default async (guild: Guild) => {
|
export default async (id: Snowflake) => {
|
||||||
await guildSchema
|
await guildSchema
|
||||||
.deleteMany({ guildId: guild.id })
|
.deleteMany({ guildId: id })
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
return logger?.silly(`Deleted guild: ${guild.id}`);
|
return logger?.silly(`Deleted guild: ${id}`);
|
||||||
})
|
})
|
||||||
.catch(async (error) => {
|
.catch(async (error) => {
|
||||||
logger?.error(`Error deleting guild: ${guild.id} - ${error}`);
|
logger?.error(`Error deleting guild: ${id} - ${error}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
await userSchema
|
await userSchema
|
||||||
.deleteMany({ guildId: guild.id })
|
.deleteMany({ guildId: id })
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
logger?.silly(`Deleted users for guild: ${guild.id} from database`);
|
logger?.silly(`Deleted users for guild: ${id} from database`);
|
||||||
})
|
})
|
||||||
.catch(async (error) => {
|
.catch(async (error) => {
|
||||||
logger?.error(`Error deleting users for guild: ${guild.id} - ${error}`);
|
logger?.error(`Error deleting users for guild: ${id} - ${error}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
await apiSchema
|
await apiSchema
|
||||||
.deleteMany({ guildId: guild.id })
|
.deleteMany({ guildId: id })
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
logger?.silly(`Deleted apis for guild: ${guild.id} from database`);
|
logger?.silly(`Deleted apis for guild: ${id} from database`);
|
||||||
})
|
})
|
||||||
.catch(async (error) => {
|
.catch(async (error) => {
|
||||||
logger?.error(`Error deleting apis for guild: ${guild.id} - ${error}`);
|
logger?.error(`Error deleting apis for guild: ${id} - ${error}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
await counterSchema
|
await counterSchema
|
||||||
.deleteMany({ guildId: guild.id })
|
.deleteMany({ guildId: id })
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
logger?.silly(`Deleted counters for guild: ${guild.id} from database`);
|
logger?.silly(`Deleted counters for guild: ${id} from database`);
|
||||||
})
|
})
|
||||||
.catch(async (error) => {
|
.catch(async (error) => {
|
||||||
logger?.error(
|
logger?.error(`Error deleting counters for guild: ${id} - ${error}`);
|
||||||
`Error deleting counters for guild: ${guild.id} - ${error}`
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
await shopRoleSchema
|
await shopRoleSchema
|
||||||
.deleteMany({ guildId: guild.id })
|
.deleteMany({ guildId: id })
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
logger?.silly(`Deleted shop roles for guild: ${guild.id} from database`);
|
logger?.silly(`Deleted shop roles for guild: ${id} from database`);
|
||||||
})
|
})
|
||||||
.catch(async (error) => {
|
.catch(async (error) => {
|
||||||
logger?.error(
|
logger?.error(`Error deleting shop roles for guild: ${id} - ${error}`);
|
||||||
`Error deleting shop roles for guild: ${guild.id} - ${error}`
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
await timeoutSchema
|
await timeoutSchema
|
||||||
.deleteMany({ guildId: guild.id })
|
.deleteMany({ guildId: id })
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
logger?.silly(`Deleted timeouts for guild: ${guild.id} from database`);
|
logger?.silly(`Deleted timeouts for guild: ${id} from database`);
|
||||||
})
|
})
|
||||||
.catch(async (error) => {
|
.catch(async (error) => {
|
||||||
logger?.error(
|
logger?.error(`Error deleting timeouts for guild: ${id} - ${error}`);
|
||||||
`Error deleting timeouts for guild: ${guild.id} - ${error}`
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Dependencies
|
// Dependencies
|
||||||
import { Guild } from "discord.js";
|
import { Snowflake } from "discord.js";
|
||||||
|
|
||||||
// Models
|
// Models
|
||||||
import guildSchema from "../../models/guild";
|
import guildSchema from "../../models/guild";
|
||||||
|
@ -8,18 +8,18 @@ import guildSchema from "../../models/guild";
|
||||||
import logger from "../../logger";
|
import logger from "../../logger";
|
||||||
|
|
||||||
// Function
|
// Function
|
||||||
export default async (guild: Guild) => {
|
export default async (id: Snowflake) => {
|
||||||
const guildObj = await guildSchema?.findOne({ guildId: guild.id });
|
const guildObj = await guildSchema?.findOne({ guildId: id });
|
||||||
if (guildObj === null) {
|
if (guildObj === null) {
|
||||||
const newGuildObj = new guildSchema({ guildId: guild.id });
|
const newGuildObj = new guildSchema({ guildId: id });
|
||||||
|
|
||||||
await newGuildObj
|
await newGuildObj
|
||||||
.save()
|
.save()
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
logger?.silly(`Created guild: ${guild.id}`);
|
logger?.silly(`Created guild: ${id}`);
|
||||||
})
|
})
|
||||||
.catch(async (error) => {
|
.catch(async (error) => {
|
||||||
logger?.error(`Error creating guild: ${guild.id} - ${error}`);
|
logger?.error(`Error creating guild: ${id} - ${error}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
return newGuildObj;
|
return newGuildObj;
|
||||||
|
|
38
src/jobs/keepDataUpToDate/index.ts
Normal file
38
src/jobs/keepDataUpToDate/index.ts
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
import { Client, Guild } from "discord.js";
|
||||||
|
import logger from "../../logger";
|
||||||
|
import dropGuild from "../../helpers/dropGuild";
|
||||||
|
import fetchGuild from "../../helpers/fetchGuild";
|
||||||
|
|
||||||
|
import guildSchema from "../../models/guild";
|
||||||
|
|
||||||
|
export const options = {
|
||||||
|
schedule: "*/5 * * * * *", // https://crontab.guru/
|
||||||
|
};
|
||||||
|
|
||||||
|
export const execute = async (client: Client) => {
|
||||||
|
const guildsDB = await guildSchema.find();
|
||||||
|
const guildsDiscord = client.guilds.cache;
|
||||||
|
|
||||||
|
const shouldNotExist = guildsDB
|
||||||
|
.filter((x) => !guildsDiscord.some((y) => y.id === x.guildId))
|
||||||
|
.map((z) => z.guildId);
|
||||||
|
|
||||||
|
const shouldExist = guildsDiscord
|
||||||
|
.filter((x) => !guildsDB.some((y) => y.guildId === x.id))
|
||||||
|
.map((z) => z.id);
|
||||||
|
|
||||||
|
logger.silly(shouldNotExist);
|
||||||
|
logger.silly(shouldExist);
|
||||||
|
|
||||||
|
if (shouldNotExist) {
|
||||||
|
shouldNotExist.map(async (x) => {
|
||||||
|
await dropGuild(x);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (shouldExist) {
|
||||||
|
shouldExist.map(async (x) => {
|
||||||
|
await fetchGuild(x);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
|
@ -43,7 +43,7 @@ export default {
|
||||||
return logger?.silly(`Guild is null`);
|
return logger?.silly(`Guild is null`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const guildDB = await fetchGuild(guild);
|
const guildDB = await fetchGuild(guild.id);
|
||||||
|
|
||||||
await cooldown.command(interaction, guildDB?.credits?.workTimeout);
|
await cooldown.command(interaction, guildDB?.credits?.workTimeout);
|
||||||
|
|
||||||
|
|
|
@ -11,10 +11,13 @@ export const options: IEventOptions = {
|
||||||
export const execute = async (guild: Guild) => {
|
export const execute = async (guild: Guild) => {
|
||||||
const { client } = guild;
|
const { client } = guild;
|
||||||
|
|
||||||
logger?.silly(`Added to guild: ${guild.name} (${guild.id})`);
|
if (!client.user)
|
||||||
|
throw new Error("Discord API client user is not available.");
|
||||||
|
|
||||||
await fetchGuild(guild);
|
logger.silly(
|
||||||
|
`${client.user.username} joined guild: ${guild.name} (${guild.id})`
|
||||||
|
);
|
||||||
|
|
||||||
|
await fetchGuild(guild.id);
|
||||||
await updatePresence(client);
|
await updatePresence(client);
|
||||||
|
|
||||||
logger.silly(`guildCreate: ${guild}`);
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,7 +16,7 @@ export const execute = async (guild: Guild) => {
|
||||||
|
|
||||||
logger?.silly(`Deleted from guild: ${guild.name} (${guild.id})`);
|
logger?.silly(`Deleted from guild: ${guild.name} (${guild.id})`);
|
||||||
|
|
||||||
await dropGuild(guild);
|
await dropGuild(guild.id);
|
||||||
await updatePresence(client);
|
await updatePresence(client);
|
||||||
|
|
||||||
logger.silly(`guildDelete: ${guild}`);
|
logger.silly(`guildDelete: ${guild}`);
|
||||||
|
|
|
@ -17,7 +17,7 @@ export default {
|
||||||
const { id: guildId } = guild;
|
const { id: guildId } = guild;
|
||||||
const { id: userId } = author;
|
const { id: userId } = author;
|
||||||
|
|
||||||
const guildData = await fetchGuild(guild);
|
const guildData = await fetchGuild(guild.id);
|
||||||
const userData = await fetchUser(author, guild);
|
const userData = await fetchUser(author, guild);
|
||||||
|
|
||||||
if (content.length < guildData.credits.minimumLength) return;
|
if (content.length < guildData.credits.minimumLength) return;
|
||||||
|
|
|
@ -14,7 +14,7 @@ export default {
|
||||||
if (author.bot) return;
|
if (author.bot) return;
|
||||||
if (channel?.type !== "GUILD_TEXT") return;
|
if (channel?.type !== "GUILD_TEXT") return;
|
||||||
|
|
||||||
const guildData = await fetchGuild(guild);
|
const guildData = await fetchGuild(guild.id);
|
||||||
const userData = await fetchUser(author, guild);
|
const userData = await fetchUser(author, guild);
|
||||||
|
|
||||||
if (content.length < guildData.credits.minimumLength) return;
|
if (content.length < guildData.credits.minimumLength) return;
|
||||||
|
|
Loading…
Add table
Reference in a new issue