mirror of
https://github.com/JonnyBro/JaBa.git
synced 2025-04-02 12:10:47 +05:00
Новая команда - selectroles
This commit is contained in:
parent
9fe5e01cdb
commit
1e35502bfd
21 changed files with 174 additions and 20 deletions
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"))
|
||||
)
|
||||
|
|
140
commands/Administration/selectroles.js
Normal file
140
commands/Administration/selectroles.js
Normal 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;
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)),
|
||||
|
|
|
@ -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"))
|
||||
)
|
||||
|
|
|
@ -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")
|
||||
},
|
||||
{
|
||||
|
|
|
@ -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
|
||||
},
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 });
|
||||
|
|
13
languages/ru-RU/administration/selectroles.json
Normal file
13
languages/ru-RU/administration/selectroles.json
Normal 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": "Роли обновлены"
|
||||
}
|
|
@ -20,7 +20,9 @@
|
|||
"EMOJI": "Эмодзи",
|
||||
"ENABLE": "Включить",
|
||||
"ENABLED": "Включено",
|
||||
"ID": "ID сервера",
|
||||
"SERVER_ID": "ID сервера",
|
||||
"MESSAGE_ID": "ID сообщения",
|
||||
"USER_ID": "ID пользователя",
|
||||
"INT": "Целое число",
|
||||
"IP": "IP адрес",
|
||||
"JOINED": "Присоеденился",
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
"DESCRIPTION": "Разбанить пользователя на сервере",
|
||||
"USAGE": "[user_id]",
|
||||
"EXAMPLES": "unban user_id:281361531411890186",
|
||||
"ID": "ID пользователя",
|
||||
"NOT_BANNED": "Пользователь с ID **{{id}}** не найден",
|
||||
"UNBANNED": "**{{id}}** разбанен!"
|
||||
}
|
Loading…
Add table
Reference in a new issue