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

View file

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

View file

@ -26,43 +26,14 @@ class Memes extends BaseCommand {
* *
* @param {import("../../base/JaBa")} client * @param {import("../../base/JaBa")} client
*/ */
async onLoad() { async onLoad(client) {
//... client.on("interactionCreate", async interaction => {
} if (!interaction.isStringSelectMenu()) return;
/**
*
* @param {import("../../base/JaBa")} client
* @param {import("discord.js").ChatInputCommandInteraction} interaction
* @param {Object} data
*/
async execute(client, interaction) {
await interaction.deferReply();
const tags = ["funny", "memes", "dankmemes", "me_irl", "wholesomememes"].map(tag => if (interaction.customId === "memes_select") {
JSON.parse( interaction.deferUpdate();
JSON.stringify({
label: tag,
value: tag,
}),
),
);
const row = new ActionRowBuilder().addComponents(new StringSelectMenuBuilder().setCustomId("memes_select").setPlaceholder(client.translate("common:NOTHING_SELECTED")).addOptions(tags)); const tag = interaction.values[0];
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 res = await fetch(`https://meme-api.com/gimme/${tag}`).then(response => response.json()); const res = await fetch(`https://meme-api.com/gimme/${tag}`).then(response => response.json());
const embed = new EmbedBuilder() 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", () => { const tags = ["funny", "memes", "dankmemes", "me_irl", "wholesomememes"].map(tag =>
return interaction.editReply({ JSON.parse(
components: [], 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 * @param {Object} data
*/ */
async execute(client, interaction, data) { async execute(client, interaction, data) {
const state = interaction.options.getBoolean("state"); const state = interaction.options.getBoolean("state"),
role = interaction.options.getRole("role");
if (state) {
const role = interaction.options.getRole("role");
if (!role) return interaction.error("administration/autorole:MISSING_ROLE");
data.guildData.plugins.autorole = { data.guildData.plugins.autorole = {
enabled: true, enabled: state,
role: role.id, role,
}; };
if (state && role) {
data.guildData.markModified("plugins.autorole"); data.guildData.markModified("plugins.autorole");
await data.guildData.save(); await data.guildData.save();
interaction.success("administration/autorole:SUCCESS_ENABLED", { interaction.success("administration/autorole:ENABLED", {
role: role.toString(), role: role.toString(),
}); });
} else { } else {
data.guildData.plugins.autorole = { data.guildData.plugins.autorole.enabled = false;
enabled: false,
role: null,
};
data.guildData.markModified("plugins.autorole"); data.guildData.markModified("plugins.autorole");
await data.guildData.save(); 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": { case "level": {
memberData.level = int; memberData.level = int;
memberData.markModified(); memberData.markModified("level");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -100,7 +100,7 @@ class Set extends BaseCommand {
case "xp": { case "xp": {
memberData.exp = int; memberData.exp = int;
memberData.markModified(); memberData.markModified("exp");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -112,7 +112,7 @@ class Set extends BaseCommand {
case "credits": { case "credits": {
memberData.money = int; memberData.money = int;
memberData.markModified(); memberData.markModified("money");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -124,7 +124,7 @@ class Set extends BaseCommand {
case "bank": { case "bank": {
memberData.bankSold = int; memberData.bankSold = int;
memberData.markModified(); memberData.markModified("bankSold");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -50,7 +50,7 @@ class Setbio extends BaseCommand {
data.userData.bio = newBio; data.userData.bio = newBio;
data.userData.markModified(); data.userData.markModified("bio");
await data.userData.save(); await data.userData.save();
interaction.success("economy/setbio:SUCCESS"); 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(); await data.userData.save();
} }
data.memberData.markModified(); data.memberData.markModified("money");
data.memberData.markModified("transactions");
await data.memberData.save(); await data.memberData.save();
return; return;
@ -193,11 +194,12 @@ class Slots extends BaseCommand {
}); });
} }
data.userData.markModified(); data.userData.markModified("achievements");
await data.userData.save(); await data.userData.save();
} }
data.memberData.markModified(); data.memberData.markModified("money");
data.memberData.markModified("transactions");
await data.memberData.save(); await data.memberData.save();
return; return;
@ -224,11 +226,12 @@ class Slots extends BaseCommand {
if (!data.userData.achievements.slots.achieved) { if (!data.userData.achievements.slots.achieved) {
data.userData.achievements.slots.progress.now = 0; data.userData.achievements.slots.progress.now = 0;
data.userData.markModified(); data.userData.markModified("achievements");
await data.userData.save(); await data.userData.save();
} }
data.memberData.markModified(); data.memberData.markModified("money");
data.memberData.markModified("transactions");
await data.memberData.save(); await data.memberData.save();
return; return;

View file

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

View file

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

View file

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

View file

@ -25,23 +25,14 @@ class Boosters extends BaseCommand {
* *
* @param {import("../../base/JaBa")} client * @param {import("../../base/JaBa")} client
*/ */
async onLoad() { async onLoad(client) {
//... client.on("interactionCreate", async interaction => {
} if (!interaction.isButton()) return;
/**
*
* @param {import("../../base/JaBa")} client
* @param {import("discord.js").ChatInputCommandInteraction} interaction
* @param {Object} data
*/
async execute(client, interaction, data) {
await interaction.deferReply();
let currentPage = 0; if (interaction.customId.includes("boosters_")) {
const boosters = (await interaction.guild.members.fetch()).filter(m => m.premiumSince); const guildData = client.findOrCreateGuild(interaction.guildId),
if (boosters.size === 0) return interaction.error("general/boosters:NO_BOOSTERS", null, { edit: true }); boosters = (await interaction.guild.members.fetch()).filter(m => m.premiumSince),
embeds = generateBoostersEmbeds(client, interaction, boosters, guildData);
const embeds = generateBoostersEmbeds(client, interaction, boosters, data.guildData);
const row = new ActionRowBuilder().addComponents( const row = new ActionRowBuilder().addComponents(
new ButtonBuilder().setCustomId("boosters_prev_page").setStyle(ButtonStyle.Primary).setEmoji("⬅️"), 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("⏹️"), new ButtonBuilder().setCustomId("boosters_stop").setStyle(ButtonStyle.Danger).setEmoji("⏹️"),
); );
await interaction.editReply({ let currentPage = 0;
content: `${interaction.translate("common:PAGE")}: **${currentPage + 1}**/**${embeds.length}**`,
embeds: [embeds[currentPage]],
components: [row],
});
const filter = i => i.user.id === interaction.user.id; if (interaction.customId === "boosters_prev_page") {
const collector = interaction.guild === null ? (await interaction.user.createDM()).createMessageComponentCollector({ filter, idle: 20 * 1000 }) : interaction.channel.createMessageComponentCollector({ filter, idle: 20 * 1000 }); await interaction.deferUpdate();
collector.on("collect", async i => {
if (i.isButton()) {
if (i.customId === "boosters_prev_page") {
i.deferUpdate();
if (currentPage !== 0) { if (currentPage !== 0) {
--currentPage; --currentPage;
@ -72,8 +54,8 @@ class Boosters extends BaseCommand {
components: [row], components: [row],
}); });
} }
} else if (i.customId === "boosters_next_page") { } else if (interaction.customId === "boosters_next_page") {
i.deferUpdate(); await interaction.deferUpdate();
if (currentPage < embeds.length - 1) { if (currentPage < embeds.length - 1) {
currentPage++; currentPage++;
@ -83,8 +65,8 @@ class Boosters extends BaseCommand {
components: [row], components: [row],
}); });
} }
} else if (i.customId === "boosters_jump_page") { } else if (interaction.customId === "boosters_jump_page") {
i.deferUpdate(); await interaction.deferUpdate();
const msg = await interaction.followUp({ const msg = await interaction.followUp({
content: interaction.translate("misc:JUMP_TO_PAGE", { content: interaction.translate("misc:JUMP_TO_PAGE", {
@ -114,14 +96,9 @@ class Boosters extends BaseCommand {
return; return;
} }
}); });
} else if (i.customId === "boosters_stop") { } else if (interaction.customId === "boosters_stop") {
i.deferUpdate(); await interaction.deferUpdate();
collector.stop();
}
}
});
collector.on("end", () => {
row.components.forEach(component => { row.components.forEach(component => {
component.setDisabled(true); component.setDisabled(true);
}); });
@ -129,6 +106,35 @@ class Boosters extends BaseCommand {
return interaction.editReply({ return interaction.editReply({
components: [row], 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 * @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 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"), content: interaction.translate("common:AVAILABLE_OPTIONS"),
fetchReply: true, fetchReply: true,
components: [row], 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 * @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 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"), content: interaction.translate("common:AVAILABLE_OPTIONS"),
ephemeral: true, ephemeral: true,
fetchReply: true, fetchReply: true,
components: [row], 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": { case "level": {
memberData.level = int; memberData.level = int;
memberData.markModified(); memberData.markModified("level");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -158,7 +158,7 @@ class Debug extends BaseCommand {
case "xp": { case "xp": {
memberData.exp = int; memberData.exp = int;
memberData.markModified(); memberData.markModified("exp");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -170,7 +170,7 @@ class Debug extends BaseCommand {
case "credits": { case "credits": {
memberData.money = int; memberData.money = int;
memberData.markModified(); memberData.markModified("money");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -182,7 +182,7 @@ class Debug extends BaseCommand {
case "bank": { case "bank": {
memberData.bankSold = int; memberData.bankSold = int;
memberData.markModified(); memberData.markModified("bankSold");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -194,7 +194,7 @@ class Debug extends BaseCommand {
case "rep": { case "rep": {
userData.rep = int; userData.rep = int;
userData.markModified(); userData.markModified("rep");
await userData.save(); await userData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -220,7 +220,7 @@ class Debug extends BaseCommand {
case "level": { case "level": {
memberData.level += int; memberData.level += int;
memberData.markModified(); memberData.markModified("level");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -232,7 +232,7 @@ class Debug extends BaseCommand {
case "xp": { case "xp": {
memberData.exp += int; memberData.exp += int;
memberData.markModified(); memberData.markModified("exp");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -244,7 +244,7 @@ class Debug extends BaseCommand {
case "credits": { case "credits": {
memberData.money += int; memberData.money += int;
memberData.markModified(); memberData.markModified("money");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -256,7 +256,7 @@ class Debug extends BaseCommand {
case "bank": { case "bank": {
memberData.bankSold += int; memberData.bankSold += int;
memberData.markModified(); memberData.markModified("bankSold");
await memberData.save(); await memberData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {
@ -268,7 +268,7 @@ class Debug extends BaseCommand {
case "rep": { case "rep": {
userData.rep += int; userData.rep += int;
userData.markModified(); userData.markModified("rep");
await userData.save(); await userData.save();
return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, { return interaction.success(`owner/debug:SUCCESS_${type.toUpperCase()}`, {

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

View file

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

View file

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

View file

@ -30,6 +30,7 @@ class CommandHandler extends BaseEvent {
} }
if (interaction.isAutocomplete()) return await command.autocompleteRun(client, interaction); 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 (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 }); 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), new ButtonBuilder().setCustomId("quote_delete").setEmoji("1102200816582000750").setStyle(ButtonStyle.Danger),
); );
await message.reply({ message.reply({
embeds: [embed], embeds: [embed],
components: [row], 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)) 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) { if (data.userData.afk) {
data.userData.afk = null; data.userData.afk = null;
data.userData.markModified(); data.userData.markModified("afk");
await data.userData.save(); await data.userData.save();
message.replyT("general/afk:DELETED", { message.replyT("general/afk:DELETED", {
@ -156,7 +147,8 @@ async function updateXp(client, msg, memberData) {
}, { mention: false }); }, { mention: false });
} else memberData.exp = parseInt(newXp, 10); } else memberData.exp = parseInt(newXp, 10);
memberData.markModified(); memberData.markModified("level");
memberData.markModified("exp");
await memberData.save(); await memberData.save();
} }

View file

@ -2,7 +2,8 @@
"DESCRIPTION": "Toggles automatic role assignment upon joining the server", "DESCRIPTION": "Toggles automatic role assignment upon joining the server",
"USAGE": "[state] (@role)", "USAGE": "[state] (@role)",
"EXAMPLES": "autorole state:True role:@newbie\nautorole state:False", "EXAMPLES": "autorole state:True role:@newbie\nautorole state:False",
"MISSING_ROLE": "Specify a role", "TOGGLE": "Toggle autorole",
"SUCCESS_ENABLED": "Role assignment is enabled!\nNew users will automatically receive the {{role}} upon joining the server", "ROLE": "Select role",
"SUCCESS_DISABLED": "Role assignment is disabled" "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": "Включить или отключить автоназначение роли при входе на сервер", "DESCRIPTION": "Включить или отключить автоназначение роли при входе на сервер",
"USAGE": "[state] (@role)", "USAGE": "[state] (@role)",
"EXAMPLES": "autorole state:True role:@новенький\nautorole state:False", "EXAMPLES": "autorole state:True role:@новенький\nautorole state:False",
"MISSING_ROLE": "Укажите роль", "TOGGLE": "Переключить автороль",
"SUCCESS_ENABLED": "Автоназначение роли включено!\nНовые пользователи будут автоматически получать {{role}} при входе на сервер", "ROLE": "Выбрать роль",
"SUCCESS_DISABLED": "Автоназначение роли отключено" "ENABLED": "Автоназначение роли включено!\nНовые пользователи будут автоматически получать {{role}} при входе на сервер",
"DISABLED": "Автоназначение роли отключено"
} }

View file

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

View file

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