mirror of
https://github.com/arthur-pbty/gestion.git
synced 2026-06-16 08:12:36 +02:00
add logs set channel , event coming soon
This commit is contained in:
@@ -0,0 +1,124 @@
|
|||||||
|
const { ActionRowBuilder, StringSelectMenuBuilder, EmbedBuilder } = require('discord.js');
|
||||||
|
const sqlite3 = require('sqlite3').verbose();
|
||||||
|
const db = new sqlite3.Database('myDatabase.db');
|
||||||
|
module.exports = {
|
||||||
|
name: 'logs',
|
||||||
|
description: 'Affiche et configure les logs du serveur.',
|
||||||
|
category: 'logs',
|
||||||
|
emote: '📝',
|
||||||
|
utilisation: '+logs',
|
||||||
|
async execute(message, args) {
|
||||||
|
let data = await new Promise((resolve, reject) => {
|
||||||
|
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(row ? JSON.parse(row.value) : {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
.setColor('#0099ff')
|
||||||
|
.setTitle('Configuration des logs')
|
||||||
|
.addFields(
|
||||||
|
{ name: '📝 Logs de messages', value: data[message.guild.id]?.messagelog ? `<#${data[message.guild.id].messagelog}>` : 'Non configuré', inline: true },
|
||||||
|
{ name: '📚 Logs de rôles', value: data[message.guild.id]?.rolelog ? `<#${data[message.guild.id].rolelog}>` : 'Non configuré', inline: true },
|
||||||
|
{ name: '🎙️ Logs vocaux', value: data[message.guild.id]?.vocallog ? `<#${data[message.guild.id].vocallog}>` : 'Non configuré', inline: true },
|
||||||
|
{ name: '🛡️ Logs de raid', value: data[message.guild.id]?.raidlog ? `<#${data[message.guild.id].raidlog}>` : 'Non configuré', inline: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
const selectMenu = new StringSelectMenuBuilder()
|
||||||
|
.setCustomId(`logsselect_${message.guild.id}`)
|
||||||
|
.setPlaceholder('Sélectionnez un type de log pour le configurer')
|
||||||
|
.addOptions([
|
||||||
|
{ label: '📝 Logs de messages', value: 'messagelog', description: 'Configurer le salon de logs de messages' },
|
||||||
|
{ label: '📚 Logs de rôles', value: 'rolelog', description: 'Configurer le salon de logs de rôles' },
|
||||||
|
{ label: '🎙️ Logs vocaux', value: 'vocallog', description: 'Configurer le salon de logs vocaux' },
|
||||||
|
{ label: '🛡️ Logs de raid', value: 'raidlog', description: 'Configurer le salon de logs de raid' },
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
const row = new ActionRowBuilder()
|
||||||
|
.addComponents(selectMenu);
|
||||||
|
|
||||||
|
const logmessage = await message.channel.send({ embeds: [embed], components: [row] });
|
||||||
|
|
||||||
|
const filter = i => i.customId.startsWith('logsselect_') && i.user.id === message.author.id;
|
||||||
|
const filter2 = m => m.author.id === message.author.id;
|
||||||
|
const collector = logmessage.createMessageComponentCollector({ filter:filter, max: 1, time: 150000 });
|
||||||
|
|
||||||
|
collector.on('collect', async i => {
|
||||||
|
await i.deferReply();
|
||||||
|
const guildId = i.customId.split('_')[1];
|
||||||
|
const logdata = i.values[0];
|
||||||
|
const question = await i.editReply("Veuillez envoyer un salon");
|
||||||
|
const channelCollector = message.channel.createMessageCollector({ filter: filter2, max: 1, time: 60000 });
|
||||||
|
|
||||||
|
|
||||||
|
channelCollector.on('collect', async m => {
|
||||||
|
|
||||||
|
let channelId;
|
||||||
|
let data = await new Promise((resolve, reject) => {
|
||||||
|
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(row ? JSON.parse(row.value) : {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const channelMention = m.mentions.channels.first();
|
||||||
|
if (channelMention) {
|
||||||
|
channelId = channelMention.id;
|
||||||
|
} else {
|
||||||
|
const idMatch = m.content.match(/(\d{17,19})/);
|
||||||
|
if (idMatch) {
|
||||||
|
channelId = idMatch[0];
|
||||||
|
} else {
|
||||||
|
return message.reply('Veuillez fournir une mention de salon valide ou un ID.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const channel = message.guild.channels.cache.get(channelId);
|
||||||
|
if (!channel) {
|
||||||
|
return message.reply('Le salon fourni n\'existe pas.');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
data[guildId] = data[guildId] || {};
|
||||||
|
data[guildId][logdata] = channelId;
|
||||||
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], (err) => {
|
||||||
|
if (err) {
|
||||||
|
return message.reply('Une erreur s\'est produite lors de la mise à jour de la base de données.');
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let data2 = await new Promise((resolve, reject) => {
|
||||||
|
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(row ? JSON.parse(row.value) : {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
await m.delete();
|
||||||
|
await question.delete();
|
||||||
|
|
||||||
|
const updatedEmbed = new EmbedBuilder()
|
||||||
|
.setColor('#0099ff')
|
||||||
|
.setTitle('Configuration des logs')
|
||||||
|
.addFields(
|
||||||
|
{ name: '📝 Logs de messages', value: data2[guildId]?.messagelog ? `<#${data2[guildId].messagelog}>` : 'Non configuré', inline: true },
|
||||||
|
{ name: '📚 Logs de rôles', value: data2[guildId]?.rolelog ? `<#${data2[guildId].rolelog}>` : 'Non configuré', inline: true },
|
||||||
|
{ name: '🎙️ Logs vocaux', value: data2[guildId]?.vocallog ? `<#${data2[guildId].vocallog}>` : 'Non configuré', inline: true },
|
||||||
|
{ name: '🛡️ Logs de raid', value: data2[guildId]?.raidlog ? `<#${data2[guildId].raidlog}>` : 'Non configuré', inline: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
logmessage.edit({ embeds: [updatedEmbed], components: [row] });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
const { EmbedBuilder, ChannelType } = require('discord.js');
|
||||||
|
const sqlite3 = require('sqlite3').verbose();
|
||||||
|
const db = new sqlite3.Database('myDatabase.db');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: 'messagelog',
|
||||||
|
description: 'Enregistre l\'ID d\'un salon pour les logs de messages.',
|
||||||
|
category: 'logs',
|
||||||
|
emote: '📝',
|
||||||
|
utilisation: '+messagelog [#salon/id]',
|
||||||
|
async execute(message, args, client) {
|
||||||
|
let channelId;
|
||||||
|
const mentionedChannel = message.mentions.channels.first();
|
||||||
|
|
||||||
|
if (mentionedChannel) {
|
||||||
|
channelId = mentionedChannel.id;
|
||||||
|
} else if (args[0]) {
|
||||||
|
const channel = message.guild.channels.cache.get(args[0]);
|
||||||
|
if (channel && channel.type === ChannelType.GuildVoice ) {
|
||||||
|
channelId = args[0];
|
||||||
|
} else {
|
||||||
|
return message.reply('Le salon spécifié est invalide ou n\'existe pas dans ce serveur.');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
channelId = message.channel.id;
|
||||||
|
}
|
||||||
|
let data = await new Promise((resolve, reject) => {
|
||||||
|
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(row ? JSON.parse(row.value) : {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!data[message.guild.id]) {
|
||||||
|
data[message.guild.id] = {};
|
||||||
|
}
|
||||||
|
data[message.guild.id].messagelog = channelId;
|
||||||
|
|
||||||
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) {
|
||||||
|
if (err) {
|
||||||
|
return console.error(err.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
.setColor('#0099ff')
|
||||||
|
.setDescription(`Le salon de log de messages a été mis à jour dans le salon <#${channelId}>`);
|
||||||
|
message.channel.send({ embeds: [embed] });
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
const { EmbedBuilder, ChannelType } = require('discord.js');
|
||||||
|
const sqlite3 = require('sqlite3').verbose();
|
||||||
|
const db = new sqlite3.Database('myDatabase.db');
|
||||||
|
module.exports = {
|
||||||
|
name: 'raidlog',
|
||||||
|
description: 'Enregistre l\'ID d\'un salon pour les logs de raid.',
|
||||||
|
category: 'logs',
|
||||||
|
emote: '📝',
|
||||||
|
utilisation: '+raidlog [#salon/id]',
|
||||||
|
async execute(message, args) {
|
||||||
|
let channelId;
|
||||||
|
const mentionedChannel = message.mentions.channels.first();
|
||||||
|
|
||||||
|
if (mentionedChannel) {
|
||||||
|
channelId = mentionedChannel.id;
|
||||||
|
} else if (args[0]) {
|
||||||
|
const channel = message.guild.channels.cache.get(args[0]);
|
||||||
|
if (channel && channel.type === ChannelType.GuildText) {
|
||||||
|
channelId = args[0];
|
||||||
|
} else {
|
||||||
|
return message.reply('Le salon spécifié est invalide ou n\'existe pas dans ce serveur.');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
channelId = message.channel.id;
|
||||||
|
}
|
||||||
|
let data = await new Promise((resolve, reject) => {
|
||||||
|
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(row ? JSON.parse(row.value) : {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!data[message.guild.id]) {
|
||||||
|
data[message.guild.id] = {};
|
||||||
|
}
|
||||||
|
data[message.guild.id].raidlog = channelId;
|
||||||
|
|
||||||
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) {
|
||||||
|
if (err) {
|
||||||
|
return console.error(err.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
.setColor('#0099ff')
|
||||||
|
.setDescription(`Le salon de log de raid a été mis à jour dans le salon <#${channelId}>`);
|
||||||
|
message.channel.send({ embeds: [embed] });
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
const { EmbedBuilder, ChannelType } = require('discord.js');
|
||||||
|
const sqlite3 = require('sqlite3').verbose();
|
||||||
|
const db = new sqlite3.Database('myDatabase.db');
|
||||||
|
module.exports = {
|
||||||
|
name: 'rolelog',
|
||||||
|
description: 'Enregistre l\'ID d\'un salon pour les logs de rôles.',
|
||||||
|
category: 'logs',
|
||||||
|
emote: '📝',
|
||||||
|
utilisation: '+rolelog [#salon/id]',
|
||||||
|
async execute(message, args) {
|
||||||
|
let channelId;
|
||||||
|
const mentionedChannel = message.mentions.channels.first();
|
||||||
|
|
||||||
|
if (mentionedChannel) {
|
||||||
|
channelId = mentionedChannel.id;
|
||||||
|
} else if (args[0]) {
|
||||||
|
const channel = message.guild.channels.cache.get(args[0]);
|
||||||
|
if (channel && channel.type === ChannelType.GuildText) {
|
||||||
|
channelId = args[0];
|
||||||
|
} else {
|
||||||
|
return message.reply('Le salon spécifié est invalide ou n\'existe pas dans ce serveur.');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
channelId = message.channel.id;
|
||||||
|
}
|
||||||
|
let data = await new Promise((resolve, reject) => {
|
||||||
|
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(row ? JSON.parse(row.value) : {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!data[message.guild.id]) {
|
||||||
|
data[message.guild.id] = {};
|
||||||
|
}
|
||||||
|
data[message.guild.id].rolelog = channelId;
|
||||||
|
|
||||||
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) {
|
||||||
|
if (err) {
|
||||||
|
return console.error(err.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
.setColor('#0099ff')
|
||||||
|
.setDescription(`Le salon de log de rôles a été mis à jour dans le salon <#${channelId}>`);
|
||||||
|
message.channel.send({ embeds: [embed] });
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
const { EmbedBuilder, ChannelType } = require('discord.js');
|
||||||
|
const sqlite3 = require('sqlite3').verbose();
|
||||||
|
const db = new sqlite3.Database('myDatabase.db');
|
||||||
|
module.exports = {
|
||||||
|
name: 'vocallog',
|
||||||
|
description: 'Enregistre l\'ID d\'un salon pour les logs vocaux.',
|
||||||
|
category: 'logs',
|
||||||
|
emote: '📝',
|
||||||
|
utilisation: '+vocallog [#salon/id]',
|
||||||
|
async execute(message, args) {
|
||||||
|
let channelId;
|
||||||
|
const mentionedChannel = message.mentions.channels.first();
|
||||||
|
|
||||||
|
if (mentionedChannel) {
|
||||||
|
channelId = mentionedChannel.id;
|
||||||
|
} else if (args[0]) {
|
||||||
|
const channel = message.guild.channels.cache.get(args[0]);
|
||||||
|
if (channel && channel.type === ChannelType.GuildVoice) {
|
||||||
|
channelId = args[0];
|
||||||
|
} else {
|
||||||
|
return message.reply('Le salon spécifié est invalide ou n\'existe pas dans ce serveur.');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
channelId = message.channel.id;
|
||||||
|
}
|
||||||
|
let data = await new Promise((resolve, reject) => {
|
||||||
|
db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
resolve(row ? JSON.parse(row.value) : {});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!data[message.guild.id]) {
|
||||||
|
data[message.guild.id] = {};
|
||||||
|
}
|
||||||
|
data[message.guild.id].vocallog = channelId;
|
||||||
|
|
||||||
|
db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) {
|
||||||
|
if (err) {
|
||||||
|
return console.error(err.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const embed = new EmbedBuilder()
|
||||||
|
.setColor('#0099ff')
|
||||||
|
.setDescription(`Le salon de log vocaux a été mis à jour dans le salon <#${channelId}>`);
|
||||||
|
message.channel.send({ embeds: [embed] });
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -2,7 +2,7 @@ const { EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder } = require("di
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'devs',
|
name: 'devs',
|
||||||
aliases: ['devs'],
|
aliases: ['dev'],
|
||||||
description: 'Avoir les inforamtion sur les developeur.',
|
description: 'Avoir les inforamtion sur les developeur.',
|
||||||
emote: '⚙️',
|
emote: '⚙️',
|
||||||
utilisation: 'devs',
|
utilisation: 'devs',
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ const GestionDb = new db.table("gestion");
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'help',
|
name: 'help',
|
||||||
aliases: ['h', 'aide'],
|
aliases: ['aide'],
|
||||||
description: 'Affiche la liste des commandes',
|
description: 'Affiche la liste des commandes',
|
||||||
category: 'utils',
|
category: 'utils',
|
||||||
emote: '📚',
|
emote: '📚',
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ const sqlite3 = require('sqlite3').verbose();
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'helpall',
|
name: 'helpall',
|
||||||
aliases: ['hall', 'aideall'],
|
|
||||||
description: 'Liste toutes les commandes disponibles par niveau de permission',
|
description: 'Liste toutes les commandes disponibles par niveau de permission',
|
||||||
emote: '📚',
|
emote: '📚',
|
||||||
utilisation: 'helpall',
|
utilisation: 'helpall',
|
||||||
@@ -30,7 +29,6 @@ module.exports = {
|
|||||||
|
|
||||||
const commandsByPermission = {};
|
const commandsByPermission = {};
|
||||||
|
|
||||||
// Parcourir les permissions et les commandes associées
|
|
||||||
for (const [commandName, permissionLevel] of Object.entries(permissions)) {
|
for (const [commandName, permissionLevel] of Object.entries(permissions)) {
|
||||||
if (!commandsByPermission[permissionLevel]) {
|
if (!commandsByPermission[permissionLevel]) {
|
||||||
commandsByPermission[permissionLevel] = [];
|
commandsByPermission[permissionLevel] = [];
|
||||||
@@ -38,7 +36,7 @@ module.exports = {
|
|||||||
commandsByPermission[permissionLevel].push(commandName);
|
commandsByPermission[permissionLevel].push(commandName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Créer les embeds pour chaque niveau de permission avec des commandes associées
|
|
||||||
const embeds = Object.entries(commandsByPermission).map(([permissionLevel, commands]) => {
|
const embeds = Object.entries(commandsByPermission).map(([permissionLevel, commands]) => {
|
||||||
const commandDescriptions = commands.map(commandName => {
|
const commandDescriptions = commands.map(commandName => {
|
||||||
const command = client.commands.get(commandName);
|
const command = client.commands.get(commandName);
|
||||||
@@ -49,7 +47,7 @@ module.exports = {
|
|||||||
}).filter(Boolean);
|
}).filter(Boolean);
|
||||||
|
|
||||||
if (commandDescriptions.length === 0) {
|
if (commandDescriptions.length === 0) {
|
||||||
return null; // Skip creating an embed if there are no commands for this permission level
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const embed = new EmbedBuilder()
|
const embed = new EmbedBuilder()
|
||||||
@@ -58,7 +56,7 @@ module.exports = {
|
|||||||
|
|
||||||
embed.setDescription(commandDescriptions.join('\n'));
|
embed.setDescription(commandDescriptions.join('\n'));
|
||||||
return embed;
|
return embed;
|
||||||
}).filter(Boolean) // Filter out any undefined embeds
|
}).filter(Boolean)
|
||||||
|
|
||||||
if (embeds.length === 0) {
|
if (embeds.length === 0) {
|
||||||
return message.reply("Aucune commande disponible pour ce serveur.");
|
return message.reply("Aucune commande disponible pour ce serveur.");
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require("discord.js")
|
const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require("discord.js")
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'pic',
|
name: 'pic',
|
||||||
aliases: ['avatar', 'pfp', 'profilepic', 'profilepicture', 'pp'],
|
aliases: ['avatar', 'pfp'],
|
||||||
description: 'Affiche l\'avatar d\'un utilisateur',
|
description: 'Affiche l\'avatar d\'un utilisateur',
|
||||||
category: 'utils',
|
category: 'utils',
|
||||||
utilisation: 'pic [@user/userId]',
|
utilisation: 'pic [@user/userId]',
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require("
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'servericon',
|
name: 'servericon',
|
||||||
aliases: ['serverpfp', 'serverpic', 'serverpicture', 'serverpp'],
|
aliases: ['serverpfp', 'serverpic'],
|
||||||
description: 'Affiche l\'icone du serveur',
|
description: 'Affiche l\'icone du serveur',
|
||||||
emote: '🖼️',
|
emote: '🖼️',
|
||||||
utilisation: 'servericon',
|
utilisation: 'servericon',
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
const { EmbedBuilder } = require("discord.js")
|
const { EmbedBuilder } = require("discord.js")
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'serverinfo',
|
name: 'serverinfo',
|
||||||
aliases: ['si'],
|
|
||||||
description: 'Affiche les informations sur le serveur',
|
description: 'Affiche les informations sur le serveur',
|
||||||
emote: '📄',
|
emote: '📄',
|
||||||
utilisation: 'serverinfo',
|
utilisation: 'serverinfo',
|
||||||
|
|||||||
Reference in New Issue
Block a user