mirror of
https://github.com/JonnyBro/JaBa.git
synced 2024-11-24 06:04:57 +05:00
some tickets stuff
This commit is contained in:
parent
c3dca64be4
commit
aaa0d01c54
83 changed files with 931 additions and 113 deletions
|
@ -42,6 +42,10 @@ module.exports = mongoose.model("Guild", new Schema({
|
|||
memberUpdate: null,
|
||||
messageUpdate: null,
|
||||
},
|
||||
tickets: {
|
||||
ticketLogs: null,
|
||||
transcriptionLogs: null,
|
||||
},
|
||||
suggestions: null,
|
||||
reports: null,
|
||||
birthdays: null,
|
||||
|
|
82
commands/!DISABLED/ban.js
Normal file
82
commands/!DISABLED/ban.js
Normal file
|
@ -0,0 +1,82 @@
|
|||
const { SlashCommandBuilder, PermissionsBitField } = require("discord.js");
|
||||
const BaseCommand = require("../../base/BaseCommand");
|
||||
|
||||
class Ban extends BaseCommand {
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
*/
|
||||
constructor(client) {
|
||||
super({
|
||||
command: new SlashCommandBuilder()
|
||||
.setName("ban")
|
||||
.setDescription(client.translate("moderation/ban:DESCRIPTION"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("moderation/ban:DESCRIPTION", null, "uk-UA"),
|
||||
ru: client.translate("moderation/ban:DESCRIPTION", null, "ru-RU"),
|
||||
})
|
||||
.setDMPermission(false)
|
||||
.setDefaultMemberPermissions(PermissionsBitField.Flags.BanMembers)
|
||||
.addUserOption(option =>
|
||||
option
|
||||
.setName("user")
|
||||
.setDescription(client.translate("common:USER"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("common:USER", null, "uk-UA"),
|
||||
ru: client.translate("common:USER", null, "ru-RU"),
|
||||
})
|
||||
.setRequired(true),
|
||||
)
|
||||
.addStringOption(option =>
|
||||
option
|
||||
.setName("reason")
|
||||
.setDescription(client.translate("common:REASON"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("common:REASON", null, "uk-UA"),
|
||||
ru: client.translate("common:REASON", null, "ru-RU"),
|
||||
})
|
||||
.setRequired(true),
|
||||
),
|
||||
aliases: [],
|
||||
dirname: __dirname,
|
||||
ownerOnly: false,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
*/
|
||||
async onLoad() {
|
||||
//...
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
* @param {import("discord.js").ChatInputCommandInteraction} interaction
|
||||
* @param {Object} data
|
||||
*/
|
||||
async execute(client, interaction) {
|
||||
await interaction.deferReply();
|
||||
|
||||
const member = interaction.options.getMember("user"),
|
||||
reason = interaction.options.getString("reason"),
|
||||
memberPosition = member.roles.highest.position,
|
||||
moderationPosition = interaction.member.roles.highest.position;
|
||||
|
||||
if (member.user.bot) return interaction.error("misc:BOT_USER", null, { ephemeral: true, edit: true });
|
||||
if (member.id === interaction.member.id) return interaction.error("moderation/ban:YOURSELF", null, { ephemeral: true, edit: true });
|
||||
if (interaction.guild.ownerId !== interaction.member.id && !(moderationPosition > memberPosition) && member.bannable) return interaction.error("moderation/ban:SUPERIOR", null, { ephemeral: true, edit: true });
|
||||
|
||||
await member.ban({
|
||||
reason,
|
||||
});
|
||||
|
||||
interaction.success("moderation/ban:SUCCESS", {
|
||||
user: member.user.toString(),
|
||||
reason,
|
||||
}, { edit: true });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Ban;
|
82
commands/!DISABLED/kick.js
Normal file
82
commands/!DISABLED/kick.js
Normal file
|
@ -0,0 +1,82 @@
|
|||
const { SlashCommandBuilder, PermissionsBitField } = require("discord.js");
|
||||
const BaseCommand = require("../../base/BaseCommand");
|
||||
|
||||
class Kick extends BaseCommand {
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
*/
|
||||
constructor(client) {
|
||||
super({
|
||||
command: new SlashCommandBuilder()
|
||||
.setName("kick")
|
||||
.setDescription(client.translate("moderation/kick:DESCRIPTION"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("moderation/kick:DESCRIPTION", null, "uk-UA"),
|
||||
ru: client.translate("moderation/kick:DESCRIPTION", null, "ru-RU"),
|
||||
})
|
||||
.setDMPermission(false)
|
||||
.setDefaultMemberPermissions(PermissionsBitField.Flags.KickMembers)
|
||||
.addUserOption(option =>
|
||||
option
|
||||
.setName("user")
|
||||
.setDescription(client.translate("common:USER"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("common:USER", null, "uk-UA"),
|
||||
ru: client.translate("common:USER", null, "ru-RU"),
|
||||
})
|
||||
.setRequired(true),
|
||||
)
|
||||
.addStringOption(option =>
|
||||
option
|
||||
.setName("reason")
|
||||
.setDescription(client.translate("common:REASON"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("common:REASON", null, "uk-UA"),
|
||||
ru: client.translate("common:REASON", null, "ru-RU"),
|
||||
})
|
||||
.setRequired(true),
|
||||
),
|
||||
aliases: [],
|
||||
dirname: __dirname,
|
||||
ownerOnly: false,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
*/
|
||||
async onLoad() {
|
||||
//...
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
* @param {import("discord.js").ChatInputCommandInteraction} interaction
|
||||
* @param {Object} data
|
||||
*/
|
||||
async execute(client, interaction) {
|
||||
await interaction.deferReply();
|
||||
|
||||
const member = interaction.options.getMember("user"),
|
||||
reason = interaction.options.getString("reason"),
|
||||
memberPosition = member.roles.highest.position,
|
||||
moderationPosition = interaction.member.roles.highest.position;
|
||||
|
||||
if (member.user.bot) return interaction.error("misc:BOT_USER", null, { ephemeral: true, edit: true });
|
||||
if (member.id === interaction.member.id) return interaction.error("moderation/kick:YOURSELF", null, { ephemeral: true, edit: true });
|
||||
if (interaction.guild.ownerId !== interaction.member.id && !(moderationPosition > memberPosition) && member.kickable) return interaction.error("moderation/kick:SUPERIOR", null, { ephemeral: true, edit: true });
|
||||
|
||||
await member.kick({
|
||||
reason,
|
||||
});
|
||||
|
||||
interaction.success("moderation/kick:SUCCESS", {
|
||||
user: member.user.toString(),
|
||||
reason,
|
||||
}, { edit: true });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Kick;
|
|
@ -60,6 +60,7 @@ class Checkjar extends BaseCommand {
|
|||
.setFooter({
|
||||
text: client.config.embed.footer,
|
||||
})
|
||||
.setTimestamp()
|
||||
.setDescription(`Текущий баланс: **${jar.balance / Math.pow(10, 2)}** грн\nТребуется на след. месяц: **379,18** грн (по курсу евро на 02.07.2023).\nЗдесь указаны последние 10 транзакций.`);
|
||||
|
||||
jarTransactions.length = 10;
|
||||
|
|
67
commands/Moderation/untimeout.js
Normal file
67
commands/Moderation/untimeout.js
Normal file
|
@ -0,0 +1,67 @@
|
|||
const { SlashCommandBuilder, PermissionsBitField } = require("discord.js");
|
||||
const BaseCommand = require("../../base/BaseCommand");
|
||||
|
||||
class Ban extends BaseCommand {
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
*/
|
||||
constructor(client) {
|
||||
super({
|
||||
command: new SlashCommandBuilder()
|
||||
.setName("untimeout")
|
||||
.setDescription(client.translate("moderation/untimeout:DESCRIPTION"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("moderation/untimeout:DESCRIPTION", null, "uk-UA"),
|
||||
ru: client.translate("moderation/untimeout:DESCRIPTION", null, "ru-RU"),
|
||||
})
|
||||
.setDMPermission(false)
|
||||
.setDefaultMemberPermissions(PermissionsBitField.Flags.ModerateMembers)
|
||||
.addUserOption(option =>
|
||||
option
|
||||
.setName("user")
|
||||
.setDescription(client.translate("common:USER"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("common:USER", null, "uk-UA"),
|
||||
ru: client.translate("common:USER", null, "ru-RU"),
|
||||
})
|
||||
.setRequired(true),
|
||||
),
|
||||
aliases: [],
|
||||
dirname: __dirname,
|
||||
ownerOnly: false,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
*/
|
||||
async onLoad() {
|
||||
//...
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
* @param {import("discord.js").ChatInputCommandInteraction} interaction
|
||||
* @param {Object} data
|
||||
*/
|
||||
async execute(client, interaction) {
|
||||
await interaction.deferReply();
|
||||
|
||||
const member = interaction.options.getMember("user"),
|
||||
timedout = member.isCommunicationDisabled();
|
||||
|
||||
if (member.user.bot) return interaction.error("misc:BOT_USER", null, { ephemeral: true, edit: true });
|
||||
if (member.id === interaction.member.id) return interaction.error("moderation/untimeout:YOURSELF", null, { ephemeral: true, edit: true });
|
||||
if (!timedout) return interaction.error("moderation/untimeout:NOT_TIMEDOUT", null, { ephemeral: true, edit: true });
|
||||
|
||||
await member.timeout(null);
|
||||
|
||||
interaction.success("moderation/untimeout:SUCCESS", {
|
||||
user: member.user.toString(),
|
||||
}, { edit: true });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Ban;
|
|
@ -34,7 +34,7 @@ class Warn extends BaseCommand {
|
|||
|
||||
if (member.user.bot) return interaction.error("misc:BOT_USER", null, { ephemeral: true });
|
||||
if (member.id === interaction.member.id) return interaction.error("moderation/warn:YOURSELF", null, { ephemeral: true });
|
||||
if (interaction.guild.ownerId !== interaction.member.id && !(moderationPosition > memberPosition)) return interaction.error("moderation/ban:SUPERIOR", null, { ephemeral: true });
|
||||
if (interaction.guild.ownerId !== interaction.member.id && !(moderationPosition > memberPosition)) return interaction.error("moderation/warn:SUPERIOR", null, { ephemeral: true });
|
||||
|
||||
const memberData = await client.findOrCreateMember({
|
||||
id: member.id,
|
||||
|
|
65
commands/Tickets/adduser.js
Normal file
65
commands/Tickets/adduser.js
Normal file
|
@ -0,0 +1,65 @@
|
|||
const { SlashCommandBuilder, PermissionsBitField } = require("discord.js");
|
||||
const BaseCommand = require("../../base/BaseCommand");
|
||||
|
||||
class Adduser extends BaseCommand {
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
*/
|
||||
constructor(client) {
|
||||
super({
|
||||
command: new SlashCommandBuilder()
|
||||
.setName("adduser")
|
||||
.setDescription(client.translate("tickets/adduser:DESCRIPTION"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("tickets/adduser:DESCRIPTION", null, "uk-UA"),
|
||||
ru: client.translate("tickets/adduser:DESCRIPTION", null, "ru-RU"),
|
||||
})
|
||||
.setDMPermission(false)
|
||||
.setDefaultMemberPermissions(PermissionsBitField.Flags.ManageMessages)
|
||||
.addUserOption(option =>
|
||||
option
|
||||
.setName("user")
|
||||
.setDescription(client.translate("common:USER"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("common:USER", null, "uk-UA"),
|
||||
ru: client.translate("common:USER", null, "ru-RU"),
|
||||
})
|
||||
.setRequired(true),
|
||||
),
|
||||
aliases: [],
|
||||
dirname: __dirname,
|
||||
ownerOnly: false,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
*/
|
||||
async onLoad() {
|
||||
//...
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
* @param {import("discord.js").ChatInputCommandInteraction} interaction
|
||||
* @param {Object} data
|
||||
*/
|
||||
async execute(client, interaction) {
|
||||
await interaction.deferReply();
|
||||
|
||||
const member = interaction.options.getMember("user");
|
||||
|
||||
if (member.user.bot) return interaction.error("misc:BOT_USER", null, { ephemeral: true, edit: true });
|
||||
if (!interaction.channel.name.includes("support") && !interaction.channel.name.includes("application")) return interaction.error("tickets/adduser:NOT_TICKET", null, { ephemeral: true, edit: true });
|
||||
|
||||
await interaction.channel.permissionOverwrites.edit(member, { ViewChannel: true, SendMessages: true });
|
||||
|
||||
interaction.success("tickets/adduser:SUCCESS", {
|
||||
user: member.user.toString(),
|
||||
}, { edit: true });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Adduser;
|
122
commands/Tickets/closeticket.js
Normal file
122
commands/Tickets/closeticket.js
Normal file
|
@ -0,0 +1,122 @@
|
|||
const { SlashCommandBuilder, PermissionsBitField, EmbedBuilder, ButtonBuilder, ButtonStyle, ActionRowBuilder } = require("discord.js");
|
||||
const BaseCommand = require("../../base/BaseCommand");
|
||||
|
||||
class CloseTicket extends BaseCommand {
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
*/
|
||||
constructor(client) {
|
||||
super({
|
||||
command: new SlashCommandBuilder()
|
||||
.setName("closeticket")
|
||||
.setDescription(client.translate("tickets/closeticket:DESCRIPTION"))
|
||||
.setDescriptionLocalizations({
|
||||
uk: client.translate("tickets/closeticket:DESCRIPTION", null, "uk-UA"),
|
||||
ru: client.translate("tickets/closeticket:DESCRIPTION", null, "ru-RU"),
|
||||
})
|
||||
.setDMPermission(false)
|
||||
.setDefaultMemberPermissions(PermissionsBitField.Flags.ManageMessages),
|
||||
aliases: [],
|
||||
dirname: __dirname,
|
||||
ownerOnly: false,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
*/
|
||||
async onLoad() {
|
||||
//...
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param {import("../../base/JaBa")} client
|
||||
* @param {import("discord.js").ChatInputCommandInteraction} interaction
|
||||
* @param {Object} data
|
||||
*/
|
||||
async execute(client, interaction, data) {
|
||||
await interaction.deferReply();
|
||||
|
||||
if (!interaction.channel.name.includes("support") && !interaction.channel.name.includes("application")) return interaction.error("tickets/adduser:NOT_TICKET", null, { ephemeral: true, edit: true });
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle(interaction.translate("tickets/closeticket:CLOSING_TITLE"))
|
||||
.setDescription(interaction.translate("tickets/closeticket:CLOSING_DESC"))
|
||||
.addFields(
|
||||
{
|
||||
name: interaction.translate("common:TICKET"),
|
||||
value: interaction.channel.name,
|
||||
},
|
||||
{
|
||||
name: interaction.translate("tickets/closeticket:CLOSING_BY"),
|
||||
value: interaction.user.getUsetname(),
|
||||
},
|
||||
)
|
||||
.setColor(client.config.embed.color)
|
||||
.setFooter(client.config.embed.footer)
|
||||
.setTimestamp();
|
||||
|
||||
const button = new ButtonBuilder().setCustomId("cancel").setLabel(interaction.translate("common:CANCEL")).setStyle(ButtonStyle.Danger);
|
||||
const row = new ActionRowBuilder().addComponents(button);
|
||||
|
||||
await interaction.reply({
|
||||
embeds: [embed],
|
||||
components: [row],
|
||||
});
|
||||
|
||||
const filter = i => i.customId === "cancel";
|
||||
const collector = interaction.channel.createMessageComponentCollector({ filter, time: 5000 });
|
||||
|
||||
collector.on("collect", async i => {
|
||||
await i.update({ content: interaction.translate("tickets/closeticket:CLOSING_CANCELED"), components: [] });
|
||||
collector.stop("canceled");
|
||||
});
|
||||
|
||||
collector.on("end", async (_, reason) => {
|
||||
if (reason === "canceled") {
|
||||
const transcriptionLogs = data.guildData.plugins.tickets.transcriptionLogs;
|
||||
if (transcriptionLogs) interaction.guild.channels.cache.get(transcriptionLogs).send({ content: interaction.translate("tickets/closeticket:TRANSCRIPT", { channel: `<#${transcriptionLogs}>` }), files: [{ attachment: Buffer.from(transcript), name: `${interaction.channel.name}.txt` }] });
|
||||
const reversedMessages = await interaction.channel.messages.fetch();
|
||||
|
||||
const messages = Array.from(reversedMessages.values()).reverse();
|
||||
|
||||
let transcript = "";
|
||||
messages.forEach(message => {
|
||||
transcript += `${message.author.username}: ${message.content}\n`;
|
||||
});
|
||||
|
||||
try {
|
||||
await interaction.user.send({ content: `Here is the transcript for your ticket: ${interaction.channel.name}`, files: [{ attachment: Buffer.from(transcript), name: `${interaction.channel.name}.txt` }] });
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
await interaction.reply("An error occurred while trying to send the transcript to the user.");
|
||||
}
|
||||
|
||||
await interaction.channel.delete();
|
||||
}
|
||||
});
|
||||
|
||||
const ticketLogs = data.guildData.plugins.tickets.ticketLogs;
|
||||
const logEmbed = new EmbedBuilder()
|
||||
.setTitle(interaction.translate("tickets/closeticket:CLOSED_TITLE"))
|
||||
.addFields(
|
||||
{
|
||||
name: interaction.translate("common:TICKET"),
|
||||
value: interaction.channel.name,
|
||||
},
|
||||
{
|
||||
name: interaction.translate("tickets/closeticket:CLOSING_BY"),
|
||||
value: interaction.user.getUsetname(),
|
||||
},
|
||||
)
|
||||
.setColor(client.config.embed.color)
|
||||
.setFooter(client.config.embed.footer)
|
||||
.setTimestamp();
|
||||
|
||||
if (ticketLogs) interaction.guild.channels.cache.get(ticketLogs).send({ embeds: [logEmbed] });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = CloseTicket;
|
10
commands/Tickets/empty.js
Normal file
10
commands/Tickets/empty.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
const { SlashCommandBuilder } = require('discord.js');
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('test')
|
||||
.setDescription('Replies with test'),
|
||||
async execute(interaction) {
|
||||
await interaction.reply('test');
|
||||
},
|
||||
};
|
32
commands/Tickets/openTicketChannel.js
Normal file
32
commands/Tickets/openTicketChannel.js
Normal file
|
@ -0,0 +1,32 @@
|
|||
const { SlashCommandBuilder, EmbedBuilder, ButtonBuilder, ButtonStyle, ActionRowBuilder, PermissionFlagsBits } = require('discord.js');
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('openticketchannel')
|
||||
.setDescription('Creates an embed with buttons to open a ticket')
|
||||
.setDefaultMemberPermissions(PermissionFlagsBits.ManageGuild),
|
||||
async execute(interaction) {
|
||||
// create embed for ticket
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle('Tickets')
|
||||
.setDescription('Open a ticket by choosing a category below');
|
||||
|
||||
// add button for support and application
|
||||
const supportButton = new ButtonBuilder()
|
||||
.setCustomId('support')
|
||||
.setLabel('Support')
|
||||
.setStyle(ButtonStyle.Primary);
|
||||
|
||||
const applicationButton = new ButtonBuilder()
|
||||
.setCustomId('application')
|
||||
.setLabel('Application')
|
||||
.setStyle(ButtonStyle.Primary);
|
||||
|
||||
const row = new ActionRowBuilder()
|
||||
.addComponents(supportButton, applicationButton);
|
||||
|
||||
// send message with buttons
|
||||
await interaction.channel.send({ embeds: [embed], components: [row] });
|
||||
await interaction.reply('Done');
|
||||
},
|
||||
};
|
35
commands/Tickets/removeuser.js
Normal file
35
commands/Tickets/removeuser.js
Normal file
|
@ -0,0 +1,35 @@
|
|||
const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('removeuser')
|
||||
.setDescription('Remove a user from a ticket')
|
||||
.addMentionableOption(option =>
|
||||
option.setName('user')
|
||||
.setDescription('The user to remove')
|
||||
.setRequired(true))
|
||||
.setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages),
|
||||
async execute(interaction) {
|
||||
try {
|
||||
const user = interaction.options.getMentionable('user');
|
||||
const currentChannel = interaction.channel;
|
||||
|
||||
if (currentChannel) {
|
||||
if (!interaction.channel.name.includes('support') && !interaction.channel.name.includes('application')) {
|
||||
interaction.reply('This command can only be used in a ticket channel.');
|
||||
return;
|
||||
}
|
||||
const member = await interaction.guild.members.fetch(user.id);
|
||||
await interaction.channel.permissionOverwrites.edit(member, { ViewChannel: false });
|
||||
interaction.reply(`Removed ${user} to the ticket.`);
|
||||
}
|
||||
else {
|
||||
interaction.reply('This channel is not a ticket.');
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
console.log(error);
|
||||
interaction.reply('Error adding user to ticket.');
|
||||
}
|
||||
},
|
||||
};
|
27
commands/Tickets/rename.js
Normal file
27
commands/Tickets/rename.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('rename')
|
||||
.setDescription('Renames the ticket channel. Usage: /rename <new name>')
|
||||
.addStringOption(option =>
|
||||
option.setName('newname')
|
||||
.setDescription('The new name for the ticket channel')
|
||||
.setRequired(true))
|
||||
.setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages),
|
||||
async execute(interaction) {
|
||||
try {
|
||||
const newName = interaction.options.getString('newname');
|
||||
if (!interaction.channel.name.includes('support') && !interaction.channel.name.includes('application')) {
|
||||
interaction.reply('This command can only be used in a ticket channel.');
|
||||
return;
|
||||
}
|
||||
await interaction.channel.setName(newName + '-' + interaction.channel.name.split('-')[1]);
|
||||
interaction.reply(`Renamed the ticket channel to ${newName}`);
|
||||
}
|
||||
catch (error) {
|
||||
console.error(error);
|
||||
interaction.reply('An error occurred while trying to rename the ticket channel.');
|
||||
}
|
||||
},
|
||||
};
|
241
interactions.js
Normal file
241
interactions.js
Normal file
|
@ -0,0 +1,241 @@
|
|||
if (interaction.isModalSubmit()) {
|
||||
const age = interaction.fields.getTextInputValue('age');
|
||||
const location = interaction.fields.getTextInputValue('location');
|
||||
const experience = interaction.fields.getTextInputValue('experience');
|
||||
const why = interaction.fields.getTextInputValue('why');
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle('Application')
|
||||
.setDescription('Thank you for applying to the server!')
|
||||
.addFields(
|
||||
{ name: 'Age', value: age },
|
||||
{ name: 'Location', value: location },
|
||||
{ name: 'Experience', value: experience },
|
||||
{ name: 'Why', value: why },
|
||||
)
|
||||
.setColor('#00ff00')
|
||||
.setTimestamp();
|
||||
|
||||
// create ticket channel in application category
|
||||
const channel = await interaction.guild.channels.create({
|
||||
name: `${interaction.user.username}-application`,
|
||||
type: ChannelType.GuildText,
|
||||
parent: applicationTicketCategory,
|
||||
permissionOverwrites: [
|
||||
{
|
||||
id: interaction.user.id,
|
||||
allow: [PermissionsBitField.Flags.ViewChannel],
|
||||
},
|
||||
{
|
||||
id: interaction.guild.roles.everyone,
|
||||
deny: [PermissionsBitField.Flags.ViewChannel],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// for each role in config access_to_ticket array add permission to view channel
|
||||
for (const role of access_to_ticket) {
|
||||
await channel.permissionOverwrites.edit(role, { ViewChannel: true });
|
||||
}
|
||||
|
||||
const pingMessage = access_to_ticket.map(role => `||<@&${role}>||`).join(' ') + ` ||${interaction.user}||`;
|
||||
await channel.send(pingMessage);
|
||||
|
||||
|
||||
// send message to ticket log channel
|
||||
const logChannel = interaction.guild.channels.cache.get(ticketLogChannel);
|
||||
await logChannel.send(`Ticket created by ${interaction.user} in ${channel}`);
|
||||
|
||||
await interaction.reply({ content: `Your application has been submitted. Please wait for a response from a staff member. ${channel}`, ephemeral: true });
|
||||
|
||||
const closeButton = new ButtonBuilder()
|
||||
.setCustomId('close')
|
||||
.setLabel('Close')
|
||||
.setStyle(ButtonStyle.Danger);
|
||||
|
||||
const row = new ActionRowBuilder()
|
||||
.addComponents(closeButton);
|
||||
|
||||
await channel.send({ embeds: [embed], components: [row] });
|
||||
}
|
||||
else if (interaction.isButton()) {
|
||||
// handle openTicketChannel button interactions here
|
||||
|
||||
// application button ----------------------------------------------------------------------------------------
|
||||
const button = interaction.component;
|
||||
if (button.customId === 'application') {
|
||||
// TODO: Create application embed builder by taking user input
|
||||
|
||||
const modal = new ModalBuilder()
|
||||
.setCustomId('application')
|
||||
.setTitle('Application');
|
||||
|
||||
const ageInput = new TextInputBuilder()
|
||||
.setCustomId('age')
|
||||
.setLabel('Enter your age')
|
||||
.setStyle(TextInputStyle.Short);
|
||||
|
||||
const locationInput = new TextInputBuilder()
|
||||
.setCustomId('location')
|
||||
.setLabel('Enter your time zone and country')
|
||||
.setStyle(TextInputStyle.Short);
|
||||
|
||||
const experienceInput = new TextInputBuilder()
|
||||
.setCustomId('experience')
|
||||
.setLabel('Enter your experience with Minecraft')
|
||||
.setStyle(TextInputStyle.Paragraph);
|
||||
|
||||
const whyInput = new TextInputBuilder()
|
||||
.setCustomId('why')
|
||||
.setLabel('Why do you want to join this server?')
|
||||
.setStyle(TextInputStyle.Paragraph);
|
||||
|
||||
const modalRow1 = new ActionRowBuilder()
|
||||
.addComponents(ageInput);
|
||||
|
||||
const modalRow2 = new ActionRowBuilder()
|
||||
.addComponents(locationInput);
|
||||
|
||||
const modalRow3 = new ActionRowBuilder()
|
||||
.addComponents(experienceInput);
|
||||
|
||||
const modalRow4 = new ActionRowBuilder()
|
||||
.addComponents(whyInput);
|
||||
|
||||
modal.addComponents(modalRow1, modalRow2, modalRow3, modalRow4);
|
||||
|
||||
await interaction.showModal(modal);
|
||||
}
|
||||
// support button ----------------------------------------------------------------------------------------
|
||||
if (button.customId === 'support') {
|
||||
const channel = await interaction.guild.channels.create({
|
||||
name: `${interaction.user.username}-support`,
|
||||
type: ChannelType.GuildText,
|
||||
parent: supportTicketCategory,
|
||||
permissionOverwrites: [
|
||||
{
|
||||
id: interaction.user.id,
|
||||
allow: [PermissionsBitField.Flags.ViewChannel],
|
||||
},
|
||||
{
|
||||
id: interaction.guild.roles.everyone,
|
||||
deny: [PermissionsBitField.Flags.ViewChannel],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const logChannel = interaction.guild.channels.cache.get(ticketLogChannel);
|
||||
const logEmbed = new EmbedBuilder()
|
||||
.setTitle('Ticket Created')
|
||||
.setDescription(`Ticket created by ${interaction.user} in ${channel}`)
|
||||
.setTimestamp()
|
||||
.setFooter({ text: 'Bot created by dylancanada' });
|
||||
|
||||
await logChannel.send({ embeds: [logEmbed] });
|
||||
await interaction.reply({ content: `Ticket created at ${channel}`, ephemeral: true });
|
||||
|
||||
for (const role of access_to_ticket) {
|
||||
await channel.permissionOverwrites.edit(role, { ViewChannel: true });
|
||||
}
|
||||
|
||||
const pingMessage = access_to_ticket.map(role => `||<@&${role}>||`).join(' ');
|
||||
await channel.send(pingMessage);
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle('Support Ticket')
|
||||
.setDescription('Ticket created, click the button below to close the ticket')
|
||||
.setAuthor({ name: interaction.user.username, iconURL: interaction.user.displayAvatarURL() })
|
||||
.addFields({ name: 'Ticket', value: `Please explain your issue ${interaction.user} and someone will be with you shortly`, inline: false })
|
||||
.setTimestamp()
|
||||
.setFooter({ text: 'Bot created by dylancanada' });
|
||||
|
||||
const closeButton = new ButtonBuilder()
|
||||
.setCustomId('close')
|
||||
.setLabel('Close')
|
||||
.setStyle(ButtonStyle.Danger);
|
||||
|
||||
const row = new ActionRowBuilder()
|
||||
.addComponents(closeButton);
|
||||
|
||||
await channel.send({ embeds: [embed], components: [row] });
|
||||
|
||||
}
|
||||
|
||||
if (button.customId === 'close') {
|
||||
const closeEmbed = new EmbedBuilder()
|
||||
.setTitle('Closing Ticket')
|
||||
.setDescription('This ticket will be closed in 5 seconds.')
|
||||
.addFields(
|
||||
{ name: 'Ticket', value: interaction.channel.name },
|
||||
{ name: 'Closed By', value: interaction.user.username },
|
||||
)
|
||||
.setColor('#ff0000');
|
||||
|
||||
const closeButton = new ButtonBuilder()
|
||||
.setCustomId('cancel')
|
||||
.setLabel('Cancel')
|
||||
.setStyle(ButtonStyle.Danger);
|
||||
|
||||
const row = new ActionRowBuilder()
|
||||
.addComponents(closeButton);
|
||||
|
||||
await interaction.reply({ embeds: [closeEmbed], components: [row] });
|
||||
|
||||
const filter = i => i.customId === 'cancel';
|
||||
const collector = interaction.channel.createMessageComponentCollector({ filter, time: 5000 });
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
collector.on('collect', async i => {
|
||||
await i.update({ content: 'Ticket close cancelled.', components: [] });
|
||||
collector.stop();
|
||||
});
|
||||
|
||||
collector.on('end', async collected => {
|
||||
if (collected.size === 0) {
|
||||
const transcriptChannel = interaction.guild.channels.cache.get(ticketTranscriptChannel);
|
||||
const reversedMessages = await interaction.channel.messages.fetch({ limit: 100 });
|
||||
|
||||
const messages = Array.from(reversedMessages.values()).reverse();
|
||||
|
||||
let transcript = '';
|
||||
messages.forEach(message => {
|
||||
transcript += `${message.author.getUsername()}: ${message.content}\n`;
|
||||
});
|
||||
|
||||
transcriptChannel.send({ content: `Transcript for ${interaction.channel.name}`, files: [{ attachment: Buffer.from(transcript), name: `${interaction.channel.name}.txt` }] });
|
||||
|
||||
try {
|
||||
await interaction.user.send({ content: `Here is the transcript for your ticket: ${interaction.channel.name}`, files: [{ attachment: Buffer.from(transcript), name: `${interaction.channel.name}.txt` }] });
|
||||
}
|
||||
catch (error) {
|
||||
console.error(error);
|
||||
await interaction.reply('An error occurred while trying to send the transcript to the user.');
|
||||
}
|
||||
|
||||
await interaction.channel.delete();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (button.customId === 'transcript') {
|
||||
const transcriptChannel = interaction.guild.channels.cache.get(ticketTranscriptChannel);
|
||||
const reversedMessages = await interaction.channel.messages.fetch({ limit: 100 });
|
||||
|
||||
const messages = Array.from(reversedMessages.values()).reverse();
|
||||
|
||||
let transcript = '';
|
||||
messages.forEach(message => {
|
||||
transcript += `${message.author.username}: ${message.content}\n`;
|
||||
});
|
||||
|
||||
transcriptChannel.send({ content: `Transcript for ${interaction.channel.name}`, files: [{ attachment: Buffer.from(transcript), name: `${interaction.channel.name}.txt` }] });
|
||||
|
||||
try {
|
||||
await interaction.user.send({ content: `Here is the transcript for your ticket: ${interaction.channel.name}`, files: [{ attachment: Buffer.from(transcript), name: `${interaction.channel.name}.txt` }] });
|
||||
}
|
||||
catch (error) {
|
||||
console.error(error);
|
||||
await interaction.reply('An error occurred while trying to send the transcript to the user.');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Modify a user's experience, level, credits, or bank",
|
||||
"USAGE": "[type] [@user] [int]",
|
||||
"EXAMPLES": "set type:Level user:@Jonny_Bro#4226 int:10",
|
||||
"EXAMPLES": "set type:Level user:@jonny_bro int:10",
|
||||
"INVALID_NUMBER": "The value must be greater than zero"
|
||||
}
|
|
@ -60,6 +60,7 @@
|
|||
"STATUS_IDLE": "Idle",
|
||||
"STATUS_OFFLINE": "Offline",
|
||||
"STATUS_ONLINE": "Online",
|
||||
"TICKET": "Ticket",
|
||||
"UNKNOWN": "Unknown",
|
||||
"USER": "User",
|
||||
"USERNAME": "Username",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Shows a user's list of achievements",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "achievements\nachievements user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "achievements\nachievements user:@jonny_bro",
|
||||
"SEND_CMD": "Use your first command",
|
||||
"CLAIM_SALARY": "Claim your salary 10 times",
|
||||
"MARRY": "Find a partner",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Marry the one you love",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "marry user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "marry user:@jonny_bro",
|
||||
"BOT_USER": "Bots are forever alone ;(",
|
||||
"ALREADY_MARRIED": "You are already married! You can divorce using the `divorce` command",
|
||||
"ALREADY_MARRIED_USER": "You're too late! {{user}} is already married",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Shows the amount of credits for a user",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "money\nmoney user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "money\nmoney user:@jonny_bro",
|
||||
"BOT_USER": "He has too much money, I can't output that number",
|
||||
"TITLE": "{{user}}'s Credits"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Sends credits to a user",
|
||||
"USAGE": "[@user] [amount]",
|
||||
"EXAMPLES": "pay user:@Jonny_Bro#4226 amount:1000",
|
||||
"EXAMPLES": "pay user:@jonny_bro amount:1000",
|
||||
"BOT_USER": "Bots don't need money B)",
|
||||
"YOURSELF": "You cannot transfer credits to yourself",
|
||||
"INVALID_AMOUNT": "Please specify an amount",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Shows user profile",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "profile\nprofile user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "profile\nprofile user:@jonny_bro",
|
||||
"BOT_USER": "Bots don't have a profile",
|
||||
"TITLE": "{{user}}'s Profile",
|
||||
"LINK": "Profile",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Gives reputation to a user",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "rep user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "rep user:@jonny_bro",
|
||||
"COOLDOWN": "You must wait **{{time}}** before using it again",
|
||||
"BOT_USER": "Bots are already cool B)",
|
||||
"YOURSELF": "You cannot give reputation to yourself",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Attempts to rob a user",
|
||||
"USAGE": "[@user] [amount]",
|
||||
"EXAMPLES": "rob user:@Jonny_Bro#4226 amount:100",
|
||||
"EXAMPLES": "rob user:@jonny_bro amount:100",
|
||||
"BOT_USER": "You cannot rob a bot",
|
||||
"YOURSELF": "You cannot rob yourself",
|
||||
"NOT_ENOUGH_AUTHOR": "You must have at least {{moneyMin}} to rob this user (you currently have {{moneyCurrent}})",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Love Calculator",
|
||||
"USAGE": "[@first_member] (@second_member)",
|
||||
"EXAMPLES": "lovecalc first_member:@Jonny_Bro#4226\nlovecalc first_member:@Jonny_Bro#4226 second_member:@JaBa#9042",
|
||||
"EXAMPLES": "lovecalc first_member:@jonny_bro\nlovecalc first_member:@jonny_bro second_member:@JaBa#9042",
|
||||
"CONTENT": "{{firstMember}} loves {{secondMember}} at **{{percent}}%**"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Play Tic Tac Toe",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "tictactoe user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "tictactoe user:@jonny_bro",
|
||||
"BOT_USER": "You cannot play against a bot!",
|
||||
"YOURSELF": "You cannot play against yourself!",
|
||||
"INVITE_USER": "<@{{opponent}}>, you have been invited to play Tic Tac Toe!",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Gets user's avatar",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "avatar\navatar user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "avatar\navatar user:@jonny_bro",
|
||||
"SERVER": "Server avatar?"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Sends a report to a designated channel",
|
||||
"USAGE": "[@user] (message)",
|
||||
"EXAMPLES": "report user:@Jonny_Bro#4226 message:Violation of rules",
|
||||
"EXAMPLES": "report user:@jonny_bro message:Violation of rules",
|
||||
"MISSING_CHANNEL": "The report channel is not set up",
|
||||
"INVALID_USER": "You cannot report yourself",
|
||||
"SUCCESS": "Your report has been sent to {{channel}}",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Shows user information",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "userinfo\nuserinfo user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "userinfo\nuserinfo user:@jonny_bro",
|
||||
"CUSTOM": "Custom Status",
|
||||
"NO_ACTIVITY": "Not playing",
|
||||
"NO_ROLE": "No role",
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"BOT_USER": "You cannot do this with the bot.",
|
||||
"CANT_DM": "I cannot DM you. Please check your privacy settings.",
|
||||
"FORCE_STOP": "The game has been forcibly ended, {{user}}, nobody won (the number was {{number}}).",
|
||||
"LEVEL_UP": "You have reached the next level! Your new level is: **{{level}}**",
|
||||
"GUILD_ONLY": "This command can only be used on a server.",
|
||||
|
|
8
languages/en-US/moderation/ban.json
Normal file
8
languages/en-US/moderation/ban.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"DESCRIPTION": "Bans a user",
|
||||
"USAGE": "[@user] [reason]",
|
||||
"EXAMPLES": "ban user:@jonny_bro reason:Violation of server rules",
|
||||
"YOURSELF": "You cannot ban yourself",
|
||||
"SUPERIOR": "You cannot ban this user (or I am unable to do so)",
|
||||
"SUCCESS": "{{user}} has been banned for **{{reason}}**"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Clears messages in a channel",
|
||||
"USAGE": "[option] (@user)",
|
||||
"EXAMPLES": "clear option:10\nclear option:10 user:@Jonny_Bro#4226\nclear option:all",
|
||||
"EXAMPLES": "clear option:10\nclear option:10 user:@jonny_bro\nclear option:all",
|
||||
"OPTION": "Integer / all",
|
||||
"REQUIRE_ID_USER": "Specify a user or ID",
|
||||
"ALL_CONFIRM": "**All messages in the channel will be deleted! Are you sure?**",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Removes all warnings from a user",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "clearwarns user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "clearwarns user:@jonny_bro",
|
||||
"SUCCESS": "Warnings of user {{user}} have been cleared"
|
||||
}
|
8
languages/en-US/moderation/kick.json
Normal file
8
languages/en-US/moderation/kick.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"DESCRIPTION": "Kicks a user",
|
||||
"USAGE": "[@user] [reason]",
|
||||
"EXAMPLES": "kick user:@jonny_bro reason:Come back tomorrow when I stop getting offended",
|
||||
"YOURSELF": "You cannot kick yourself",
|
||||
"SUPERIOR": "You cannot kick this user (or I am unable to do so)",
|
||||
"SUCCESS": "{{user}} has been kicked for **{{reason}}**"
|
||||
}
|
8
languages/en-US/moderation/untimeout.json
Normal file
8
languages/en-US/moderation/untimeout.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"DESCRIPTION": "Removes timeout from a user",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "untimeout user:@jonny_bro",
|
||||
"YOURSELF": "You cannot remove timeout from yourself",
|
||||
"NOT_TIMEDOUT": "This user is not currently timed out",
|
||||
"SUCCESS": "Timeout for {{user}} has been removed"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Shows a list of user's violations",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "warns user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "warns user:@jonny_bro",
|
||||
"SANCTIONS_OF": "Violations of {{member}}",
|
||||
"NO_SANCTIONS": "**{{member}}** has no violations"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Allows you to modify user's data",
|
||||
"USAGE": "[set/add] [type] [@user] [int]",
|
||||
"EXAMPLES": "debug set type:Level user:@Jonny_Bro#4226 int:100",
|
||||
"EXAMPLES": "debug set type:Level user:@jonny_bro int:100",
|
||||
"TYPE": "Type of data",
|
||||
"SET": "Set the value",
|
||||
"ADD": "Add to the value",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Изменить пользователю опыт, уровень, кредиты или банк",
|
||||
"USAGE": "[type] [@user] [int]",
|
||||
"EXAMPLES": "set type:Уровень user:@Jonny_Bro#4226 int:10",
|
||||
"EXAMPLES": "set type:Уровень user:@jonny_bro int:10",
|
||||
"INVALID_NUMBER": "Значение должно быть больше нуля"
|
||||
}
|
|
@ -60,6 +60,7 @@
|
|||
"STATUS_IDLE": "Неактивен",
|
||||
"STATUS_OFFLINE": "Не в сети",
|
||||
"STATUS_ONLINE": "В сети",
|
||||
"TICKET": "Тикет",
|
||||
"UNKNOWN": "Неизвестно",
|
||||
"USER": "Пользователь",
|
||||
"USERNAME": "Имя пользователя",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Показать список достижений пользователя",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "achievements\nachievements user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "achievements\nachievements user:@jonny_bro",
|
||||
"SEND_CMD": "Используйте свою первую команду",
|
||||
"CLAIM_SALARY": "Получите зарплату 10 раз",
|
||||
"MARRY": "Найдите вторую половинку",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Женитесь на том, кого любите",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "marry user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "marry user:@jonny_bro",
|
||||
"BOT_USER": "Боты вечно одиноки ;(",
|
||||
"ALREADY_MARRIED": "Вы уже состоите в браке! Вы можете развестить с помощью команды `divorce`",
|
||||
"ALREADY_MARRIED_USER": "Вы опоздали! {{user}} уже состоит в браке",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Показать количество кредитов у пользователя",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "money\nmoney user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "money\nmoney user:@jonny_bro",
|
||||
"BOT_USER": "У него слишком много денег, я не могу вывести это число",
|
||||
"TITLE": "Кредиты {{user}}"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Отправить кредиты пользователю",
|
||||
"USAGE": "[@user] [amount]",
|
||||
"EXAMPLES": "pay user:@Jonny_Bro#4226 amount:1000",
|
||||
"EXAMPLES": "pay user:@jonny_bro amount:1000",
|
||||
"BOT_USER": "Ботам не нужны деньги B)",
|
||||
"YOURSELF": "Вы не можете перевести кредиты самому себе",
|
||||
"INVALID_AMOUNT": "Укажите сумму",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Показать профиль пользователя",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "profile\nprofile user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "profile\nprofile user:@jonny_bro",
|
||||
"BOT_USER": "У ботов нет профиля",
|
||||
"TITLE": "Профиль {{user}}",
|
||||
"LINK": "Профиль",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Дать репутацию пользователю",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "rep user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "rep user:@jonny_bro",
|
||||
"COOLDOWN": "Вы должны подождать **{{time}}** до следующего использования",
|
||||
"BOT_USER": "Боты и так крутые B)",
|
||||
"YOURSELF": "Вы не можете дать очко репутации самому себе",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Попытаться ограбить пользователя",
|
||||
"USAGE": "[@user] [amount]",
|
||||
"EXAMPLES": "rob user:@Jonny_Bro#4226 amount:100",
|
||||
"EXAMPLES": "rob user:@jonny_bro amount:100",
|
||||
"BOT_USER": "Вы не можете ограбить бота",
|
||||
"YOURSELF": "Вы не можете ограбить себя",
|
||||
"NOT_ENOUGH_AUTHOR": "У вас должно быть хотя бы {{moneyMin}}, чтобы грабить данного пользователя (сейчас у вас {{moneyCurrent}})",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Калькулятор любви",
|
||||
"USAGE": "[@first_member] (@second_member)",
|
||||
"EXAMPLES": "lovecalc first_member:@Jonny_Bro#4226\nlovecalc first_member:@Jonny_Bro#4226 second_member:@JaBa#9042",
|
||||
"EXAMPLES": "lovecalc first_member:@jonny_bro\nlovecalc first_member:@jonny_bro second_member:@JaBa#9042",
|
||||
"CONTENT": "{{firstMember}} любит {{secondMember}} на **{{percent}}%**"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Крестики-нолики",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "tictactoe user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "tictactoe user:@jonny_bro",
|
||||
"BOT_USER": "Вы не можете играть против бота!",
|
||||
"YOURSELF": "Вы не можете играть с самим собой!",
|
||||
"INVITE_USER": "<@{{opponent}}>, вам предложили сыграть в крестики-нолики!",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Возвращает аватар пользователя",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "avatar\navatar user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "avatar\navatar user:@jonny_bro",
|
||||
"SERVER": "Аватар сервера?"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Отправить жалобу в специальный канал",
|
||||
"USAGE": "[@user] (message)",
|
||||
"EXAMPLES": "report user:@Jonny_Bro#4226 message:Нарушение правил",
|
||||
"EXAMPLES": "report user:@jonny_bro message:Нарушение правил",
|
||||
"MISSING_CHANNEL": "Канал для жалоб не настроен",
|
||||
"INVALID_USER": "Вы не можете пожаловаться на себя",
|
||||
"SUCCESS": "Ваша жалоба отправлена в {{channel}}",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Показать информацию о пользователе",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "userinfo\nuserinfo user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "userinfo\nuserinfo user:@jonny_bro",
|
||||
"CUSTOM": "Пользовательский статус",
|
||||
"NO_ACTIVITY": "Не играет",
|
||||
"NO_ROLE": "Нет роли",
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"BOT_USER": "Вы не можете сделать это с ботом",
|
||||
"CANT_DM": "Я не могу отправить Вам личное сообщение, проверьте настройки конфиденциальности",
|
||||
"FORCE_STOP": "Игра принудительно окончена {{user}}, никто не победил (загаданное число - {{number}})",
|
||||
"LEVEL_UP": "Вы достигли следующего уровня! Ваш новый уровень: **{{level}}**",
|
||||
"GUILD_ONLY": "Данную команду можно использовать только на сервере",
|
||||
|
|
8
languages/ru-RU/moderation/ban.json
Normal file
8
languages/ru-RU/moderation/ban.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"DESCRIPTION": "Забанить пользователя",
|
||||
"USAGE": "[@user] [reason]",
|
||||
"EXAMPLES": "ban user:@jonny_bro reason:Нарушение правил сервера",
|
||||
"YOURSELF": "Вы не можете забанить себя",
|
||||
"SUPERIOR": "Вы не можете забанить данного пользователя (или я не могу сделать этого)",
|
||||
"SUCCESS": "{{user}} был забанен по причине **{{reason}}**"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Очистка сообщений в канале",
|
||||
"USAGE": "[option] (@user)",
|
||||
"EXAMPLES": "clear option:10\nclear option:10 user:@Jonny_Bro#4226\nclear option:all",
|
||||
"EXAMPLES": "clear option:10\nclear option:10 user:@jonny_bro\nclear option:all",
|
||||
"OPTION": "Целое число / all",
|
||||
"REQUIRE_ID_USER": "Укажите пользователя или ID",
|
||||
"ALL_CONFIRM": "**Все сообщения в канале будут удалены! Вы уверены?**",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Снять все предупреждения с пользователя",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "clearwarns user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "clearwarns user:@jonny_bro",
|
||||
"SUCCESS": "Предупреждения пользователя {{user}} удалены"
|
||||
}
|
8
languages/ru-RU/moderation/kick.json
Normal file
8
languages/ru-RU/moderation/kick.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"DESCRIPTION": "Кикнуть пользователя",
|
||||
"USAGE": "[@user] [reason]",
|
||||
"EXAMPLES": "kick user:@jonny_bro reason:Зайдёшь завтра когда я перестану обижаться",
|
||||
"YOURSELF": "Вы не можете кикнуть себя",
|
||||
"SUPERIOR": "Вы не можете кикнуть данного пользователя (или я не могу сделать этого)",
|
||||
"SUCCESS": "{{user}} был кикнут по причине **{{reason}}**"
|
||||
}
|
8
languages/ru-RU/moderation/untimeout.json
Normal file
8
languages/ru-RU/moderation/untimeout.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"DESCRIPTION": "Снять таймаут с пользователя",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "untimeout user:@jonny_bro",
|
||||
"YOURSELF": "Вы не можете снять с себя таймаут",
|
||||
"NOT_TIMEDOUT": "Данный пользователь не находится в таймауте",
|
||||
"SUCCESS": "Таймаут с {{user}} снят"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Показать список нарушений пользователя",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "warns user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "warns user:@jonny_bro",
|
||||
"SANCTIONS_OF": "Нарушения {{member}}",
|
||||
"NO_SANCTIONS": "У **{{member}}** нет нарушений"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Позволяет изменять данные пользователя",
|
||||
"USAGE": "[set/add] [type] [@user] [int]",
|
||||
"EXAMPLES": "debug set type:Уровень user:@Jonny_Bro#4226 int:100",
|
||||
"EXAMPLES": "debug set type:Уровень user:@jonny_bro int:100",
|
||||
"TYPE": "Тип данных",
|
||||
"SET": "Установить значение",
|
||||
"ADD": "Добавить к значению",
|
||||
|
|
7
languages/ru-RU/tickets/adduser.json
Normal file
7
languages/ru-RU/tickets/adduser.json
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Добавить пользователя в тикет",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "adduser user:@jonny_bro",
|
||||
"NOT_TICKET": "Данный канал не является тикетом",
|
||||
"SUCCESS": "{{user}} добавлен в тикет"
|
||||
}
|
11
languages/ru-RU/tickets/closeticket.json
Normal file
11
languages/ru-RU/tickets/closeticket.json
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"DESCRIPTION": "Закрыть тикет",
|
||||
"USAGE": "",
|
||||
"EXAMPLES": "closeticket",
|
||||
"CLOSING_TITLE": "Закрытие тикета",
|
||||
"CLOSING_DESC": "Тикет закроется через 5 секунд",
|
||||
"CLOSING_BY": "Тикет закрыл",
|
||||
"CLOSING_CANCELED": "Закрытие тикета отменено",
|
||||
"CLOSED_TITLE": "Тикет закрыт",
|
||||
"TRANSCRIPT": "Копия сообщений из {{channel}}"
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Змінити користувачу досвід, рівень, кредити або банк",
|
||||
"USAGE": "[type] [@user] [int]",
|
||||
"EXAMPLES": "set type:Рівень user:@Jonny_Bro#4226 int:10",
|
||||
"EXAMPLES": "set type:Рівень user:@jonny_bro int:10",
|
||||
"INVALID_NUMBER": "Значення має бути більшим за нуль"
|
||||
}
|
|
@ -59,6 +59,7 @@
|
|||
"STATUS_IDLE": "Неактивний",
|
||||
"STATUS_OFFLINE": "Не в мережі",
|
||||
"STATUS_ONLINE": "У мережі",
|
||||
"TICKET": "Тікет",
|
||||
"UNKNOWN": "Невідомо",
|
||||
"USER": "Користувач",
|
||||
"USERNAME": "Ім'я користувача",
|
||||
|
|
|
@ -70,12 +70,12 @@
|
|||
},
|
||||
"sweetalert": {
|
||||
"errors": {
|
||||
"settingsSave": "Произошла ошибка при сохранении настроек."
|
||||
"settingsSave": "Сталася помилка при збереженні налаштувань."
|
||||
},
|
||||
"success": {
|
||||
"settingsSave": "Настройки успешно сохранены.",
|
||||
"login": "Вход успешно выполнен.",
|
||||
"logout": "Выход успешно выполнен."
|
||||
"settingsSave": "Налаштування успішно збережені.",
|
||||
"login": "Успішний вхід.",
|
||||
"logout": "Успішний вихід."
|
||||
}
|
||||
},
|
||||
"preloader": {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Показати список досягнень користувача",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "achievements\nachievements user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "achievements\nachievements user:@jonny_bro",
|
||||
"SEND_CMD": "Використовуйте свою першу команду",
|
||||
"CLAIM_SALARY": "Отримайте зарплату 10 разів",
|
||||
"MARRY": "Знайдіть другу половинку",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Одружуйтеся з тим, кого любите",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "marry user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "marry user:@jonny_bro",
|
||||
"BOT_USER": "Боти завжди самотні ;(",
|
||||
"ALREADY_MARRIED": "Ви вже одружені! Ви можете розвести за допомогою команди `divorce`",
|
||||
"ALREADY_MARRIED_USER": "Ви запізнилися! {{user}} вже одружений",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Показати кількість кредитів у користувача",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "money\nmoney user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "money\nmoney user:@jonny_bro",
|
||||
"BOT_USER": "У нього занадто багато грошей, я не можу написати це число",
|
||||
"TITLE": "{{user}} Кредити"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Надіслати кредити користувачу",
|
||||
"USAGE": "[@user] [amount]",
|
||||
"EXAMPLES": "pay user:@Jonny_Bro#4226 amount:1000",
|
||||
"EXAMPLES": "pay user:@jonny_bro amount:1000",
|
||||
"BOT_USER": "Ботам не потрібні гроші B)",
|
||||
"YOURSELF": "Ви не можете переказати кредити самому собі",
|
||||
"INVALID_AMOUNT": "Вкажіть суму",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Показати профіль користувача",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "profile\nprofile user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "profile\nprofile user:@jonny_bro",
|
||||
"BOT_USER": "Боти не мають профілю",
|
||||
"TITLE": "Профіль {{user}}",
|
||||
"LINK": "Профіль",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Дати репутацію користувачеві",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "rep user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "rep user:@jonny_bro",
|
||||
"COOLDOWN": "Ви повинні почекати **{{time}}** до наступного використання",
|
||||
"BOT_USER": "Боти і так круті B)",
|
||||
"YOURSELF": "Ви не можете дати поінт репутації самому собі",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Спробувати пограбувати користувача",
|
||||
"USAGE": "[@user] [amount]",
|
||||
"EXAMPLES": "rob user:@Jonny_Bro#4226 amount:100",
|
||||
"EXAMPLES": "rob user:@jonny_bro amount:100",
|
||||
"BOT_USER": "Ви не можете пограбувати бота",
|
||||
"YOURSELF": "Ви не можете пограбувати себе",
|
||||
"NOT_ENOUGH_AUTHOR": "У вас має бути хоча б {{moneyMin}}, щоб грабувати цього користувача (зараз у вас {{moneyCurrent}})",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Калькулятор кохання",
|
||||
"USAGE": "[@first_member] (@second_member)",
|
||||
"EXAMPLES": "lovecalc first_member:@Jonny_Bro#4226\nlovecalc first_member:@Jonny_Bro#4226 second_member:@JaBa#9042",
|
||||
"EXAMPLES": "lovecalc first_member:@jonny_bro\nlovecalc first_member:@jonny_bro second_member:@JaBa#9042",
|
||||
"CONTENT": "{{firstMember}} кохає {{secondMember}} на **{{percent}}%**"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Хрестики-нуліки",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "tictactoe user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "tictactoe user:@jonny_bro",
|
||||
"BOT_USER": "Ви не можете грати проти бота",
|
||||
"YOURSELF": "Ви не можете грати із самим собою",
|
||||
"INVITE_USER": "<@{{opponent}}>, вам запропонували зіграти в хрестики-нуліки",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Повертає аватар користувача",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "avatar\navatar user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "avatar\navatar user:@jonny_bro",
|
||||
"SERVER": "Аватар сервера?"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Надіслати скаргу до спеціального каналу",
|
||||
"USAGE": "[@user] (message)",
|
||||
"EXAMPLES": "report user:@Jonny_Bro#4226 message:Порушення правил",
|
||||
"EXAMPLES": "report user:@jonny_bro message:Порушення правил",
|
||||
"MISSING_CHANNEL": "Канал для скарг не налаштований",
|
||||
"INVALID_USER": "Ви не можете поскаржитися на себе",
|
||||
"SUCCESS": "Ваша скарга надіслана в {{channel}}",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Показати інформацію про користувача",
|
||||
"USAGE": "(@user)",
|
||||
"EXAMPLES": "userinfo\nuserinfo user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "userinfo\nuserinfo user:@jonny_bro",
|
||||
"CUSTOM": "Стан користувача",
|
||||
"NO_ACTIVITY": "Не грає",
|
||||
"NO_ROLE": "Немає ролі",
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"BOT_USER": "Ви не можете зробити це з ботом",
|
||||
"CANT_DM": "Я не можу надіслати Вам особисте повідомлення, перевірте налаштування конфіденційності.",
|
||||
"FORCE_STOP": "Гра примусово закінчена, {{user}}, ніхто не переміг (загадане число - {{number}}).",
|
||||
"LEVEL_UP": "Ви досягли наступного рівня! Ваш новий рівень: **{{level}}**",
|
||||
"GUILD_ONLY": "Цю команду можна використовувати лише на сервері",
|
||||
|
|
8
languages/uk-UA/moderation/ban.json
Normal file
8
languages/uk-UA/moderation/ban.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"DESCRIPTION": "Забанити користувача",
|
||||
"USAGE": "[@user] [reason]",
|
||||
"EXAMPLES": "ban user:@jonny_bro reason:Порушення правил сервера",
|
||||
"YOURSELF": "Ви не можете забанити себе",
|
||||
"SUPERIOR": "Ви не можете забанити даного користувача (або я не можу цього зробити)",
|
||||
"SUCCESS": "{{user}} був забанений з причини **{{reason}}**"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Очищення повідомлень у каналі",
|
||||
"USAGE": "[option] (@user)",
|
||||
"EXAMPLES": "clear option:10\nclear option:10 user:@Jonny_Bro#4226\nclear option:all",
|
||||
"EXAMPLES": "clear option:10\nclear option:10 user:@jonny_bro\nclear option:all",
|
||||
"OPTION": "Ціле число / all",
|
||||
"REQUIRE_ID_USER": "Вкажіть користувача або ID",
|
||||
"ALL_CONFIRM": "**Всі повідомлення в каналі будуть видалені! Ви впевнені?**",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"DESCRIPTION": "Зняти усі попередження з користувача",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "clearwarns user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "clearwarns user:@jonny_bro",
|
||||
"SUCCESS": "Попередження користувача {{user}} видалено"
|
||||
}
|
8
languages/uk-UA/moderation/kick.json
Normal file
8
languages/uk-UA/moderation/kick.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"DESCRIPTION": "Вигнати користувача",
|
||||
"USAGE": "[@user] [reason]",
|
||||
"EXAMPLES": "kick user:@jonny_bro reason:Зайдеш завтра коли я перестану ображатись",
|
||||
"YOURSELF": "Ви не можете вигнати себе",
|
||||
"SUPERIOR": "Ви не можете вигнати даного користувача (або я не можу цього зробити)",
|
||||
"SUCCESS": "{{user}} був вигнаний з причини **{{reason}}**"
|
||||
}
|
8
languages/uk-UA/moderation/untimeout.json
Normal file
8
languages/uk-UA/moderation/untimeout.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"DESCRIPTION": "Зняти таймаут з користувача",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "untimeout user:@jonny_bro",
|
||||
"YOURSELF": "Ви не можете зняти таймаут з себе",
|
||||
"NOT_TIMEDOUT": "Даний користувач не перебуває у таймауті",
|
||||
"SUCCESS": "Таймаут з {{user}} знятий"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Показати список порушень користувача",
|
||||
"USAGE": "[@user]",
|
||||
"EXAMPLES": "warns user:@Jonny_Bro#4226",
|
||||
"EXAMPLES": "warns user:@jonny_bro",
|
||||
"SANCTIONS_OF": "Порушення {{member}}",
|
||||
"NO_SANCTIONS": "**{{member}}** не має порушень"
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"DESCRIPTION": "Дозволяє змінювати дані користувача",
|
||||
"USAGE": "[set/add] [type] [@user] [int]",
|
||||
"EXAMPLES": "debug set type:Рівень user:@Jonny_Bro#4226 int:100",
|
||||
"EXAMPLES": "debug set type:Рівень user:@jonny_bro int:100",
|
||||
"TYPE": "Тип даних",
|
||||
"SET": "Встановити значення",
|
||||
"ADD": "Додати до значення",
|
||||
|
|
68
package.json
68
package.json
|
@ -51,71 +51,25 @@
|
|||
"ecmaVersion": 2020
|
||||
},
|
||||
"rules": {
|
||||
"arrow-spacing": [
|
||||
"warn",
|
||||
{
|
||||
"before": true,
|
||||
"after": true
|
||||
}
|
||||
],
|
||||
"comma-dangle": [
|
||||
"error",
|
||||
"always-multiline"
|
||||
],
|
||||
"arrow-spacing": ["warn", { "before": true, "after": true }],
|
||||
"comma-dangle": ["error", "always-multiline"],
|
||||
"comma-spacing": "error",
|
||||
"comma-style": "error",
|
||||
"dot-location": [
|
||||
"error",
|
||||
"property"
|
||||
],
|
||||
"dot-location": ["error", "property"],
|
||||
"handle-callback-err": "off",
|
||||
"indent": [
|
||||
"error",
|
||||
"tab",
|
||||
{
|
||||
"SwitchCase": 1
|
||||
}
|
||||
],
|
||||
"indent": ["error", "tab", { "SwitchCase": 1 }],
|
||||
"keyword-spacing": "error",
|
||||
"max-nested-callbacks": [
|
||||
"error",
|
||||
{
|
||||
"max": 4
|
||||
}
|
||||
],
|
||||
"max-statements-per-line": [
|
||||
"error",
|
||||
{
|
||||
"max": 2
|
||||
}
|
||||
],
|
||||
"max-nested-callbacks": ["error", { "max": 4 }],
|
||||
"max-statements-per-line": ["error", { "max": 2 }],
|
||||
"no-console": "off",
|
||||
"no-multi-spaces": "error",
|
||||
"no-multiple-empty-lines": [
|
||||
"error",
|
||||
{
|
||||
"max": 2,
|
||||
"maxEOF": 1,
|
||||
"maxBOF": 0
|
||||
}
|
||||
],
|
||||
"no-trailing-spaces": [
|
||||
"error"
|
||||
],
|
||||
"no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 0 }],
|
||||
"no-trailing-spaces": ["error"],
|
||||
"no-var": "error",
|
||||
"object-curly-spacing": [
|
||||
"error",
|
||||
"always"
|
||||
],
|
||||
"object-curly-spacing": ["error", "always"],
|
||||
"prefer-const": "error",
|
||||
"quotes": [
|
||||
"error",
|
||||
"double"
|
||||
],
|
||||
"semi": [
|
||||
"error",
|
||||
"always"
|
||||
],
|
||||
"quotes": ["error", "double"],
|
||||
"semi": ["error", "always"],
|
||||
"space-in-parens": "error",
|
||||
"space-infix-ops": "error",
|
||||
"space-unary-ops": "error",
|
||||
|
|
Loading…
Reference in a new issue