Новая команда - selectroles

This commit is contained in:
JonnyBro 2022-11-09 21:09:00 +05:00
parent 9fe5e01cdb
commit 1e35502bfd
21 changed files with 174 additions and 20 deletions

View file

@ -12,7 +12,7 @@ class Automod extends BaseCommand {
.setName("automod")
.setDescription(client.translate("administration/automod:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addBooleanOption(option => option.setName("state")
.setDescription(client.translate("common:STATE"))
.setRequired(true))

View file

@ -12,7 +12,7 @@ class Autorole extends BaseCommand {
.setName("autorole")
.setDescription(client.translate("administration/autorole:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addBooleanOption(option => option.setName("state")
.setDescription(client.translate("common:STATE"))
.setRequired(true))

View file

@ -12,7 +12,7 @@ class Config extends BaseCommand {
.setName("config")
.setDescription(client.translate("administration/config:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild),
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator),
aliases: [],
dirname: __dirname,
ownerOnly: false

View file

@ -12,7 +12,7 @@ class Goodbye extends BaseCommand {
.setName("goodbye")
.setDescription(client.translate("administration/goodbye:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addSubcommand(subcommand => subcommand.setName("test")
.setDescription(client.translate("administration/goodbye:TEST"))
)

View file

@ -0,0 +1,140 @@
const { SlashCommandBuilder, PermissionFlagsBits, ActionRowBuilder, SelectMenuBuilder } = require("discord.js");
const BaseCommand = require("../../base/BaseCommand");
class Selectroles extends BaseCommand {
/**
*
* @param {import("../../base/JaBa")} client
*/
constructor(client) {
super({
command: new SlashCommandBuilder()
.setName("selectroles")
.setDescription(client.translate("administration/selectroles:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addSubcommand(subcommand => subcommand.setName("message")
.setDescription(client.translate("administration/selectroles:MESSAGE"))
.addStringOption(option => option.setName("text")
.setDescription(client.translate("common:MESSAGE"))
.setRequired(true))
)
.addSubcommand(subcommand => subcommand.setName("addrole")
.setDescription(client.translate("administration/selectroles:ADDROLE"))
.addChannelOption(option => option.setName("channel")
.setDescription(client.translate("common:CHANNEL"))
.setRequired(true))
.addStringOption(option => option.setName("message_id")
.setDescription(client.translate("common:MESSAGE_ID"))
.setRequired(true))
.addRoleOption(option => option.setName("role")
.setDescription(client.translate("common:ROLE"))
.setRequired(true))
),
aliases: [],
dirname: __dirname,
ownerOnly: false
});
}
/**
*
* @param {import("../../base/JaBa")} client
*/
async onLoad(client) {
client.on("interactionCreate", interaction => {
if (!interaction.isSelectMenu()) return;
if (interaction.customId === "auto_roles") {
const removed = interaction.component.options.filter(option => {
return !interaction.values.includes(option.value);
});
for (const id of removed) {
interaction.member.roles.remove(id.value);
}
for (const id of interaction.values) {
interaction.member.roles.add(id);
}
interaction.reply({
content: interaction.translate("administration/selectroles:ROLES_UPDATED", null, { ephemeral: true }),
ephemeral: true
});
}
});
}
/**
*
* @param {import("../../base/JaBa")} client
* @param {import("discord.js").ChatInputCommandInteraction} interaction
* @param {Object} data
*/
async execute(client, interaction) {
await interaction.deferReply({ ephemeral: true });
const command = interaction.options.getSubcommand();
if (command === "message") {
const text = interaction.options.getString("text");
interaction.channel.send(text).then(message => {
interaction.success("administration/selectroles:MESSAGE_SENT", {
channel: interaction.channel.toString(),
message_id: message.id
}, { edit: true });
});
} else if (command === "addrole") {
const channel = interaction.options.getChannel("channel");
const message_id = interaction.options.getString("message_id");
const message = await channel.messages.fetch(message_id);
if (!message || message.author.id !== client.user.id) return interaction.error("administration/selectroles:MESSAGE_ROLE", null, { edit: true });
const role = interaction.options.getRole("role");
let row = message.components[0];
if (!row) row = new ActionRowBuilder();
const option = [{
label: role.name,
value: role.id
}];
const menu = row.components[0];
if (menu) {
for (const o of menu.options) {
if (o.value === option[0].value) return interaction.error("administration/selectroles:ALREADY_IN_MENU");
}
row = ActionRowBuilder.from(row)
.setComponents(
SelectMenuBuilder.from(menu)
.setMinValues(0)
.setMaxValues(menu.options.length + 1)
.addOptions(option)
);
} else {
row.addComponents(
new SelectMenuBuilder()
.setCustomId("auto_roles")
.setMinValues(0)
.setMaxValues(1)
.setPlaceholder(interaction.translate("common:AVAILABLE_OPTIONS"))
.addOptions(option)
);
}
message.edit({
components: [row]
});
interaction.followUp({
content: interaction.translate("administration/selectroles:SUCCESS_ADDED", {
role: role.name
}),
ephemeral: true
});
}
}
}
module.exports = Selectroles;

View file

@ -12,7 +12,7 @@ class Set extends BaseCommand {
.setName("set")
.setDescription(client.translate("administration/set:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addStringOption(option => option.setName("type")
.setDescription(client.translate("owner/debug:TYPE"))
.setRequired(true)

View file

@ -12,7 +12,7 @@ class Setbirthdays extends BaseCommand {
.setName("setbirthdays")
.setDescription(client.translate("administration/setbirthdays:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addBooleanOption(option => option.setName("state")
.setDescription(client.translate("common:STATE"))
.setRequired(true))

View file

@ -12,7 +12,7 @@ class Setlang extends BaseCommand {
.setName("setlang")
.setDescription(client.translate("administration/setlang:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addStringOption(option => option.setName("language")
.setDescription(client.translate("common:LANGUAGE"))
.setRequired(true)

View file

@ -12,7 +12,7 @@ class Setmodlogs extends BaseCommand {
.setName("setmodlogs")
.setDescription(client.translate("administration/setmodlogs:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addBooleanOption(option => option.setName("state")
.setDescription(client.translate("common:STATE"))
.setRequired(true))

View file

@ -12,7 +12,7 @@ class Setnews extends BaseCommand {
.setName("setnews")
.setDescription(client.translate("administration/setnews:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addBooleanOption(option => option.setName("state")
.setDescription(client.translate("common:STATE"))
.setRequired(true))

View file

@ -12,7 +12,7 @@ class Setreports extends BaseCommand {
.setName("setreports")
.setDescription(client.translate("administration/setreports:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addBooleanOption(option => option.setName("state")
.setDescription(client.translate("common:STATE"))
.setRequired(true))

View file

@ -12,7 +12,7 @@ class Setsuggests extends BaseCommand {
.setName("setsuggests")
.setDescription(client.translate("administration/setsuggests:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addBooleanOption(option => option.setName("state")
.setDescription(client.translate("common:STATE"))
.setRequired(true))

View file

@ -12,7 +12,7 @@ class Stealemoji extends BaseCommand {
.setName("stealemoji")
.setDescription(client.translate("administration/stealemoji:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addStringOption(option => option.setName("emoji")
.setDescription(client.translate("common:EMOJI"))
.setRequired(true)),

View file

@ -12,7 +12,7 @@ class Welcome extends BaseCommand {
.setName("welcome")
.setDescription(client.translate("administration/welcome:DESCRIPTION"))
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.addSubcommand(subcommand => subcommand.setName("test")
.setDescription(client.translate("administration/goodbye:TEST"))
)

View file

@ -57,7 +57,7 @@ class Emoji extends BaseCommand {
value: parsedEmoji.animated ? interaction.translate("common:YES") : interaction.translate("common:NO")
},
{
name: interaction.translate("general/emoji:ID"),
name: interaction.translate("general/emoji:SERVER_ID"),
value: parsedEmoji.id?.toString() || interaction.translate("general/emoji:STANDART")
},
{

View file

@ -69,7 +69,7 @@ class Serverinfo extends BaseCommand {
inline: true
},
{
name: client.customEmojis.id + interaction.translate("common:ID"),
name: client.customEmojis.id + interaction.translate("common:SERVER_ID"),
value: guild.id,
inline: true
},

View file

@ -14,7 +14,7 @@ class Unban extends BaseCommand {
.setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.ModerateMembers && PermissionFlagsBits.ManageMessages)
.addStringOption(option => option.setName("user_id")
.setDescription(client.translate("moderation/unban:ID"))
.setDescription(client.translate("common:USER_ID"))
.setRequired(true)),
aliases: [],
dirname: __dirname,

View file

@ -1,14 +1,14 @@
const { Message, CommandInteraction } = require("discord.js");
CommandInteraction.prototype.translate = function (key, args) {
const language = this.client.translations.get(this.guild ? this.guild.data.language : "ru-RU");
const language = this.client.translations.get(this.guild.data ? this.guild.data.language ? this.guild.data.language : "ru-RU" : "ru-RU");
if (!language) throw "Interaction: Invalid language set in data.";
return language(key, args);
};
CommandInteraction.prototype.replyT = function (key, args, options = {}) {
let string = this.translate(key, args, this.guild ? this.guild.data.language : "ru-RU");
let string = this.translate(key, args, this.guild.data ? this.guild.data.language ? this.guild.data.language : "ru-RU" : "ru-RU");
if (options.prefixEmoji) string = `${this.client.customEmojis[options.prefixEmoji]} | ${string}`;
if (options.edit) return this.editReply({ content: string, ephemeral: options.ephemeral || false });

View file

@ -0,0 +1,13 @@
{
"DESCRIPTION": "Выдача ролей по выбору пользователей",
"USAGE": "message [text]\naddrole [@role]",
"EXAMPLES": "selectroles message text:Выберите роль!\nselectroles addrole role:@Обновления",
"MESSAGE": "Отправить сообщение в текущий канал",
"ADDROLE": "Добавить/убрать роль в сообщении",
"MESSAGE_ERROR": "Сообщение не существует или отправлено не мной",
"ALREADY_IN_MENU": "Роль уже есть в списке",
"NO_ROLES": "Сообщение не имеет списка авторолей",
"SUCCESS_ADDED": "Роль **{{role}}** добавлена в список",
"MESSAGE_SENT": "Сообщение отправлено в текущий голосовой чат, используйте /selectroles addrole channel:{{channel}} message_id:{{message_id}} role:@роль",
"ROLES_UPDATED": "Роли обновлены"
}

View file

@ -20,7 +20,9 @@
"EMOJI": "Эмодзи",
"ENABLE": "Включить",
"ENABLED": "Включено",
"ID": "ID сервера",
"SERVER_ID": "ID сервера",
"MESSAGE_ID": "ID сообщения",
"USER_ID": "ID пользователя",
"INT": "Целое число",
"IP": "IP адрес",
"JOINED": "Присоеденился",

View file

@ -2,7 +2,6 @@
"DESCRIPTION": "Разбанить пользователя на сервере",
"USAGE": "[user_id]",
"EXAMPLES": "unban user_id:281361531411890186",
"ID": "ID пользователя",
"NOT_BANNED": "Пользователь с ID **{{id}}** не найден",
"UNBANNED": "**{{id}}** разбанен!"
}