This commit is contained in:
Jonny_Bro (Nikita) 2023-10-31 22:24:40 +05:00
parent bf3e6065c3
commit efdab69651
30 changed files with 318 additions and 339 deletions

View file

@ -250,7 +250,6 @@ class JaBa extends Client {
} else {
userData = new this.usersData({ id: userID });
userData.markModified();
await userData.save();
this.databaseCache.users.set(userID, userData);
@ -275,7 +274,6 @@ class JaBa extends Client {
} else {
memberData = new this.membersData({ id: memberID, guildID: guildId });
memberData.markModified();
await memberData.save();
const guildData = await this.findOrCreateGuild(guildId);
@ -283,7 +281,6 @@ class JaBa extends Client {
if (guildData) {
guildData.members.push(memberData._id);
guildData.markModified("members");
await guildData.save();
}
@ -308,7 +305,6 @@ class JaBa extends Client {
} else {
guildData = new this.guildsData({ id: guildId });
guildData.markModified();
await guildData.save();
this.databaseCache.guilds.set(guildId, guildData);

View file

@ -39,7 +39,7 @@ class ImportMee6 extends BaseCommand {
data.memberData.level = level;
data.memberData.markModified();
data.memberData.markModified("level");
await data.memberData.save();
interaction.editReply({

View file

@ -26,43 +26,14 @@ class Memes extends BaseCommand {
*
* @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();
async onLoad(client) {
client.on("interactionCreate", async interaction => {
if (!interaction.isStringSelectMenu()) return;
const tags = ["funny", "memes", "dankmemes", "me_irl", "wholesomememes"].map(tag =>
JSON.parse(
JSON.stringify({
label: tag,
value: tag,
}),
),
);
if (interaction.customId === "memes_select") {
interaction.deferUpdate();
const row = new ActionRowBuilder().addComponents(new StringSelectMenuBuilder().setCustomId("memes_select").setPlaceholder(client.translate("common:NOTHING_SELECTED")).addOptions(tags));
const msg = await interaction.editReply({
content: interaction.translate("common:AVAILABLE_OPTIONS"),
fetchReply: true,
components: [row],
});
const filter = i => i.user.id === interaction.user.id;
const collector = msg.createMessageComponentCollector({ filter, idle: 2 * 60 * 1000 });
collector.on("collect", async i => {
if (i.isStringSelectMenu() && i.customId === "memes_select") {
i.deferUpdate();
const tag = i.values[0];
const tag = interaction.values[0];
const res = await fetch(`https://meme-api.com/gimme/${tag}`).then(response => response.json());
const embed = new EmbedBuilder()
@ -78,11 +49,30 @@ class Memes extends BaseCommand {
});
}
});
}
/**
*
* @param {import("../../base/JaBa")} client
* @param {import("discord.js").ChatInputCommandInteraction} interaction
* @param {Object} data
*/
async execute(client, interaction) {
await interaction.deferReply({ ephemeral: true });
collector.on("end", () => {
return interaction.editReply({
components: [],
});
const tags = ["funny", "memes", "dankmemes", "me_irl", "wholesomememes"].map(tag =>
JSON.parse(
JSON.stringify({
label: tag,
value: tag,
}),
),
);
const row = new ActionRowBuilder().addComponents(new StringSelectMenuBuilder().setCustomId("memes_select").setPlaceholder(client.translate("common:NOTHING_SELECTED")).addOptions(tags));
await interaction.editReply({
content: interaction.translate("common:AVAILABLE_OPTIONS"),
components: [row],
});
}
}

View file

@ -55,33 +55,28 @@ class Autorole extends BaseCommand {
* @param {Object} data
*/
async execute(client, interaction, data) {
const state = interaction.options.getBoolean("state");
if (state) {
const role = interaction.options.getRole("role");
if (!role) return interaction.error("administration/autorole:MISSING_ROLE");
const state = interaction.options.getBoolean("state"),
role = interaction.options.getRole("role");
data.guildData.plugins.autorole = {
enabled: true,
role: role.id,
enabled: state,
role,
};
if (state && role) {
data.guildData.markModified("plugins.autorole");
await data.guildData.save();
interaction.success("administration/autorole:SUCCESS_ENABLED", {
interaction.success("administration/autorole:ENABLED", {
role: role.toString(),
});
} else {
data.guildData.plugins.autorole = {
enabled: false,
role: null,
};
data.guildData.plugins.autorole.enabled = false;
data.guildData.markModified("plugins.autorole");
await data.guildData.save();
interaction.success("administration/autorole:SUCCESS_DISABLED");
interaction.success("administration/autorole:DISABLED");
}
}
}

View file

@ -88,7 +88,7 @@ class Set extends BaseCommand {
case "level": {
memberData.level = int;
memberData.markModified();
memberData.markModified("level");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -100,7 +100,7 @@ class Set extends BaseCommand {
case "xp": {
memberData.exp = int;
memberData.markModified();
memberData.markModified("exp");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -112,7 +112,7 @@ class Set extends BaseCommand {
case "credits": {
memberData.money = int;
memberData.markModified();
memberData.markModified("money");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -124,7 +124,7 @@ class Set extends BaseCommand {
case "bank": {
memberData.bankSold = int;
memberData.markModified();
memberData.markModified("bankSold");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {

View file

@ -69,7 +69,8 @@ class Bank extends BaseCommand {
data.memberData.money -= credits;
data.memberData.bankSold += credits;
data.memberData.markModified();
data.memberData.markModified("money");
data.memberData.markModified("bankSold");
await data.memberData.save();
const info = {
@ -103,7 +104,8 @@ class Bank extends BaseCommand {
data.memberData.money += credits;
data.memberData.bankSold -= credits;
data.memberData.markModified();
data.memberData.markModified("money");
data.memberData.markModified("bankSold");
await data.memberData.save();
interaction.success("economy/bank:SUCCESS_WD", {

View file

@ -90,7 +90,7 @@ class Birthdate extends BaseCommand {
data.userData.birthdate = d;
data.userData.markModified();
data.userData.markModified("birthdate");
await data.userData.save();
interaction.success("economy/birthdate:SUCCESS", {

View file

@ -40,13 +40,13 @@ class Divorce extends BaseCommand {
data.userData.lover = null;
data.userData.markModified();
data.userData.markModified("lover");
await data.userData.save();
const oldLover = await client.findOrCreateUser(user.id);
oldLover.lover = null;
oldLover.markModified();
oldLover.markModified("lover");
await oldLover.save();
interaction.success("economy/divorce:DIVORCED", {

View file

@ -128,8 +128,8 @@ class Marry extends BaseCommand {
data.userData.lover = member.id;
userData.lover = interaction.member.id;
data.userData.markModified();
userData.markModified();
data.userData.markModified("lover");
userData.markModified("lover");
await data.userData.save();
await userData.save();
@ -150,7 +150,7 @@ class Marry extends BaseCommand {
userData.achievements.married.achieved = true;
userData.achievements.married.progress.now = 1;
userData.markModified();
userData.markModified("achievements");
await userData.save();
}
@ -159,7 +159,7 @@ class Marry extends BaseCommand {
data.userData.achievements.married.achieved = true;
data.userData.achievements.married.progress.now = 1;
data.userData.markModified();
data.userData.markModified("achievements");
await data.userData.save();
}

View file

@ -73,12 +73,12 @@ class Pay extends BaseCommand {
data.memberData.money -= amount;
data.memberData.markModified();
data.memberData.markModified("money");
await data.memberData.save();
memberData.money += amount;
memberData.markModified();
memberData.markModified("money");
await memberData.save();
const info1 = {

View file

@ -62,7 +62,7 @@ class Rep extends BaseCommand {
data.userData.cooldowns.rep = toWait;
data.userData.markModified();
data.userData.markModified("cooldowns");
await data.userData.save();
const userData = await client.findOrCreateUser(user.id);
@ -85,7 +85,7 @@ class Rep extends BaseCommand {
}
}
userData.markModified();
userData.markModified("rep");
await userData.save();
interaction.success("economy/rep:SUCCESS", {

View file

@ -88,7 +88,7 @@ class Rob extends BaseCommand {
memberData.cooldowns.rob = toWait;
memberData.markModified();
memberData.markModified("cooldowns");
await memberData.save();
interaction.replyT("economy/rob:ROB_WON_" + randomNum, {
@ -99,8 +99,8 @@ class Rob extends BaseCommand {
data.memberData.money += amount;
memberData.money -= amount;
data.memberData.markModified();
memberData.markModified();
data.memberData.markModified("money");
memberData.markModified("money");
await data.memberData.save();
await memberData.save();
} else {
@ -116,8 +116,8 @@ class Rob extends BaseCommand {
data.memberData.money -= potentiallyLose;
memberData.money += won;
data.memberData.markModified();
memberData.markModified();
data.memberData.markModified("money");
memberData.markModified("money");
await data.memberData.save();
await memberData.save();
}

View file

@ -50,7 +50,7 @@ class Setbio extends BaseCommand {
data.userData.bio = newBio;
data.userData.markModified();
data.userData.markModified("bio");
await data.userData.save();
interaction.success("economy/setbio:SUCCESS");

View file

@ -143,11 +143,12 @@ class Slots extends BaseCommand {
});
}
data.userData.markModified();
data.userData.markModified("achievements");
await data.userData.save();
}
data.memberData.markModified();
data.memberData.markModified("money");
data.memberData.markModified("transactions");
await data.memberData.save();
return;
@ -193,11 +194,12 @@ class Slots extends BaseCommand {
});
}
data.userData.markModified();
data.userData.markModified("achievements");
await data.userData.save();
}
data.memberData.markModified();
data.memberData.markModified("money");
data.memberData.markModified("transactions");
await data.memberData.save();
return;
@ -224,11 +226,12 @@ class Slots extends BaseCommand {
if (!data.userData.achievements.slots.achieved) {
data.userData.achievements.slots.progress.now = 0;
data.userData.markModified();
data.userData.markModified("achievements");
await data.userData.save();
}
data.memberData.markModified();
data.memberData.markModified("money");
data.memberData.markModified("transactions");
await data.memberData.save();
return;

View file

@ -48,7 +48,8 @@ class Work extends BaseCommand {
data.memberData.cooldowns.work = toWait;
data.memberData.workStreak = (data.memberData.workStreak || 0) + 1;
data.memberData.markModified();
data.memberData.markModified("cooldowns");
data.memberData.markModified("workStreak");
await data.memberData.save();
const embed = new EmbedBuilder()
@ -99,7 +100,7 @@ class Work extends BaseCommand {
data.memberData.money += won;
data.memberData.markModified();
data.memberData.markModified("money");
await data.memberData.save();
const info = {
@ -126,7 +127,7 @@ class Work extends BaseCommand {
data.userData.achievements.work.achieved = true;
}
data.userData.markModified();
data.userData.markModified("achievements");
await data.userData.save();
}

View file

@ -67,7 +67,8 @@ class TicTacToe extends BaseCommand {
memberData.transactions.push(info);
memberData.markModified();
memberData.markModified("money");
memberData.markModified("transactions");
await memberData.save();
});
}

View file

@ -51,7 +51,7 @@ class Afk extends BaseCommand {
data.userData.afk = reason;
data.userData.markModified();
data.userData.markModified("afk");
await data.userData.save();
interaction.success("general/afk:SUCCESS", {

View file

@ -25,23 +25,14 @@ class Boosters extends BaseCommand {
*
* @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();
async onLoad(client) {
client.on("interactionCreate", async interaction => {
if (!interaction.isButton()) return;
let currentPage = 0;
const boosters = (await interaction.guild.members.fetch()).filter(m => m.premiumSince);
if (boosters.size === 0) return interaction.error("general/boosters:NO_BOOSTERS", null, { edit: true });
const embeds = generateBoostersEmbeds(client, interaction, boosters, data.guildData);
if (interaction.customId.includes("boosters_")) {
const guildData = client.findOrCreateGuild(interaction.guildId),
boosters = (await interaction.guild.members.fetch()).filter(m => m.premiumSince),
embeds = generateBoostersEmbeds(client, interaction, boosters, guildData);
const row = new ActionRowBuilder().addComponents(
new ButtonBuilder().setCustomId("boosters_prev_page").setStyle(ButtonStyle.Primary).setEmoji("⬅️"),
@ -50,19 +41,10 @@ class Boosters extends BaseCommand {
new ButtonBuilder().setCustomId("boosters_stop").setStyle(ButtonStyle.Danger).setEmoji("⏹️"),
);
await interaction.editReply({
content: `${interaction.translate("common:PAGE")}: **${currentPage + 1}**/**${embeds.length}**`,
embeds: [embeds[currentPage]],
components: [row],
});
let currentPage = 0;
const filter = i => i.user.id === interaction.user.id;
const collector = interaction.guild === null ? (await interaction.user.createDM()).createMessageComponentCollector({ filter, idle: 20 * 1000 }) : interaction.channel.createMessageComponentCollector({ filter, idle: 20 * 1000 });
collector.on("collect", async i => {
if (i.isButton()) {
if (i.customId === "boosters_prev_page") {
i.deferUpdate();
if (interaction.customId === "boosters_prev_page") {
await interaction.deferUpdate();
if (currentPage !== 0) {
--currentPage;
@ -72,8 +54,8 @@ class Boosters extends BaseCommand {
components: [row],
});
}
} else if (i.customId === "boosters_next_page") {
i.deferUpdate();
} else if (interaction.customId === "boosters_next_page") {
await interaction.deferUpdate();
if (currentPage < embeds.length - 1) {
currentPage++;
@ -83,8 +65,8 @@ class Boosters extends BaseCommand {
components: [row],
});
}
} else if (i.customId === "boosters_jump_page") {
i.deferUpdate();
} else if (interaction.customId === "boosters_jump_page") {
await interaction.deferUpdate();
const msg = await interaction.followUp({
content: interaction.translate("misc:JUMP_TO_PAGE", {
@ -114,14 +96,9 @@ class Boosters extends BaseCommand {
return;
}
});
} else if (i.customId === "boosters_stop") {
i.deferUpdate();
collector.stop();
}
}
});
} else if (interaction.customId === "boosters_stop") {
await interaction.deferUpdate();
collector.on("end", () => {
row.components.forEach(component => {
component.setDisabled(true);
});
@ -129,6 +106,35 @@ class Boosters extends BaseCommand {
return interaction.editReply({
components: [row],
});
}
}
});
}
/**
*
* @param {import("../../base/JaBa")} client
* @param {import("discord.js").ChatInputCommandInteraction} interaction
* @param {Object} data
*/
async execute(client, interaction, data) {
await interaction.deferReply();
const boosters = (await interaction.guild.members.fetch()).filter(m => m.premiumSince);
if (boosters.size === 0) return interaction.error("general/boosters:NO_BOOSTERS", null, { edit: true });
const embeds = generateBoostersEmbeds(client, interaction, boosters, data.guildData);
const row = new ActionRowBuilder().addComponents(
new ButtonBuilder().setCustomId("boosters_prev_page").setStyle(ButtonStyle.Primary).setEmoji("⬅️"),
new ButtonBuilder().setCustomId("boosters_next_page").setStyle(ButtonStyle.Primary).setEmoji("➡️"),
new ButtonBuilder().setCustomId("boosters_jump_page").setStyle(ButtonStyle.Secondary).setEmoji("↗️"),
new ButtonBuilder().setCustomId("boosters_stop").setStyle(ButtonStyle.Danger).setEmoji("⏹️"),
);
await interaction.editReply({
content: `${interaction.translate("common:PAGE")}: **1**/**${embeds.length}**`,
embeds: [embeds[0]],
components: [row],
});
}
}

View file

@ -35,8 +35,43 @@ class Help extends BaseCommand {
*
* @param {import("../../base/JaBa")} client
*/
async onLoad() {
//...
async onLoad(client) {
client.on("interactionCreate", async interaction => {
if (!interaction.isStringSelectMenu()) return;
if (interaction.customId === "help_category_select") {
await interaction.deferUpdate();
const arg = interaction?.values[0];
const categoryCommands = [...new Map(client.commands.map(v => [v.constructor.name, v])).values()]
.filter(cmd => cmd.category === arg)
.map(c => {
return {
name: `**${c.command.name}**`,
value: interaction.translate(`${arg.toLowerCase()}/${c.command.name}:DESCRIPTION`),
};
});
const embed = new EmbedBuilder()
.setColor(client.config.embed.color)
.setFooter(client.config.embed.footer)
.setAuthor({
name: interaction.translate("general/help:COMMANDS_IN", { category: arg }),
})
.addFields(categoryCommands)
.addFields([
{
name: "\u200B",
value: interaction.translate("general/help:INFO"),
},
]);
return interaction.editReply({
content: null,
embeds: [embed],
});
}
});
}
/**
*
@ -75,55 +110,11 @@ class Help extends BaseCommand {
const row = new ActionRowBuilder().addComponents(new StringSelectMenuBuilder().setCustomId("help_category_select").setPlaceholder(client.translate("common:NOTHING_SELECTED")).addOptions(categoriesRows));
const msg = await interaction.editReply({
await interaction.editReply({
content: interaction.translate("common:AVAILABLE_OPTIONS"),
fetchReply: true,
components: [row],
});
const filter = i => i.user.id === interaction.user.id;
const collector = msg.createMessageComponentCollector({ filter, idle: 15 * 1000 });
collector.on("collect", async i => {
if (i.isStringSelectMenu() && i.customId === "help_category_select") {
i.deferUpdate();
const arg = i?.values[0];
const categoryCommands = commands
.filter(cmd => cmd.category === arg)
.map(c => {
return {
name: `**${c.command.name}**`,
value: interaction.translate(`${arg.toLowerCase()}/${c.command.name}:DESCRIPTION`),
};
});
const embed = new EmbedBuilder()
.setColor(client.config.embed.color)
.setFooter(client.config.embed.footer)
.setAuthor({
name: interaction.translate("general/help:COMMANDS_IN", { category: arg }),
})
.addFields(categoryCommands)
.addFields([
{
name: "\u200B",
value: interaction.translate("general/help:INFO"),
},
]);
return interaction.editReply({
content: null,
embeds: [embed],
});
}
});
collector.on("end", () => {
return interaction.editReply({
components: [],
});
});
}
/**

View file

@ -26,8 +26,29 @@ class NSFW extends BaseCommand {
*
* @param {import("../../base/JaBa")} client
*/
async onLoad() {
//...
async onLoad(client) {
client.on("interactionCreate", async interaction => {
if (!interaction.isStringSelectMenu()) return;
if (interaction.customId === "nsfw_select") {
await interaction.deferUpdate();
const tag = interaction?.values[0];
const res = await fetch(`https://meme-api.com/gimme/${tag}`).then(response => response.json());
const embed = new EmbedBuilder()
.setColor(client.config.embed.color)
.setFooter(client.config.embed.footer)
.setTitle(res.title)
.setDescription(`${interaction.translate("fun/memes:SUBREDDIT")}: **${res.subreddit}**\n${interaction.translate("common:AUTHOR")}: **${res.author}**\n${interaction.translate("fun/memes:UPS")}: **${res.ups}**`)
.setImage(res.url)
.setTimestamp();
await interaction.editReply({
embeds: [embed],
});
}
});
}
/**
*
@ -51,42 +72,12 @@ class NSFW extends BaseCommand {
const row = new ActionRowBuilder().addComponents(new StringSelectMenuBuilder().setCustomId("nsfw_select").setPlaceholder(client.translate("common:NOTHING_SELECTED")).addOptions(tags));
const msg = await interaction.editReply({
await interaction.editReply({
content: interaction.translate("common:AVAILABLE_OPTIONS"),
ephemeral: true,
fetchReply: true,
components: [row],
});
const filter = i => i.user.id === interaction.user.id;
const collector = msg.createMessageComponentCollector({ filter, idle: 2 * 60 * 1000 });
collector.on("collect", async i => {
if (i.isStringSelectMenu() && i.customId === "nsfw_select") {
i.deferUpdate();
const tag = i?.values[0];
const res = await fetch(`https://meme-api.com/gimme/${tag}`).then(response => response.json());
const embed = new EmbedBuilder()
.setColor(client.config.embed.color)
.setFooter(client.config.embed.footer)
.setTitle(res.title)
.setDescription(`${interaction.translate("fun/memes:SUBREDDIT")}: **${res.subreddit}**\n${interaction.translate("common:AUTHOR")}: **${res.author}**\n${interaction.translate("fun/memes:UPS")}: **${res.ups}**`)
.setImage(res.url)
.setTimestamp();
await interaction.editReply({
embeds: [embed],
});
}
});
collector.on("end", () => {
return interaction.editReply({
components: [],
});
});
}
}

View file

@ -146,7 +146,7 @@ class Debug extends BaseCommand {
case "level": {
memberData.level = int;
memberData.markModified();
memberData.markModified("level");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -158,7 +158,7 @@ class Debug extends BaseCommand {
case "xp": {
memberData.exp = int;
memberData.markModified();
memberData.markModified("exp");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -170,7 +170,7 @@ class Debug extends BaseCommand {
case "credits": {
memberData.money = int;
memberData.markModified();
memberData.markModified("money");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -182,7 +182,7 @@ class Debug extends BaseCommand {
case "bank": {
memberData.bankSold = int;
memberData.markModified();
memberData.markModified("bankSold");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -194,7 +194,7 @@ class Debug extends BaseCommand {
case "rep": {
userData.rep = int;
userData.markModified();
userData.markModified("rep");
await userData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -220,7 +220,7 @@ class Debug extends BaseCommand {
case "level": {
memberData.level += int;
memberData.markModified();
memberData.markModified("level");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -232,7 +232,7 @@ class Debug extends BaseCommand {
case "xp": {
memberData.exp += int;
memberData.markModified();
memberData.markModified("exp");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -244,7 +244,7 @@ class Debug extends BaseCommand {
case "credits": {
memberData.money += int;
memberData.markModified();
memberData.markModified("money");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -256,7 +256,7 @@ class Debug extends BaseCommand {
case "bank": {
memberData.bankSold += int;
memberData.markModified();
memberData.markModified("bankSold");
await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -268,7 +268,7 @@ class Debug extends BaseCommand {
case "rep": {
userData.rep += int;
userData.markModified();
userData.markModified("rep");
await userData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {

@ -1 +1 @@
Subproject commit d91b9c59c2038038a4f28dc75d9d792261b89460
Subproject commit 58c2082074c0955cfafd9ebddb9ad694621df0a1

View file

@ -1,13 +1,20 @@
# Обновления JaBa
## JaBa v4.3.5
## v4.3.6
Скоро перепишу музыкальные команды, будет интересно, честно =)
* Изменено
* Переписал команды которые используют кнопки и списки, многие из них теперь будут отвечать даже после перезагрузки бота.
## v4.3.5
* Добавлено
* Логи удаления сообщений!\
Настройку можно найти в *config set* и в панели управления.
* Начало проигрывания видео с указанного в ссылке времени.
### JaBa v4.3.3
### v4.3.3
* Добавлено
* Система Тикетов!\
@ -20,7 +27,7 @@
* Изменено
* Внешний вид *8ball*.
### JaBa v4.3.1
### v4.3.1
* Добавлено
* Мониторинг изменения сообщений!\
@ -29,13 +36,13 @@
* Исправления
* Серьёзная ошибка, из-за которой данные не сохранялись в базу данных 🤯.
### JaBa v4.3.0
### v4.3.0
* Добавлено
* Полностью переделанная панель управления!\
Она ещё не закончена, так что ждите продолжения.
### JaBa v4.2.6
### v4.2.6
* Добавлено
* Эксклюзив для SunCountry RP: *sendmessage* - отправить (анонимное) сообщение в выбранный канал.
@ -44,7 +51,7 @@
* Отключено уведомление об ачивках, включу когда переделаю.\
Хочу отправлять их в ЛС.
### JaBa v4.2.5
### v4.2.5
* Изменено
* Изменения в локализации, основным языком теперь является английский.\
@ -55,22 +62,22 @@
* Удалено
* Антиспам - Дискорд и сам справляется.
### JaBa v4.2.4
### v4.2.4
* Добавлено
* Бот цитирует сообщение если отправлена ссылка на него.
### JaBa v4.2.3
### v4.2.3
* Удалено
* Команда *chat* - Я передумал, а вы даже и не заметили =)
### JaBa v4.2.2
### v4.2.2
* Добавлено
* Команда *chat* - Спросить у ChatGPT!
### JaBa v4.2.1
### v4.2.1
* Добавлено
* Команда *volume* - установить громкость бота.
@ -79,7 +86,7 @@
* Удаление спама если включён Автомод.
* Подсказки по командам на языке вашего клиента.
### JaBa v4.2.0
### v4.2.0
Я решил отказаться от своего модуля музыки в пользу основного, т.к. он был переписан авторами и теперь работает намного лучше.
@ -98,7 +105,7 @@
* Добавлено
* Новые баги.
### JaBa v4.1.20
### v4.1.20
* Добавлено
* Команда *boosters* - Список бустеров с сортировкой по дате буста.
@ -106,7 +113,7 @@
* Удалено
* Команда *activity* - Её функционал официально добавлен в Discord.
### JaBa v4.1.19
### v4.1.19
* Изменения
* Мелкие внутренние изменения.
@ -114,14 +121,14 @@
* Исправления
* Ошибки *warn*.
### JaBa v4.1.18
### v4.1.18
* Изменения
* Обновление зависимостей.
* Убран счётчик "случаев" в *warn*.
* Обновление устаревших функций.
### JaBa v4.1.17
### v4.1.17
* Добавлено
* Команды *cat* и *dog*.
@ -132,12 +139,12 @@
* Исправления
* Ошибка команды *warn* если имя пользователя содержит нестандартные символы.
### JaBa v4.1.16
### v4.1.16
* Добавлено
* Наконец-то возвращена и починена команда *seek*.
### JaBa v4.1.15
### v4.1.15
* Изменения
* Переписана команда *config*.
@ -147,7 +154,7 @@
* Удалено
* Команды *setbirthdays*, *setmodlogs*, *setnews*, *setreports*, *setsuggests*.
### JaBa v4.1.14
### v4.1.14
* Добавлено
* Команда *selectroles* - Возможность выбора необязательных ролей пользователями.
@ -160,18 +167,18 @@
* Исправления
* Синтаксические ошибки в локализации.
### JaBa v4.1.13
### v4.1.13
* Изменения
* Переписана команда *clips*.
### JaBa v4.1.12
### v4.1.12
* Исправления
* Фикс поиска по ссылкам.
* Фикс воспроизведения с SoundCloud.
### JaBa v4.1.11
### v4.1.11
* Изменения
* Команды которые нельзя использовать в ЛС с ботом не будут там отображаться.
@ -179,7 +186,7 @@
* Исправления
* Переписаны команды *nsfw* и *memes* для работы в ЛС с ботом.
### JaBa v4.1.10
### v4.1.10
* Добавлено
* Команда *shuffle* - Перемешать очередь.
@ -187,7 +194,7 @@
* Изменения
* Многие команды теперь можно использовать в ЛС с ботом. Узнать где именно можно использовать команду через *help*.
### JaBa v4.1.9
### v4.1.9
* Изменения
* Переписана система опыта. Теперь при достижении нового уровня опыт сбрасывается и бот оповещает о получении нового уровня.
@ -195,7 +202,7 @@
* Исправления
* Команды *set* и *debug* ничего не делали.
### JaBa v4.1.8
### v4.1.8
* Добавлено
* Возможность сразу сократить ссылку в команде *lmgtfy*.
@ -207,12 +214,12 @@
* Исправления
* Фикс ошибки *shorturl* с некоторыми ссылками.
### JaBa v4.1.7
### v4.1.7
* Изменения
* Переписана команда *leaderboard*.
### JaBa v4.1.6
### v4.1.6
* Изменения
* Изменён способ указания типа повтора в *loop*. Теперь вы указываете тип аргументом (подсказки имеются), а не из выпадающего списка в отдельном сообщении. Это одновременно удобно, быстро и меньше кода =)
@ -220,17 +227,17 @@
* Исправления
* Фиксы в *tictactoe*.
### JaBa v4.1.5
### v4.1.5
* Изменения
* Более подробные сообщения в *remindme*.
### JaBa v4.1.4
### v4.1.4
* Исправления
* Ошибки в clips, loop, nowplaying и play.
### JaBa v4.1.3
### v4.1.3
* Добавлено
* Возможность принудительной очистки транзакций с помощью *transactions clear:True*
@ -239,7 +246,7 @@
* Сделал перепись населения буквам в коде, теперь их меньше.
* Переделал обработку ошибок в *play*, теперь она говорит ошибку, а не считает её неизвестной.
### JaBa v4.1.2
### v4.1.2
* Добавлено
* Выбор при поиске текстом через команду *play*.
@ -251,12 +258,12 @@
* Исправлена ошибка команды *queue* если очередь пуста.
* Починено автовоспроизведение.
### JaBa v4.1.1
### v4.1.1
* Добавлено
* Страницы в *queue*.
### JaBa v4.1
### v4.1
* Изменения
* Способ ввода даты рождения в *birthdate*.
@ -266,7 +273,7 @@
* Исправлена команда *skip*.
* Исправлена команда *marry*.
### JaBa v4.0
### v4.0
* Добавлено
* Перенесены все категории.
@ -280,7 +287,7 @@
* Поправлены все фразы в стандартной локализации.
* Правка локализации в панели управления.
### JaBa v4.0pre5
### v4.0pre5
* Добавлено
* Перенесена категория *Administration*.
@ -290,7 +297,7 @@
* Панель управления снова работает.
* Множество мелких правок.
### JaBa v4.0pre4
### v4.0pre4
* Добавлено
* Перенесена категория *Moderation*.
@ -301,7 +308,7 @@
* Удалено
* Команда *seek*.
### JaBa v4.0pre3
### v4.0pre3
Пожалуйста, сообщайте мне обо всех найденых ошибках!
Данная версия является pre версией, некоторые команды сейчас недоступны, остальные команды будут доступны в следующих обновлениях. Следите за обновлениями =)
@ -329,12 +336,12 @@
* Категория *Images*
* Команды: *ban*, *kick*, *mute*, *unmute*, *announcement*, *autoplay*, *clip*, *createplaylist*, *playplaylist*, *removeplaylist*, *playlists*, *filter*, *filters*, *lyrics*, *pause*, *resume*, *invite*, *invites*, *permissions*, *quote*, *translate*, *choice*, *ascii*, *flip*, *findwords*, *addcommand*, *backup*, *ignore*, *setprefix*, *slowmode*.
### JaBa v3.4.7
### v3.4.7
* Исправления
* Команда *ping* выдавала неправильный пинг.
### JaBa v3.4.6
### v3.4.6
* Изменений
* Команда *invitations* переименована в *invites*.
@ -342,7 +349,7 @@
* Удалено
* Команды *github*, *hastebin*, *someone*.
### JaBa v3.4.5
### v3.4.5
* Добавлено
* Команда *memes* - Получить мем с выбранного или случайного сабреддита.
@ -353,12 +360,12 @@
* Удалено
* Команда *joke*.
### JaBa v3.4.4a
### v3.4.4a
* Исправления
* Фикс *clear all*.
### JaBa v3.4.4
### v3.4.4
* Добавлено
* Создание, удаление и воспроизведение плейлистов!
@ -371,7 +378,7 @@
* Транзакции в *transactions* удаляются через месяц.
* Мелкие правки в локализации, исправление орфографических ошибок.
### JaBa v3.4.3
### v3.4.3
* Изменения
* Украинская локализация закончена.
@ -379,12 +386,12 @@
* Исправления
* Не везде применялась локализация сервера.
### JaBa v3.4.2
### v3.4.2
* Добавлено
* Команда *whois* - Получить информацию об IP адресе.
### JaBa v3.4.1
### v3.4.1
* Добавлено
* Информация о необходимых уровнях буста для активностей.
@ -395,18 +402,18 @@
* Исправления
* Генератор случайных чисел всё это время работал неправильно, теперь всё гуд.
### JaBa v3.4.0
### v3.4.0
* Добавлено
* Новые игры в *activity* - **Ocho** и **Sketchheads**.
### JaBa v3.3.9
### v3.3.9
* Добавлено
* Команда *emoji* - Получить информацию об эмодзи.
* В команде *loop* теперь можно использовать аргументы *single/song* для повтора одного трека или *queue/all* для повтора всей очереди.
### JaBa v3.3.8
### v3.3.8
* Исправления
* Команда *clip* теперь работает нормально.
@ -414,33 +421,33 @@
* Изменения
* Сайт перенесён обратно на *<https://jaba.pp.ua>*.
### JaBa v3.3.7
### v3.3.7
* Добавлено
* Локализация необходимых прав в ошибке.
### JaBa v3.3.6
### v3.3.6
* Изменения
* Панель управления теперь доступна по ссылке *<https://dashboard.jaba.pp.ua>*.
* Вы теперь можете пригласить JaBa на свой сервер по ссылке из команды *invite*, *stats* или по [ссылке](https://discord.com/api/oauth2/authorize?client_id=708637495054565426&scope=bot&permissions=8)
### JaBa v3.3.5
### v3.3.5
* Исправления
* Команда *tictactoe* снова работает.
### JaBa v3.3.4
### v3.3.4
* Добавлено
* Команда *stealemoji (steale)* - Украсть эмодзи с другого сервера (для администрации с подпиской Nitro).
### JaBa v3.3.3
### v3.3.3
* Добавлено
* Команда *steamcard* в категорию *Images*.
### JaBa v3.3.2
### v3.3.2
* Добавлено
* Команды *crush*, *magik* и *ps4* в категорию *Images*.
@ -448,19 +455,19 @@
* Удалено
* Команда *tweet*.
### JaBa v3.3.1
### v3.3.1
* Изменения
* Команды *findwords*, *horserace*, *number* и *tictactoe* перемещены в категорию *Economy*.
* Новые коэффициенты для *horserace*.
### JaBa v3.3.0
### v3.3.0
* Добавлено
* Команда *horserace* - конные скачки со ставками.
* Ещё одно место куда вы можете потратить свою зарплату =) (или заработать неплохие деньги).
### JaBa v3.2.9
### v3.2.9
* Исправления
* Команда *backup* теперь работает нормально.
@ -468,7 +475,7 @@
* Удалено
* Команда *fml*.
### JaBa v3.2.8
### v3.2.8
* Добавлено
* Статистика сервера на сайте ([пример](https://jaba.pp.ua/stats/651412418202959872)).
@ -479,7 +486,7 @@
* Таблицы лидеров теперь показываются в эмбедах.
* Отключены команда *someone* и тэг *@someone*.
### JaBa v3.2.7
### v3.2.7
* Добавлено
* Некоторая информация о вашем профиле на сайте, на страницах серверов и в настройках. (Скоро там будет больше всякой информации).
@ -488,7 +495,7 @@
* Изменения
* Внешний вид [документации](/docs).
### JaBa v3.2.6
### v3.2.6
* Исправления
* Команда *goodbye* снова работает.
@ -497,29 +504,29 @@
* Команда *setafk* и ответ бота автоматически удаляются через 10 секунд.
* Новые карточки при входе и выходе пользователей (я не дизайнер, не бейте :( ).
### JaBa v3.2.5
### v3.2.5
* Изменения
* Переписана команда *loop*.
* Теперь нужен аргумент **song** или **queue** для включения соответствующего режима повтора.
* Если не указать агрумент, то повтор отключится.
### JaBa v3.2.4
### v3.2.4
* Добавлено
* Теперь при разводе (*divorce*) пользователь получает сообщение о разводе в ЛС.
### JaBa v3.2.3
### v3.2.3
* Исправления
* *clip* снова работает.
### JaBa v3.2.2 Hotfix
### v3.2.2 Hotfix
* Исправления
* В *profile* и *money* снова показываются кредиты со всех серверов.
### JaBa v3.2.2
### v3.2.2
>
> Спасибо Добрый Спецназ#8801 за идеи.
@ -531,7 +538,7 @@
* Исправления
* Кредиты на всех серверах в *profile* и *money* заменены на кредиты на текущем сервере (я не смог совладать с ошибкой из-за discord.js 13, возможно верну позже).
### JaBa v3.2.1
### v3.2.1
* Исправления
* Отображение статуса в *userinfo*.
@ -539,7 +546,7 @@
* Появилась возможность сделать раздачу **дропом**.
* Дроп - как только количество участников будет равно указанному вами количеству победителей раздача сразу же заканчивается. Победителями будут все, кто успел поставить реакцию.
### JaBa v3.2
### v3.2
>
> Огромная благодарность Добрый Спецназ#8801 за поддержку и помощь!
> Обновление очень большое, обязательно сообщайте мне обо всех ошибках!
@ -554,7 +561,7 @@
* *checkinvites* удалена, т.к. не имела смысла.
* *fortniteshop* и *fortnite* удалены, т.к. ими никто не пользовался. Все связанные с ними настройки так же удалены.
### JaBa v3.1.6
### v3.1.6
>
> Спасибо Добрый Спецназ#8801 за помощь в поиске багов
@ -563,12 +570,12 @@
* Некорректная работа *seek*.
* Некорректное описание *unban*.
### JaBa v3.1.5
### v3.1.5
* Изменения
* Откат изменений из v3.1.4.
### JaBa v3.1.4
### v3.1.4
* Добавлено
* Возможность удалить резервную копию сервера *backup remove [ID]*.
@ -577,14 +584,14 @@
* Переход на discord.js v13.
* Команда *queue* временно отключена.
### JaBa v3.1.3
### v3.1.3
* Изменения
* Команды *number* и *findwords* теперь корректно отображают выигрыш.
* Расширен диапазон случайных чисел в *number*.
* Исправлены ошибки.
### JaBa v3.1.2
### v3.1.2
* Добавлено
* Награда за победу в крестиках-ноликах в **100** кредитов.
@ -592,7 +599,7 @@
* Изменения
* Исправлены ошибки.
### JaBa v3.1.1
### v3.1.1
>
> Спасибо Добрый Спецназ#8801 за идею.
@ -603,27 +610,27 @@
* Изменения
* Откаты команд уменьшены ещё больше.
### JaBa v3.1
### v3.1
* Изменения
* Исправлены орфографические ошибки в русской локализации.
* Отключёна английская локализация.
* Исправлены ошибки.
### JaBa v3.0.9
### v3.0.9
* Добавлено
* Возвращены поздравления с днём рождения.
* Команда *setbirthdays* - установить канал для поздравлений. Так же его можно изменить из панели управления.
### JaBa v3.0.8
### v3.0.8
* Изменения
* *8ball* теперь имеет **20** возможных ответов.
* Награды за победу в *findwords* и *number* повышены до **150** и **100** соответственно.
* Больше фиксов :3
### JaBa v3.0.7
### v3.0.7
* Изменения
* Исправлены ошибки в командах из раздела *Music*.
@ -631,7 +638,7 @@
* Множество других мелких исправлений.
* Бот теперь будет меньше спамить :)
### JaBa v3.0.6
### v3.0.6
* Добавлено
* Команда *jump* - позволяет перейти на заданный трек из очереди.
@ -639,7 +646,7 @@
* Изменения
* Система музыки переписана (да, снова). Теперь можно воспроизвести звук практически с любых источников, в том числе видео и MP3 из Discord, Vimeo, прямые ссылки на радио. Список всех возможных источников можно найти [тут](https://ytdl-org.github.io/youtube-dl/supportedsites.html). Надеюсь теперь будет меньше ошибок...
### JaBa v3.0.5
### v3.0.5
* Добавлено
* Команда *set* для изменения уровня, опыта, кредитов или банка пользователя (доступна только администраторам).
@ -649,24 +656,24 @@
* Изменения
* В команде *profile* теперь видно необходимое кол-во опыта для следующего уровня.
### JaBa v3.0.4
### v3.0.4
* Изменения
* Команды и обновления перенесены [сюда](/docs). Теперь там всё более-менее нормально выглядит.
### JaBa v3.0.3
### v3.0.3
* Изменения
* Категория *Games* заменена командой *activity* (Спасибо Slizen#3791 за идею).
* Английский язык обновлён до последней версии бота (Спасибо FaxoNfuckyou#9398 за помощь).
* Уменьшен откат на многих командах.
### JaBa v3.0.2
### v3.0.2
* Изменения
* Не требуется авторизация для просмотра [команд](/commands) и [обновлений](/updates).
### JaBa v3.0.1
### v3.0.1
* Добавлено
* Команда *loop* - переключение повтора одного трека или всей очереди (*loop song/queue*).
@ -675,7 +682,7 @@
* Администраторы и модераторы могут использовать *skip*, *back* и *stop* принудительно (*skip/back/stop force/f*).
* Уменьшено количество требуемых голосов для команд *skip*, *stop* и *back*.
### JaBa v3.0
### v3.0
>
> Я решил полностью переделать бота, так как в старом был вагон и маленькая тележка проблем. Данная верcия должна быть в разы лучше.
> Старые команды я не переносил, т.к. они были ужасно написаны и использовали старые библиотеки.

View file

@ -29,7 +29,7 @@ module.exports = client => [
guildData.language = newData;
guildData.markModified();
guildData.markModified("language");
await guildData.save();
return;
@ -464,7 +464,7 @@ module.exports = client => [
{
categoryId: "test",
categoryName: "test settings",
categoryDescription: "ooga booba",
categoryDescription: "ooga booga",
categoryPermissions: PermissionsBitField.Flags.ViewChannel,
categoryOptionsList: [
{

View file

@ -30,6 +30,7 @@ class CommandHandler extends BaseEvent {
}
if (interaction.isAutocomplete()) return await command.autocompleteRun(client, interaction);
if (interaction.isButton() && interaction.customId === "quote_delete" && interaction.message.deletable) return interaction.message.delete();
if (interaction.type !== InteractionType.ApplicationCommand && !interaction.isCommand()) return;
if (command.ownerOnly && interaction.user.id !== client.config.owner.id) return interaction.error("misc:OWNER_ONLY", null, { ephemeral: true });

View file

@ -83,19 +83,10 @@ class MessageCreate extends BaseEvent {
new ButtonBuilder().setCustomId("quote_delete").setEmoji("1102200816582000750").setStyle(ButtonStyle.Danger),
);
await message.reply({
message.reply({
embeds: [embed],
components: [row],
});
const filter = i => i.user.id === message.author.id;
const collector = message.channel.createMessageComponentCollector({ filter, time: 60 * 1000 });
collector.on("collect", async i => {
if (i.isButton() && i.customId === "quote_delete") {
if (i.message.deletable) i.message.delete();
}
});
}
if (data.guildData.plugins.automod.enabled && !data.guildData.plugins.automod.ignored.includes(message.channelId))
@ -108,7 +99,7 @@ class MessageCreate extends BaseEvent {
if (data.userData.afk) {
data.userData.afk = null;
data.userData.markModified();
data.userData.markModified("afk");
await data.userData.save();
message.replyT("general/afk:DELETED", {
@ -156,7 +147,8 @@ async function updateXp(client, msg, memberData) {
}, { mention: false });
} else memberData.exp = parseInt(newXp, 10);
memberData.markModified();
memberData.markModified("level");
memberData.markModified("exp");
await memberData.save();
}

View file

@ -2,7 +2,8 @@
"DESCRIPTION": "Toggles automatic role assignment upon joining the server",
"USAGE": "[state] (@role)",
"EXAMPLES": "autorole state:True role:@newbie\nautorole state:False",
"MISSING_ROLE": "Specify a role",
"SUCCESS_ENABLED": "Role assignment is enabled!\nNew users will automatically receive the {{role}} upon joining the server",
"SUCCESS_DISABLED": "Role assignment is disabled"
"TOGGLE": "Toggle autorole",
"ROLE": "Select role",
"ENABLED": "Role assignment is enabled!\nNew users will automatically receive the {{role}} upon joining the server",
"DISABLED": "Role assignment is disabled"
}

View file

@ -2,7 +2,8 @@
"DESCRIPTION": "Включить или отключить автоназначение роли при входе на сервер",
"USAGE": "[state] (@role)",
"EXAMPLES": "autorole state:True role:@новенький\nautorole state:False",
"MISSING_ROLE": "Укажите роль",
"SUCCESS_ENABLED": "Автоназначение роли включено!\nНовые пользователи будут автоматически получать {{role}} при входе на сервер",
"SUCCESS_DISABLED": "Автоназначение роли отключено"
"TOGGLE": "Переключить автороль",
"ROLE": "Выбрать роль",
"ENABLED": "Автоназначение роли включено!\nНовые пользователи будут автоматически получать {{role}} при входе на сервер",
"DISABLED": "Автоназначение роли отключено"
}

View file

@ -2,7 +2,8 @@
"DESCRIPTION": "Увімкнути або вимкнути автопризначення ролі при вході на сервер",
"USAGE": "[state] (@role)",
"EXAMPLES": "autorole state:True role:@новий\nautorole state:False",
"MISSING_ROLE": "Вкажіть роль",
"SUCCESS_ENABLED": "Автопризначення ролі увімкнено!\nНові користувачі автоматично отримуватимуть {{role}} під час входу на сервер",
"SUCCESS_DISABLED": "Автопризначення ролі вимкнено"
"TOGGLE": "Перемкнути автороль",
"ROLE": "Обрати роль",
"ENABLED": "Автопризначення ролі увімкнено!\nНові користувачі автоматично отримуватимуть {{role}} під час входу на сервер",
"DISABLED": "Автопризначення ролі вимкнено"
}

View file

@ -1,6 +1,6 @@
{
"name": "jaba",
"version": "4.3.5",
"version": "4.3.6",
"description": "My Discord Bot",
"main": "index.js",
"scripts": {