mirror of
https://github.com/JonnyBro/JaBa.git
synced 2024-11-24 22:24:58 +05:00
v4.3.6 - https://dash.jababot.ru/updates
This commit is contained in:
parent
bf3e6065c3
commit
efdab69651
30 changed files with 318 additions and 339 deletions
|
@ -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);
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()}`, {
|
||||
|
|
|
@ -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", {
|
||||
|
|
|
@ -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", {
|
||||
|
|
|
@ -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", {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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", {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -67,7 +67,8 @@ class TicTacToe extends BaseCommand {
|
|||
|
||||
memberData.transactions.push(info);
|
||||
|
||||
memberData.markModified();
|
||||
memberData.markModified("money");
|
||||
memberData.markModified("transactions");
|
||||
await memberData.save();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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", {
|
||||
|
|
|
@ -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],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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: [],
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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: [],
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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ия должна быть в разы лучше.
|
||||
> Старые команды я не переносил, т.к. они были ужасно написаны и использовали старые библиотеки.
|
||||
|
|
|
@ -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: [
|
||||
{
|
||||
|
|
|
@ -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 });
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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"
|
||||
}
|
|
@ -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": "Автоназначение роли отключено"
|
||||
}
|
|
@ -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": "Автопризначення ролі вимкнено"
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "jaba",
|
||||
"version": "4.3.5",
|
||||
"version": "4.3.6",
|
||||
"description": "My Discord Bot",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
|
|
Loading…
Reference in a new issue