Поздравления с ДР только на сервер где есть юзер

Комментарии к функциям чтобы не забыть
This commit is contained in:
JonnyBro 2022-09-26 19:54:35 +05:00
parent 28a21c8088
commit 2f30e020ca
138 changed files with 159 additions and 1380 deletions

View file

@ -90,6 +90,9 @@ class JaBa extends Client {
}); });
} }
/**
* Login into bot account, connect to DB and update docs
*/
async init() { async init() {
this.login(this.config.token); this.login(this.config.token);
@ -107,8 +110,8 @@ class JaBa extends Client {
} }
/** /**
* * Load commands from directory
* @param {String} dir * @param {String} dir Directory where's all commands/subdirectories located
* @returns * @returns
*/ */
async loadCommands(dir) { async loadCommands(dir) {
@ -169,9 +172,9 @@ class JaBa extends Client {
} }
/** /**
* * Load single command in directory
* @param {String} dir * @param {String} dir Directory where command is
* @param {String} file * @param {String} file Filename of the command
*/ */
async loadCommand(dir, file) { async loadCommand(dir, file) {
const Command = require(path.join(dir, `${file}.js`)); const Command = require(path.join(dir, `${file}.js`));
@ -196,9 +199,9 @@ class JaBa extends Client {
} }
/** /**
* * Unload command from cache
* @param {String} dir * @param {String} dir Directory of the command
* @param {String} name * @param {String} name Name of the command
*/ */
async unloadCommand(dir, name) { async unloadCommand(dir, name) {
delete require.cache[require.resolve(`${dir}${path.sep}${name}.js`)]; delete require.cache[require.resolve(`${dir}${path.sep}${name}.js`)];
@ -207,8 +210,8 @@ class JaBa extends Client {
} }
/** /**
* * Load events from directory
* @param {String} dir * @param {String} dir Directory where's all events/subdirectories located
* @returns * @returns
*/ */
async loadEvents(dir) { async loadEvents(dir) {
@ -231,15 +234,18 @@ class JaBa extends Client {
} }
} }
/**
* Get default language
*/
get defaultLanguage() { get defaultLanguage() {
return this.languages.find(language => language.default).name; return this.languages.find(language => language.default).name;
} }
/** /**
* * Translate from key to language
* @param {String} key * @param {String} key Key
* @param {Array} args * @param {Array} args Arguments for translation
* @param {String} locale * @param {String} locale Language
*/ */
translate(key, args, locale = this.defaultLanguage) { translate(key, args, locale = this.defaultLanguage) {
const language = this.translations.get(locale); const language = this.translations.get(locale);
@ -248,6 +254,13 @@ class JaBa extends Client {
return language(key, args); return language(key, args);
} }
/**
* Returns beautified date
* @param {Date} date Date
* @param {String | null} format Format for moment
* @param {String} locale Language
* @returns {String} Beautified date
*/
printDate(date, format = "", locale = this.defaultLanguage) { printDate(date, format = "", locale = this.defaultLanguage) {
const languageData = this.languages.find(language => language.name === locale || language.aliases.includes(locale)); const languageData = this.languages.find(language => language.name === locale || language.aliases.includes(locale));
if (format === "" || format === null) format = languageData.defaultMomentFormat; if (format === "" || format === null) format = languageData.defaultMomentFormat;
@ -257,6 +270,14 @@ class JaBa extends Client {
.format(format); .format(format);
} }
/**
* Convert given time
* @param {String} time Time
* @param {Boolean} type Type (To now = true or from now = false)
* @param {Boolean} noPrefix Use prefix?
* @param {String} locale Language
* @returns {String} Time
*/
convertTime(time, type = false, noPrefix = false, locale = this.defaultLanguage) { convertTime(time, type = false, noPrefix = false, locale = this.defaultLanguage) {
const languageData = this.languages.find(language => language.name === locale || language.aliases.includes(locale)); const languageData = this.languages.find(language => language.name === locale || language.aliases.includes(locale));
const m = moment(time).locale(languageData.moment); const m = moment(time).locale(languageData.moment);
@ -264,6 +285,14 @@ class JaBa extends Client {
return (type ? m.toNow(noPrefix) : m.fromNow(noPrefix)); return (type ? m.toNow(noPrefix) : m.fromNow(noPrefix));
} }
/**
* Get noun for number
* @param {Number} number Number
* @param {String} one String for one
* @param {String} two String for two
* @param {String} five String for five
* @returns
*/
getNoun(number, one, two, five) { getNoun(number, one, two, five) {
let n = Math.abs(number); let n = Math.abs(number);
n %= 100; n %= 100;
@ -275,6 +304,12 @@ class JaBa extends Client {
return five; return five;
} }
/**
* Find or create user in DB
* @param {Array} param0 { id: User ID }
* @param {Boolean} isLean Return JSON instead Mongoose model?
* @returns {import("./User")} Mongoose model or JSON of this user
*/
async findOrCreateUser({ id: userID }, isLean) { async findOrCreateUser({ id: userID }, isLean) {
if (this.databaseCache.users.get(userID)) return isLean ? this.databaseCache.users.get(userID).toJSON() : this.databaseCache.users.get(userID); if (this.databaseCache.users.get(userID)) return isLean ? this.databaseCache.users.get(userID).toJSON() : this.databaseCache.users.get(userID);
else { else {
@ -299,6 +334,12 @@ class JaBa extends Client {
} }
} }
/**
* Find or create member in DB
* @param {Array} param0 { id: Member ID }
* @param {Boolean} isLean Return JSON instead Mongoose model?
* @returns {import("./Member")} Mongoose model or JSON of this member
*/
async findOrCreateMember({ id: memberID, guildID }, isLean) { async findOrCreateMember({ id: memberID, guildID }, isLean) {
if (this.databaseCache.members.get(`${memberID}${guildID}`)) return isLean ? this.databaseCache.members.get(`${memberID}${guildID}`).toJSON() : this.databaseCache.members.get(`${memberID}${guildID}`); if (this.databaseCache.members.get(`${memberID}${guildID}`)) return isLean ? this.databaseCache.members.get(`${memberID}${guildID}`).toJSON() : this.databaseCache.members.get(`${memberID}${guildID}`);
else { else {
@ -333,6 +374,12 @@ class JaBa extends Client {
} }
} }
/**
* Find or create guild in DB
* @param {Array} param0 { id: Guild ID }
* @param {Boolean} isLean Return JSON instead Mongoose model?
* @returns {import("./Guild")} Mongoose model or JSON of this guild
*/
async findOrCreateGuild({ id: guildID }, isLean) { async findOrCreateGuild({ id: guildID }, isLean) {
if (this.databaseCache.guilds.get(guildID)) return isLean ? this.databaseCache.guilds.get(guildID).toJSON() : this.databaseCache.guilds.get(guildID); if (this.databaseCache.guilds.get(guildID)) return isLean ? this.databaseCache.guilds.get(guildID).toJSON() : this.databaseCache.guilds.get(guildID);
else { else {

View file

@ -7,22 +7,23 @@ const { CronJob } = require("cron"),
*/ */
module.exports.init = async function (client) { module.exports.init = async function (client) {
new CronJob("0 5 * * *", async function () { new CronJob("0 5 * * *", async function () {
client.guilds.cache.forEach(async (guild) => {
const date = new Date(), const date = new Date(),
currentDay = date.getDate(), currentDay = date.getDate(),
currentMonth = date.getMonth(), currentMonth = date.getMonth(),
currentYear = date.getFullYear(), currentYear = date.getFullYear();
guildData = await client.findOrCreateGuild({
client.guilds.cache.forEach(async guild => {
const guildData = await client.findOrCreateGuild({
id: guild.id id: guild.id
}); });
if (guildData.plugins.birthdays) { if (guildData.plugins.birthdays) {
const channel = client.channels.cache.get(guildData.plugins.birthdays); const channel = client.channels.cache.get(guildData.plugins.birthdays);
if (channel) { if (channel) {
client.usersData client.usersData.find({ birthdate: { $gt: 1 } })
.find({ birthdate: { $gt: 1 } }) .then(async users => {
.then(async (users) => {
for (const user of users) { for (const user of users) {
if (guild.members.find(m => m.id === user.id)) {
const userDate = new Date(user.birthdate); const userDate = new Date(user.birthdate);
const day = userDate.getDate(); const day = userDate.getDate();
const month = userDate.getMonth(); const month = userDate.getMonth();
@ -52,12 +53,14 @@ module.exports.init = async function (client) {
}) })
} }
]); ]);
const msg = await channel.send({ const msg = await channel.send({
embeds: [embed] embeds: [embed]
}); });
await msg.react("🎉"); await msg.react("🎉");
} }
} }
}
}); });
} }
} }

View file

@ -14,13 +14,16 @@ module.exports.init = function (client) {
client.databaseCache.usersReminds.set(user.id, user); client.databaseCache.usersReminds.set(user.id, user);
} }
}); });
setInterval(async function () { setInterval(async function () {
const dateNow = Date.now(); const dateNow = Date.now();
client.databaseCache.usersReminds.forEach(async (user) => { client.databaseCache.usersReminds.forEach(async user => {
const dUser = client.users.cache.get(user.id); const dUser = client.users.cache.get(user.id);
if (dUser) { if (dUser) {
const reminds = user.reminds; const reminds = user.reminds;
const mustSent = reminds.filter((r) => r.sendAt < dateNow); const mustSent = reminds.filter((r) => r.sendAt < dateNow);
if (mustSent.length > 0) { if (mustSent.length > 0) {
mustSent.forEach(r => { mustSent.forEach(r => {
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
@ -46,6 +49,7 @@ module.exports.init = function (client) {
}); });
user.reminds = user.reminds.filter(r => r.sendAt >= dateNow); user.reminds = user.reminds.filter(r => r.sendAt >= dateNow);
user.save(); user.save();
if (user.reminds.length === 0) client.databaseCache.usersReminds.delete(user.id); if (user.reminds.length === 0) client.databaseCache.usersReminds.delete(user.id);
} }
} }

View file

@ -8,10 +8,11 @@ module.exports.init = async function (client) {
client.membersData client.membersData
.find({ "mute.muted": true }) .find({ "mute.muted": true })
.then(members => { .then(members => {
members.forEach((member) => client.databaseCache.mutedUsers.set(`${member.id}${member.guildID}`, member)); members.forEach(member => client.databaseCache.mutedUsers.set(`${member.id}${member.guildID}`, member));
}); });
setInterval(async () => { setInterval(async () => {
client.databaseCache.mutedUsers.filter((m) => m.mute.endDate <= Date.now()).forEach(async (memberData) => { client.databaseCache.mutedUsers.filter(m => m.mute.endDate <= Date.now())
.forEach(async memberData => {
const guild = client.guilds.cache.get(memberData.guildID); const guild = client.guilds.cache.get(memberData.guildID);
if (!guild) return; if (!guild) return;
@ -22,8 +23,8 @@ module.exports.init = async function (client) {
case: null case: null
}; };
memberData.save(); memberData.save();
client.logger.log("[unmute] " + memberData.id + " cannot be found."); client.logger.log("[Unmuted] " + memberData.id + " cannot be found.");
return null; return;
}); });
const guildData = await client.findOrCreateGuild({ const guildData = await client.findOrCreateGuild({
@ -31,11 +32,12 @@ module.exports.init = async function (client) {
}); });
if (member) { if (member) {
guild.channels.cache.forEach((channel) => { guild.channels.cache.forEach(channel => {
const permOverwrites = channel.permissionOverwrites.cache.get(member.id); const permOverwrites = channel.permissionOverwrites.cache.get(member.id);
if (permOverwrites) permOverwrites.delete(); if (permOverwrites) permOverwrites.delete();
}); });
} }
const user = member ? member.user : await client.users.fetch(memberData.id); const user = member ? member.user : await client.users.fetch(memberData.id);
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
.setDescription(guild.translate("moderation/unmute:SUCCESS_CASE", { .setDescription(guild.translate("moderation/unmute:SUCCESS_CASE", {
@ -47,6 +49,7 @@ module.exports.init = async function (client) {
.setFooter({ .setFooter({
text: guild.client.config.embed.footer text: guild.client.config.embed.footer
}); });
const channel = guild.channels.cache.get(guildData.plugins.modlogs); const channel = guild.channels.cache.get(guildData.plugins.modlogs);
if (channel) channel.send({ embeds: [embed] }); if (channel) channel.send({ embeds: [embed] });

View file

@ -0,0 +1 @@
Когда-нибудь тут будет перевод на английский. Сейчас в нём нет смысла

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "Add a custom command!",
"USAGE": "addcommand [name] [answer]",
"EXAMPLES": "addcommand hello Hello {user}! How are you?",
"MISSING_NAME": "Please provide a command name!",
"MISSING_ANSWER": "Please provide a command answer!",
"SUCCESS": "Command **{{commandName}}** added!"
}

View file

@ -1,10 +0,0 @@
{
"DESCRIPTION": "Add an emoji to the server!",
"USAGE": "addemoji [image-url] [name]",
"EXAMPLES": "addemoji https://via.placeholder.com/150 test-emoji",
"MISSING_URL": "Please provide an image URL!",
"MISSING_NAME": "Please provide an emoji name!",
"INVALID_NAME": "The length of the emoji name must be between 2 and 32!",
"SUCCESS": "{{emoji}} added!",
"ERROR": "{{emoji}} couldn't be added. Check if your server still has space for new emojis!"
}

View file

@ -1,10 +0,0 @@
{
"DESCRIPTION": "Toggle Discord invites automatic deletion",
"USAGE": "automod [on/off] (#channel)",
"EXAMPLES": "automod on\nautomod off #general\nautomod off",
"MISSING_STATUS": "Please enter a valid value between `on` and `off`",
"ENABLED": "**Discord invites will be automatically deleted!**\n\n:arrow_right_hook: *Send `automod off #channel` to ignore a channel!*",
"DISABLED_CHANNEL": "Auto-moderation will no longer be performed in {{channel}}!",
"DISABLED": "All right! Auto moderation is no longer effective on this server!",
"DELETED": "Your message was deleted because Discord invitations are not allowed on this server!"
}

View file

@ -1,10 +0,0 @@
{
"DESCRIPTION": "Toggle autorole on the server!",
"USAGE": "autorole [on/off] (role)",
"EXAMPLES": "autorole on @Members\nautorole off",
"MISSING_STATUS": "Please specify a valid value between `on` and `off`",
"MISSING_ROLE": "Please specify a valid role!",
"SUCCESS_ENABLED": "Autorole enabled! New members will automatically receive the **{{roleName}}** role.",
"ALREADY_DISABLED": "**The autorole is already disabled.**\n\n:arrow_right_hook: *Send `autorole on @YourRole` to enable it again!*",
"SUCCESS_DISABLED": "**Autorole disabled!**\n\n:arrow_right_hook: *Send `configuration` to see the updated configuration!*"
}

View file

@ -1,19 +0,0 @@
{
"DESCRIPTION": "Manage your server backups in an efficient way!",
"USAGE": "backup [create/load/infos]",
"EXAMPLES": "backup create\nbackup load 558328638911545423\nbackup infos 558328638911545423",
"MISSING_STATUS": "Select an action between: `create`, `load` and `info`!",
"MISSING_BACKUP_ID": "Please enter a backup ID!",
"NO_BACKUP_FOUND": "No backup found for `{{backupID}}`",
"TIMES_UP": "Time's up! Cancelled backup loading!",
"SUCCESS_PUBLIC": "Backup successfully created! The backup ID has been sent to you in private messages!",
"SUCCESS_PRIVATE": "Here's your backup ID: `{{backupID}}`, use it to load your backup on an another server!",
"CONFIRMATION": ":warning: | **Loading a backup will replace the actual server with the saved one.**\n\n:arrow_right_hook: *Answer by sending `confirm` to confirm this action!*",
"START_LOADING": "Backup loading started!",
"LOAD_SUCCESS": "Backup successfully loaded!",
"TITLE_INFO": "Backup Information",
"TITLE_ID": "ID",
"TITLE_SERVER_ID": "Server ID",
"TITLE_SIZE": "Size",
"TITLE_CREATED_AT": "Created At"
}

View file

@ -1,32 +0,0 @@
{
"DESCRIPTION": "Shows the server configuration!",
"USAGE": "configuration",
"EXAMPLES": "configuration",
"PREFIX_TITLE": "Server prefix",
"IGNORED_CHANNELS_TITLE": "Ignored channel(s)",
"NO_IGNORED_CHANNELS": "No ignored channels.",
"AUTOROLE_TITLE": "Autorole",
"AUTOROLE_CONTENT": "Role: {{roleName}}",
"AUTOROLE_DISABLED": "Autorole disabled.",
"WELCOME_TITLE": "Welcome",
"WELCOME_CONTENT": "Channel: {{channel}}\nImage: {{withImage}}",
"WELCOME_DISABLED": "Welcome messages disabled.",
"GOODBYE_TITLE": "Goodbye",
"GOODBYE_CONTENT": "Channel: {{channel}}\nImage: {{withImage}}",
"GOODBYE_DISABLED": "Goodbye messages disabled.",
"SPECIAL_CHANNELS": "Special channels",
"MODLOGS": "Moderation logs: *{{channel}}*",
"BIRTHDAYS": "Birthdays announcements: *{{channel}}*",
"SUGGESTIONS": "Suggestions: *{{channel}}*",
"REPORTS": "Reports: *{{channel}}*",
"AUTOMOD_TITLE": "Auto-moderation:",
"AUTOMOD_CONTENT": "Auto-moderation enabled.\n*Ignored channels: {{channels}}*",
"AUTOMOD_DISABLED": "Auto-moderation disabled.",
"DASHBOARD_TITLE": "Edit your configuration:",
"DASHBOARD_CONTENT": "Click here to go on the dashboard!",
"AUTO_SANCTIONS": "Automatic sanctions",
"KICK_CONTENT": "Kick: After **{{count}}** warnings.",
"KICK_NOT_DEFINED": "Kick: Not defined.",
"BAN_CONTENT": "Ban: After **{{count}}** warnings.",
"BAN_NOT_DEFINED": "Ban: Not defined."
}

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "Remove a custom command!",
"USAGE": "delcommand [name-of-the-command]",
"EXAMPLES": "delcommand hey",
"MISSING_NAME": "Please enter a valid custom command name!",
"UNKNOWN_COMMAND": "The command {{commandName}} doesn't exist!",
"SUCCESS": "The {{commandName}} command has been removed from the server!"
}

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "Toggle moderation commands auto deletion!",
"USAGE": "deletemod [on/off]",
"EXAMPLES": "deletemod on",
"MISSING_STATUS": "You must specify `on` or `off`",
"ENABLED": "Automatic moderation commands deletion!",
"DISABLED": "Automatic moderation commands deletion disabled!"
}

View file

@ -1,17 +0,0 @@
{
"DESCRIPTION": "Toggle goodbye messages!",
"USAGE": "goodbye",
"EXAMPLES": "goodbye",
"MISSING_STATUS": "You must specify an action between `edit` and `off`",
"DEFAULT_MESSAGE": "Goodbye {user}! We're now {membercount} without you... :'(",
"TEST_SUCCESS": "Test executed!",
"FORM_1": "**In which channel will goodbye messages be sent?**\n\n:arrow_right_hook: *Answer by mentioning a channel!*",
"FORM_2": "**Please enter your desired goodbye message.**\n\n**If you want to:**\n*-* __Mention the user__: {user}\n*-* __Get the member count__: {membercount}\n*-* __Get the server name__: {server}\n\n**Usage example:**\nGoodbye {user}, we will miss you! We are now {membercount}.\n:fast_forward:\nGoodbye {{author}}, we will miss you! We are now {{memberCount}}.",
"FORM_3": "**Do you want a great goodbye image too?**\n\n:arrow_right_hook: *Answer by sending `yes` or `no`!*",
"FORM_SUCCESS": "**Alright, done!**\n\n:arrow_right_hook: *Answer by sending `goodbye test` to preview your custom goodbye message!*",
"MAX_CHARACT": "Your message must not exceed 1800 characters!",
"DISABLED": "**Goodbye messages have just been disabled!**\n\n:arrow_right_hook: *Answer by sending `configuration` to see the updated server configuration!*",
"IMG_GOODBYE": "Leaving from {{server}}!",
"IMG_NB": "- {{memberCount}}th member!",
"TITLE": "GOODBYE"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Toggle commands in a channel",
"USAGE": "ignore [channel]",
"EXAMPLES": "ignore #channel",
"ALLOWED": "Commands are now allowed in {{channel}}!",
"IGNORED": "Commands are now forbidden in {{channel}}!"
}

View file

@ -1,13 +0,0 @@
{
"DESCRIPTION": "Change user's XP, level, credits or bank!",
"USAGE": "set [level/xp/credits/bank] [@user] [value]",
"EXAMPLES": "set level @Jonny_Bro#4226 10",
"INVALID_MEMBER": "You must mention the user!",
"NO_STATUS": "Select a parameter: `level`, `xp`, `credits` or `bank`",
"BOT_USER": "Bots don't have a profile!",
"INVALID_AMOUNT": "Enter a new value!",
"SUCCESS_LEVEL": "**{{username}}**'s level was changed to **{{amount}}**!",
"SUCCESS_XP": "**{{username}}**'s XP was changed to **{{amount}}**!",
"SUCCESS_CREDITS": "**{{username}}**'s credits was changed to **{{amount}}**!",
"SUCCESS_BANK": "**{{username}}**'s bank was changed to **{{amount}}**!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Set the birthdays announcements channel!",
"USAGE": "setbirthdays (#channel)",
"EXAMPLES": "setbirthdays #birthdays\nsetbirthdays",
"SUCCESS_ENABLED": "Birthdays announcements will be sent in **{{channel}}**!",
"SUCCESS_DISABLED": "Birthdays announcements disabled!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Change the server language!",
"USAGE": "setlang [language]",
"EXAMPLES": "setlang french\nsetlang english",
"MISSING_LANG": "Please enter a valid language between theses: {{list}}",
"SUCCESS": ":flag_us: The language of this server is now **{{lang}}**!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Set the moderation logs channel!",
"USAGE": "setmodlogs (#channel)",
"EXAMPLES": "setmodlogs #modlogs\nsetmodlogs",
"SUCCESS_ENABLED": "Moderation logs will be sent in **{{channel}}**!",
"SUCCESS_DISABLED": "Moderation logs channel deleted!"
}

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "Set the server prefix!",
"USAGE": "setprefix [prefix]",
"EXAMPLES": "setprefix +",
"MISSING_PREFIX": "Please enter a valid prefix!",
"TOO_LONG": "The prefix shouldn't exceed 5 characters!",
"SUCCESS": "The bot prefix has been set to ``!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Set the reports channel!",
"USAGE": "setreports (#channel)",
"EXAMPLES": "setreports #reports\nsetreports",
"SUCCESS_ENABLED": "Reports will be sent in **{{channel}}**!",
"SUCCESS_DISABLED": "Reports channel deleted!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Set the suggestions channel!",
"USAGE": "setsuggests (#channel)",
"EXAMPLES": "setsuggests #suggestions\nsetsuggests",
"SUCCESS_ENABLED": "Suggestions will be sent in **{{channel}}**!",
"SUCCESS_DISABLED": "Suggestions channel deleted!"
}

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "Steal emoji!",
"USAGE": "stealemoji [emoji]",
"EXAMPLES": "stealemoji :coolstorybob:",
"MISSING_EMOJI": "Please provide an emoji!",
"SUCCESS": "{{emoji}} added!",
"ERROR": "{{emoji}} couldn't be added. Check if your server still has space for new emojis!"
}

View file

@ -1,17 +0,0 @@
{
"DESCRIPTION": "Toggle welcome messages!",
"USAGE": "welcome",
"EXAMPLES": "welcome",
"MISSING_STATUS": "You must specify an action between `edit` and `off`",
"DEFAULT_MESSAGE": "Welcome {user} in {server}, we're now {membercount}! Your account was created {createdat}.",
"TEST_SUCCESS": "Test executed!",
"FORM_1": "**In which channel will welcome messages be sent?**\n\n:arrow_right_hook: *Answer by mentioning a channel!*",
"FORM_2": "**Please enter your desired welcome message.**\n\n**If you want to:**\n*-* __Mention the user__: {user}\n*-* __Get the member count__: {membercount}\n*-* __Get the server name__: {server}\n\n**Usage example:**\nWelcome to {server}, {user}! We are now {membercount}!\n:fast_forward:\nWelcome to {{guildName}}, {{author}}! We are now {{memberCount}}!",
"FORM_3": "**Do you want a great welcome image too?**\n\n:arrow_right_hook: *Answer by sending `yes` or `no`!*",
"FORM_SUCCESS": "**Alright, done!**\n\n:arrow_right_hook: *Answer by sending `welcome test` to preview your custom welcome message!*",
"MAX_CHARACT": "Your message must be under 1800 symbols!",
"DISABLED": "**Goodbye messages have just been disabled!**\n\n:arrow_right_hook: *Answer by sending `configuration` to see the updated server configuration!*",
"IMG_WELCOME": "Welcome in {{server}}!",
"IMG_NB": "- {{memberCount}}th member!",
"TITLE": "WELCOME"
}

View file

@ -1,59 +0,0 @@
{
"YES": "Yes",
"NO": "No",
"NOT_DEFINED": "Not defined",
"AND_MORE": "And more...",
"AUTHOR": "Author",
"DATE": "Date",
"CONTENT": "Content",
"REASON": "Reason",
"USER": "User",
"CREATION": "Creation",
"MEMBERS": "Members",
"NAME": "Name",
"CHANNELS": "Channels",
"ID": "ID",
"OWNER": "Owner",
"USERNAME": "Username",
"STATS": "Stats",
"ROBOT": "Robot",
"GAME": "Game",
"STATUS": "Status",
"STATUS_ONLINE": "Online",
"STATUS_OFFLINE": "Offline",
"STATUS_IDLE": "AFK",
"STATUS_DND": "Do not disturb",
"ROLE": "Role",
"ROLES": "Roles",
"JOIN": "Join",
"COLOR": "Color",
"NICKNAME": "Nickname",
"DESCRIPTION": "Description",
"WEBSITE": "Website",
"INVITE": "Invite",
"SUPPORT": "Support",
"LINKS": "Links",
"CREDITS": "Credits",
"LEVEL": "Level",
"POINTS": "Points",
"VICTORY": "Victory",
"DEFEAT": "Defeat",
"MODERATOR": "Moderator",
"DURATION": "Duration",
"EXPIRY": "Expiry",
"TITLE": "Title",
"SERVERS": "Servers",
"PAGE": "Page",
"MESSAGE": "Message",
"PROFILE": "Profile",
"SETTINGS": "Configuration",
"LANGUAGE": "Language",
"CHANNEL": "Channel",
"APPLY": "Apply",
"SUGGESTIONS": "Suggestions",
"MODLOGS": "Moderation logs",
"NO_CHANNEL": "No channel",
"REPORTS": "Reports",
"BIRTHDAYS": "Birthdays",
"DISCONNECT": "Disconnect"
}

View file

@ -1,25 +0,0 @@
{
"FIRST_LOGIN": "{{user}} logged on to the dashboard for the first time! :tada:",
"NOT_FOUND": "Oops! Page not found.",
"NOT_FOUND_CONTENT": "We did not find the page you were looking for. In the meantime, you can go back to the dashboard or try using the search form.",
"ERR_OCCURRED": "Oops! Something went wrong.",
"ERR_OCCURRED_CONTENT": "We will try to rectify this immediately. In the meantime, you can go back to the selector or try using the search form.",
"SEARCH": "Search for servers...",
"SERVERS_LIST": "Servers list",
"SERVERS_MANAGEMENT": "Servers management",
"NO_SERVER": "No server found",
"NO_SERVER_CONTENT": "No server to display. Make sure you are logged in with the right account and try again.",
"BASIC_CONF": "📝 Basic configuration",
"WELCOME_CONF": "👋 Welcome messages",
"GOODBYE_CONF": "😢 Goodbye messages",
"WELCOME_IMG": "👋 Welcome image",
"GOODBYE_IMG": "😢 Goodbye image",
"CHANNELS_CONF": "🌀 Special channels",
"AUTOROLE_CONF": "🎖️ Autorole",
"DISABLE_MESSAGES": "Disable messages",
"ENABLE_MESSAGES": "Enable messages",
"DISABLE_AUTOROLE": "Disable autorole",
"ENABLE_AUTOROLE": "Enable autorole",
"SELECTOR": "Selector",
"MANAGE": "Manage"
}

View file

@ -1,14 +0,0 @@
{
"DESCRIPTION": "Shows your achievements list!",
"USAGE": "achievements",
"EXAMPLES": "achievements",
"SEND_CMD": "Send your first command!",
"CLAIM_SALARY": "Claim your salary 10 times!",
"MARRY": "Find your half and marry!",
"SLOTS": "Win 3 times in a row in slots!",
"TIP": "Keep JaBa alive by tipping!",
"REP": "Reach 20 reputation points!",
"INVITE": "Invite JaBa on your server!",
"TITLE": "🔥 Achievements",
"PROGRESS": "Progress: {{now}}/{{total}} ({{percent}}%)"
}

View file

@ -1,12 +0,0 @@
{
"DESCRIPTION": "Set the birthday date that appear on your profile",
"USAGE": "birthdate (date)",
"EXAMPLES": "birthdate 01/12/2000",
"MISSING_DATE": "Please enter a valid date! For example, 01/12/2000",
"INVALID_DATE": "You must use the following date format: DD/MM/YYYY. For example, `December 1, 2000` will be `01/12/2000`.",
"DATE_TOO_HIGH": "More than 80 years old? :eyes:",
"DATE_TOO_LOW": "Humm, nop! You must be born!",
"HAPPY_BIRTHDAY": "Happy birthday!",
"HAPPY_BIRTHDAY_MESSAGE": "Happy birthday, <@{{user}}>!",
"SUCCESS": "Your birthday has been set on {{date}}!"
}

View file

@ -1,9 +0,0 @@
{
"DESCRIPTION": "Deposit your money in the bank",
"USAGE": "deposit [amount]",
"EXAMPLES": "deposit 400",
"MISSING_AMOUNT": "Please specify an amount!",
"NO_CREDIT": "You have no credit to deposit in the bank!",
"NO_ENOUGH_CREDIT": "You don't have `{{money}}` credits!",
"SUCCESS": "**{{money}}** credits deposited in the bank!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Divorce the person you are currently married to!",
"USAGE": "divorce",
"EXAMPLES": "divorce",
"NOT_MARRIED": "You are not currently married!",
"DIVORCED": "You just divorced with **{{username}}**!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Shows users who have the most credits, levels or reputation points!",
"USAGE": "leaderboard [rep/level/credits]",
"EXAMPLES": "leaderboard credits\nleaderboard level",
"MISSING_TYPE": "Please specify the leaderboard type between `credits`, `level` and `rep`",
"MOBILE": ":confused: We've detected that you are using a phone.... The leaderboard may not display well on small screens. Try to switch to landscape or go on the dashboard!"
}

View file

@ -1,18 +0,0 @@
{
"DESCRIPTION": "Marry someone you love!",
"USAGE": "marry [@member]",
"EXAMPLES": "marry @Jonny_Bro#4226",
"INVALID_MEMBER": "You must mention a valid member!",
"ALREADY_MARRIED": "You are already married! First use `divorce` to divorce.",
"ALREADY_MARRIED_USER": "The place is taken, companion! **{{username}}** is already married!",
"YOURSELF": "You can't marry yourself!",
"REQUEST_AUTHOR_TO_AMEMBER": "You already have a pending request to **{{username}}**!",
"REQUEST_AMEMBER_TO_AUTHOR": "**{{username}}** has already sent you a request! Please refuse or accept it (or wait until it expires in a few minutes).",
"REQUEST_AMEMBER_TO_MEMBER": "**{{secondUsername}}** has already sent a request to **{{firstUsername}}**!",
"REQUEST_MEMBER_TO_AMEMBER": "**{{firstUsername}} has already sent a request to **{{secondUsername}}**! Wait until **{{secondUsername}}** accepts or refuses the request from **{{firstUsername}}** or until it expires and try again!",
"TIMEOUT": "{{username}} did not answer... Wait until he/she is logged in and try again!",
"SUCCESS": "🎉 Congratulations! **{{creator}}** and **{{partner}}** you are now married!",
"DENIED": "{{creator}}, I have some bad news... {{partner}} refused your proposal.",
"REQUEST": "{{to}}, do you agree to marry {{from}}? Answer with \"yes\" or \"no\"!",
"BOT_USER": "It refused your proposal!"
}

View file

@ -1,6 +0,0 @@
{
"DESCRIPTION": "Shows your credits",
"USAGE": "money (@member)",
"EXAMPLES": "money\nmoney @user#0000",
"TITLE": "{{username}}'s money"
}

View file

@ -1,11 +0,0 @@
{
"DESCRIPTION": "Send money to someone!",
"USAGE": "pay [@member] [amount]",
"EXAMPLES": "pay @Jonny_Bro#4226 100",
"INVALID_MEMBER": "You must mention a valid member!",
"BOT_USER": "Bots are already rich 💰!",
"YOURSELF": "You can't pay yourself!",
"INVALID_AMOUNT": "You must specify a valid amount",
"ENOUGH_MONEY": "You can't afford **{{amount}}**",
"SUCCESS": "You just paid **{{amount}}** to **{{username}}**!"
}

View file

@ -1,25 +0,0 @@
{
"DESCRIPTION": "Shows the mentioned user or author profile",
"USAGE": "profile [user]",
"EXAMPLES": "profile @Jonny_Bro#4226",
"TITLE": "{{username}}'s profile",
"NO_BIO": "No biography",
"BOT_USER": "Bots don't have profile page!",
"CASH": "💵 Cash",
"BANK": "💳 Bank",
"GLOBAL": "🌍 Global money",
"MONEY": "**{{money}}** credit(s)",
"REPUTATION": "🎩 Reputation",
"REP_POINTS": "**{{points}}** point(s)",
"LEVEL": "📊 Level",
"XP": "🔮 Experience",
"BIRTHDATE": "🎂 Birthdate",
"NO_BIRTHDATE": "No birthdate available",
"LOVER": "❤ Lover",
"REGISTERED": "📅 Registered",
"NO_LOVER": "Single",
"ACHIEVEMENTS": "🔥 Achievements",
"ACHIEVEMENTS_CONTENT": "Get more information with `achievements`!",
"BIO": "🔖 Biography",
"YOUR_PROFILE": "Your profile"
}

View file

@ -1,10 +0,0 @@
{
"DESCRIPTION": "Give a reputation point to someone!",
"USAGE": "rep [user]",
"EXAMPLES": "rep @Jonny_Bro#4226",
"COOLDOWN": "You have to wait {{time}} before being able to `rep` someone!",
"INVALID_USER": "You must mention a valid user!",
"BOT_USER": "Bots don't accept reputation points!",
"YOURSELF": "You can't give yourself a reputation point!",
"SUCCESS": "You just gave a reputation point to {{username}}!"
}

View file

@ -1,15 +0,0 @@
{
"DESCRIPTION": "Try to rob a member!",
"USAGE": "rob [@member] [amount]",
"EXAMPLES": "rob @Jonny_Bro#4226 100",
"YOURSELF": "You can't rob yourself!",
"MISSING_MEMBER": "You must specify a valid member to rob!",
"MISSING_AMOUNT": "Please enter a valid amount!",
"NOT_ENOUGH_AUTHOR": "You must have more than **{{moneyMin}}** credits to attempt this robbery (you have **{{moneyCurrent}}** credits for now)!",
"NOT_ENOUGH_MEMBER": "You can't try your robbery because **{{username}}** doesn't have as many credits in cash!",
"COOLDOWN": "🕵️ **{{username}}** is on guard.... Wait a while and try again!",
"ROB_WON_1": "🎉 | Congratulations! The police weren't fast enough to stop you from robbing **{{money}}** credits to **{{username}}**!",
"ROB_WON_2": "😕 | **{{username}}** ? Bad news. You just got robbed **{{money}}** credits!",
"ROB_LOSE_1": "🚔 | The police caught you in the act, impossible to deny, your fine is **{{fine}}** credits. **{{offset}}** offset credits will be paid to **{{username}}**.",
"ROB_LOSE_2": "🚓 | Bad news.... **{{username}}** called the police in time. Your fine is **{{fine}}** credits and **{{offset}}** offset credits will be paid to **{{username}}**."
}

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "Change your biography!",
"USAGE": "setbio [biography]",
"EXAMPLES": "setbio My name is Jake, I'm 19 and I love programming!",
"MISSING": "You must specify a biography!",
"MAX_CHARACT": "Your biography must not exceed 500 characters!",
"SUCCESS": "Your biography has been modified!"
}

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "The JaBa casino",
"USAGE": "slots [amount]",
"EXAMPLES": "slots\nslots 10",
"DEFEAT": "**{{username}}** used {{money}} credit(s) and lost everything.",
"VICTORY": "**{{username}}** used {{money}} credit(s) and won {{won}} credit(s)!",
"NOT_ENOUGH": "You need at least **{{money}}** credit(s)."
}

View file

@ -1,9 +0,0 @@
{
"DESCRIPTION": "Withdraw money!",
"USAGE": "withdraw [amount]",
"EXAMPLES": "withdraw 400",
"MISSING_AMOUNT": "Please specify an amount to be withdrawn!",
"NO_CREDIT": "You don't have any credit in your bank!",
"NOT_ENOUGH": "You need at least `{{money}}` credit(s)!",
"SUCCESS": "**{{money}}** credit(s) withdrawn!"
}

View file

@ -1,11 +0,0 @@
{
"DESCRIPTION": "Claim your salary!",
"USAGE": "work",
"EXAMPLES": "work",
"COOLDOWN": "You have to wait {{time}} before working again!",
"AWARD": "Complete the word AWARD to win 200 bonus credits!",
"SALARY": "Salary",
"SALARY_CONTENT": "You've gained {{won}} credits!",
"STREAK": "Streak",
"STREAK_CONTENT": "🎉 You've won 200 bonus credits!"
}

View file

@ -1,26 +0,0 @@
{
"DESCRIPTION": "I'm telling you the truth!",
"USAGE": "8ball [question]",
"EXAMPLES": "8ball Is JaBa the best Discord bot?",
"ERR_QUESTION": "You must enter a question!",
"RESPONSE_1": "It is certain",
"RESPONSE_2": "It is decidedly so",
"RESPONSE_3": "Without a doubt",
"RESPONSE_4": "Yes — definitely",
"RESPONSE_5": "You may rely on it",
"RESPONSE_6": "As I see it, yes",
"RESPONSE_7": "Most likely",
"RESPONSE_8": "Outlook good",
"RESPONSE_9": "Signs point to yes",
"RESPONSE_10": "Yes",
"RESPONSE_11": "Reply hazy, try again",
"RESPONSE_12": "Ask again later",
"RESPONSE_13": "Better not tell you now",
"RESPONSE_14": "Cannot predict now",
"RESPONSE_15": "Concentrate and ask again",
"RESPONSE_16": "Don't count on it",
"RESPONSE_17": "My reply is no",
"RESPONSE_18": "My sources say no",
"RESPONSE_19": "Outlook not so good",
"RESPONSE_20": "Very doubtful"
}

View file

@ -1,6 +0,0 @@
{
"DESCRIPTION": "Turn your text into ascii characters!",
"USAGE": "ascii [text]",
"EXAMPLES": "ascii Hello world!",
"TEXT_MISSING": "Please enter a valid text (less than 20 characters)!"
}

View file

@ -1,9 +0,0 @@
{
"DESCRIPTION": "Helps you choose between the given choices!",
"USAGE": "choice [choice1/choice2/etc...]",
"EXAMPLES": "choice Fire/Wind/Water",
"MISSING": "You must enter more than two choices!\n(or use the `flip` command instead)",
"EMPTY": "One of your choices seems to be empty.... Please try again!",
"PROGRESS": "Choice being made...",
"DONE": "Here's my choice:"
}

View file

@ -1,13 +0,0 @@
{
"DESCRIPTION": "Start a Findwords party, a game where you have to find words!",
"USAGE": "findwords",
"EXAMPLES": "findwords",
"INVALID_WORD": "{{member}} | Your word is not valid!",
"GAME_STARTING": ":timer: | The game starts in 10 seconds!",
"FIND_WORD": "20 seconds to find a word containing \"__**{{word}}**__\"!",
"WORD_FOUND": "Well done {{winner}}! You were the fastest to enter a valid word!",
"GAME_STATS": "🎉 | {{winner}} won the game!\n\n**Stats:**\n*-* __**Duration**__: {{time}}\n*-* __**Participants**__: {{participants}} ({{participantCount}})**Stats of the game: **\n__**Duration**__: {{duration}}\n__**Number of participants**__ : {{participantCount}}\n__**Participants**__ : \n{{participantList}}",
"CREDITS": "{{winner}} wins 150 credits! 🎉",
"NO_WINNER_ALL": "No words founds, no one wins!",
"NO_WINNER": "No words founds, no one wins!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "I roll the dice for you!",
"USAGE": "flip",
"EXAMPLES": "flip",
"HEADS": "🎲 | Heads!",
"TAILS": "🎲 | Tails!"
}

View file

@ -1,6 +0,0 @@
{
"DESCRIPTION": "Generate a LMGTFY link with your search",
"USAGE": "lmg [search]",
"EXAMPLES": "lmg How to create a Discord bot?",
"MISSING": "You must specify a search!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Love calculator",
"USAGE": "lovecalc [@member1] (@member2)",
"EXAMPLES": "lovecalc @Jonny_Bro#4226\nlovecalc @Jonny_Bro#4226 @JaBa#9042",
"MISSING": "You must mention two members!",
"CONTENT": "There's **{{percent}}%** of love between **{{firstUsername}}** and **{{secondUsername}}**!\n**Congrats!**"
}

View file

@ -1,12 +0,0 @@
{
"DESCRIPTION": "Find the right number!",
"USAGE": "number",
"EXAMPLES": "number",
"GAME_START": "Number chosen, you can start!",
"BIG": "{{user}} | My number is **bigger** than `{{number}}`!",
"SMALL": "{{user}} | My number is **smaller** than `{{number}}`!",
"WON": "{{winner}} has won 100 credits!",
"DEFEAT": "No one could find the number! It was **{{number}}**!",
"GAME_STATS": "🎉 | {{winner}} found the correct number! It was __**{{number}}**__!\n\n**Stats:**\n*-* __**Duration**__: {{time}}\n*-* __**Participants**__: {{participants}} ({{participantCount}})",
"GAME_RUNNING": "A game is already running on this server!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Start activity in voice channel!",
"USAGE": "activity (activity)",
"EXAMPLES": "activity\nactivity chess",
"TITLE": "All available activities",
"FOOTER": "JaBa | Discord Together"
}

View file

@ -1,10 +0,0 @@
{
"DESCRIPTION": "Calculator able to solve complex operations and to convert units!",
"USAGE": "calc [calculation]",
"EXAMPLES": "10*5+sin(3)\ncalc 10cm to m",
"MISSING_CALC": "Please enter a calculation!",
"INVALID_CALC": "Please enter a **valid** calculation!",
"TITLE": "Calculator",
"CALCULATION": "Calculation",
"RESULT": "Result"
}

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "Shows JaBa's v2 Github repository information!",
"USAGE": "github",
"EXAMPLES": "github",
"CLICK_HERE": "Click here to access the github of JaBa",
"LANGUAGE": "Programming language",
"OWNER": "JaBa's repository owner"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Upload your text on hastebin!",
"USAGE": "hastebin [text]",
"EXAMPLES": "hastebin Hello World!",
"MISSING_TEXT": "Please enter a valid text!",
"SUCCESS": "Upload complete!"
}

View file

@ -1,18 +0,0 @@
{
"DESCRIPTION": "Show commands list or specific command help.",
"USAGE": "help (command)",
"EXAMPLES": "help\nhelp ping",
"CUSTOM": "A custom command doesn't have help page.",
"NOT_FOUND": "`{{search}}` is not a valid command",
"FIELD_USAGE": "Usage",
"FIELD_DESCRIPTION": "Description",
"FIELD_ALIASES": "Alias",
"FIELD_EXAMPLES": "Examples",
"FIELD_PERMISSIONS": "Permissions",
"NO_ALIAS": "No alias",
"CMD_TITLE": "{{cmd}} help",
"INFO": "● To get help on a specific command type `help <command>`!",
"CUSTOM_COMMANDS": "Custom commands",
"TITLE": "{{name}} | Commands",
"NO_REQUIRED_PERMISSION": "No specific permission is required to execute this command."
}

View file

@ -1,13 +0,0 @@
{
"DESCRIPTION": "Shows the number of people you have invited to the server!",
"USAGE": "invitations (@member)",
"EXAMPLES": "invitations\ninvitations @Jonny_Bro#4226",
"NOBODY_AUTHOR": "You didn't invite anyone to the server!",
"NOBODY_MEMBER": "{{member}} didn't invite anyone to the server!",
"CODE": "**{{code}}** ({{uses}} uses) | {{channel}}",
"TITLE": "Information about the invitations of {{member}} on {{guild}}",
"FIELD_INVITED": "👥 Invited Members",
"FIELD_CODES": "🔑 Codes",
"FIELD_MEMBERS": "{{total}} members",
"TRACKER": "Invites Tracker"
}

View file

@ -1,10 +0,0 @@
{
"DESCRIPTION": "Shows JaBa links!",
"USAGE": "invite (copy)",
"EXAMPLES": "invite\ninvite copy",
"LINKS": "JaBa links",
"CLICK": "[**Click**]({{link}})",
"TIP": "Send `invite copy` to be able to copy the invite link!",
"ADD": "Invite JaBa",
"SUPPORT": "Support developer"
}

View file

@ -1,16 +0,0 @@
{
"DESCRIPTION": "Shows information about a Minecraft server!",
"USAGE": "minecraft [ip]",
"EXAMPLES": "minecraft mc.hypixel.net",
"MISSING_IP": "Please enter a valid IP address!",
"FAILED": "This server is offline or blocking access!",
"ONLINE": "Online",
"OFFLINE": "Offline",
"PLAYERS": "{{count}} player(s)",
"FIELD_NAME": "Informations about {{ip}}",
"FIELD_VERSION": "Version",
"FIELD_CONNECTED": "Currently connected",
"FIELD_MAX": "Maximum",
"FIELD_STATUS": "Status",
"FIELD_IP": "Full IP"
}

View file

@ -1,6 +0,0 @@
{
"DESCRIPTION": "Displays the member's permissions in the channel",
"USAGE": "permissions (@member)",
"EXAMPLES": "permissions\npermissions @Jonny_Bro#4226",
"TITLE": "{{user}}'s permissions in {{channel}}"
}

View file

@ -1,6 +0,0 @@
{
"DESCRIPTION": "Show bot's ping",
"USAGE": "ping",
"EXAMPLES": "ping",
"CONTENT": "Pong! My ping is `{{ping}}` ms."
}

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "Quote a message in the channel!",
"USAGE": "quote [messageID] [channel]",
"EXAMPLES": "quote 596018101921906698\nquote 596018101921906698 573508780520898581\nquote 596018101921906698 #blabla",
"NO_MESSAGE_ID": "No message has this ID.",
"NO_CHANNEL_ID": "No channel has this ID.",
"MISSING_ID": "Please enter a valid message ID to quote!"
}

View file

@ -1,9 +0,0 @@
{
"DESCRIPTION": "Add a new personal reminder",
"USAGE": "remindme [message]",
"EXAMPLES": "remindme 24h Work command\nremindme 3m Take the pasta out of the pan!",
"MISSING_MESSAGE": "You must enter a message!",
"SAVED": "Reminder saved, you will receive a message at the end of the time!",
"TITLE": "JaBa Reminder",
"CREATED": "Message created {{time}}"
}

View file

@ -1,11 +0,0 @@
{
"DESCRIPTION": "Send your report to the channel defined for them!",
"USAGE": "report [@user] [reason]",
"EXAMPLES": "report @Jonny_Bro#4226 Breaking the rules",
"MISSING_CHANNEL": "No report channel defined!",
"MISSING_REASON": "Please enter a report reason!",
"MISSING_USER": "Please mention the user you want report!",
"INVALID_USER": "You can't report yourself",
"SUCCESS": "Your report has been sent in {{channel}}!",
"TITLE": "Report - {{user}}"
}

View file

@ -1,13 +0,0 @@
{
"DESCRIPTION": "Shows information about the server!",
"USAGE": "serverinfo [ID/Name]",
"EXAMPLES": "serverinfo JaBa\nserverinfo",
"AFK_CHANNEL": "AFK channel",
"NO_AFK_CHANNEL": "No AFK channel",
"MEMBERS": "{{count}} members",
"BOTS": "{{count}} bots",
"BOOSTS": "Boosts count",
"TEXT_CHANNELS": "{{count}} text",
"VOICE_CHANNELS": "{{count}} voice",
"CAT_CHANNELS": "{{count}} categories"
}

View file

@ -1,9 +0,0 @@
{
"DESCRIPTION": "Become AFK (members who mention you will receive a message)",
"USAGE": "setafk [reason]",
"EXAMPLES": "setafk I'm eating =)",
"MISSING_REASON": "Please specify the reason for your AFK status!",
"SUCCESS": "You're now AFK (reason: {{reason}})",
"DELETED": "**{{username}}**, your AFK status has just been deleted!",
"IS_AFK": "**{{user}}** is currently AFK, reason:\n```{{reason}}```"
}

View file

@ -1,6 +0,0 @@
{
"DESCRIPTION": "Make your links shorter!",
"USAGE": "shorturl [url]",
"EXAMPLES": "shorturl https://google.fr",
"MISSING_URL": "Please enter a valid URL!"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Pick a random member on the server!",
"USAGE": "someone",
"EXAMPLES": "someone"
}

View file

@ -1,10 +0,0 @@
{
"DESCRIPTION": "Shows the server staff members list!",
"USAGE": "staff",
"EXAMPLES": "staff",
"TITLE": "{{guild}} staff",
"ADMINS": "Administrators",
"NO_ADMINS": "No administrators",
"MODS": "Moderators",
"NO_MODS": "No moderators"
}

View file

@ -1,17 +0,0 @@
{
"DESCRIPTION": "Shows the bot stats!",
"USAGE": "stats",
"EXAMPLES": "stats",
"COUNTS_TITLE": "• __Statistics__",
"COUNTS_CONTENT": "`Servers: {{servers}}`\n`Users: {{users}}`",
"VERSIONS_TITLE": "• __Using__",
"RAM_TITLE": "• __RAM__",
"ONLINE_TITLE": "• __Online__",
"ONLINE_CONTENT": "Online for {{time}}",
"MUSIC_TITLE": "• __Music__",
"MUSIC_CONTENT": "Playing music on `{{count}}` servers",
"CREDITS_TITLE": ":heart: • __Acknowledgements & credits__",
"CREDITS_CONTENT": "Thanks to [Icons8](https://icons8.com/) for almost all the emojis!\n__**Donators**__:\n{{donators}}\n__**Translators**__:\n{{translators}}",
"LINKS_TITLE": "• __Links__",
"MADE": "JaBa is an bot developed by @Jonny_Bro#4226!"
}

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "Send your suggestion to the defined channel!",
"USAGE": "suggest [message]",
"EXAMPLES": "suggest New channel #offtopic please",
"MISSING_CHANNEL": "No suggestion channel defined!",
"MISSING_CONTENT": "Please enter a suggestion!",
"TITLE": "Suggestion - {{user}}"
}

View file

@ -1,9 +0,0 @@
{
"DESCRIPTION": "Translate your text!",
"USAGE": "translate [language] [message]",
"EXAMPLES": "translate russian How are you ?",
"LIST_SENT": "The languages list has just been sent to you by private messages!",
"MISSING_LANGUAGE": "Please enter a language! To display the languages list, type `translate langs-list`!",
"INVALID_LANGUAGE": "The language `{{search}}` does not exist! To display the languages list, type `translate langs-list`!",
"MISSING_CONTENT": "Please enter a text to be translated!"
}

View file

@ -1,10 +0,0 @@
{
"DESCRIPTION": "Shows user information!",
"USAGE": "userinfo (@user/userID)",
"EXAMPLES": "userinfo\nuserinfo @Jonny_Bro#4226\nuserinfo 281361531411890186",
"INVALID_USER": "No user on Discord has the `{{search}}` ID!",
"NO_GAME": "Not playing",
"NO_ROLE": "No role",
"NO_NICKNAME": "No nickname",
"MORE_ROLES": "and {{count}} others roles"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"approved\" image",
"USAGE": "approved (@member)",
"EXAMPLES": "approved\napproved @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Shows the avatar of the mentionned member",
"USAGE": "avatar (@member)",
"EXAMPLES": "avatar\navatar @Jonny_Bro#4226\navatar link"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"batslap\" image",
"USAGE": "batslap (@member1) (@member2)",
"EXAMPLES": "batslap\nbatslap @Jonny_Bro#4226 @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"beautiful\" image",
"USAGE": "beautiful (@member)",
"EXAMPLES": "beautiful\nbeautiful @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"love\" image using the Nekobot API",
"USAGE": "love [@member1] (@member2)",
"EXAMPLES": "love @Jonny_Bro#4226\nlove @Jonny_Bro#4226 @Marty#0303"
}

View file

@ -1,5 +0,0 @@
z{
"DESCRIPTION": "Generates a \"dictator\" image",
"USAGE": "dictator (@member)",
"EXAMPLES": "dictator\ndictator @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"brazzers\" image",
"USAGE": "brazzers (@member)",
"EXAMPLES": "brazzers\nbrazzers @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"captcha\" image using the Nekobot API",
"USAGE": "captcha (@member)",
"EXAMPLES": "captcha\ncaptcha @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"challenger\" image",
"USAGE": "challenger (@member)",
"EXAMPLES": "challenger\nchallenger @Jonny_Bro#4226"
}

View file

@ -1,6 +0,0 @@
{
"DESCRIPTION": "Generates a \"Clyde\" message image using the Nekobot API",
"USAGE": "clyde [text]",
"EXAMPLES": "clyde Discord will close on December 11, 2002. Goodbye.",
"MISSING_TEXT": "Please specify the message text!"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"burn\" image",
"USAGE": "burn (@member)",
"EXAMPLES": "burn\nburn @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"facepalm\" image using canvas",
"USAGE": "facepalm (@member)",
"EXAMPLES": "facepalm\nfacepalm @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"fire\" image using Amethyste API",
"USAGE": "fire (@member)",
"EXAMPLES": "fire\nfire @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"jail\" image using Amethyste API",
"USAGE": "jail (@member)",
"EXAMPLES": "jail\njail @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"bed\" image",
"USAGE": "bed [@member1] (@member2)",
"EXAMPLES": "bed @Jonny_Bro#4226\nbed @Jonny_Bro#4226 @Marty#0303"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"mission\" image using Amethyste API",
"USAGE": "mission (@member)",
"EXAMPLES": "mission\nmission @Jonny_Bro#4226"
}

View file

@ -1,6 +0,0 @@
{
"DESCRIPTION": "Generates a \"phcomment\" image",
"USAGE": "phcomment (@member) [text]",
"EXAMPLES": "phcomment Hi!\nphcomment @Jonny_Bro#4226 Hi!",
"MISSING_TEXT": "Please specify the comment text!"
}

View file

@ -1,7 +0,0 @@
{
"DESCRIPTION": "Generates a QR code image from a given text",
"USAGE": "qrcode [text]",
"EXAMPLES": "qrcode Hello",
"MISSING_TEXT": "Please specify the QR code source text!",
"SUCCESS": "Here's your QRCode!"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"rip\" image using Nekobot API",
"USAGE": "rip (@member)",
"EXAMPLES": "rip\nrip @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"scary\" image using Nekobot API",
"USAGE": "scary (@member)",
"EXAMPLES": "scary\nscary @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"tobecontinued\" image using Nekobot API",
"USAGE": "tobecontinued (@member)",
"EXAMPLES": "tobecontinued\ntobecontinued @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"trash\" image",
"USAGE": "trash (@member)",
"EXAMPLES": "trash\ntrash @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"triggered\" image using Nekobot API",
"USAGE": "triggered (@member)",
"EXAMPLES": "triggered\ntriggered @Jonny_Bro#4226"
}

View file

@ -1,8 +0,0 @@
{
"DESCRIPTION": "Generates a \"tweet\" image using Nekobot API",
"USAGE": "tweet [@twitter_username] [content]",
"EXAMPLES": "tweet @ElonMusk Hello",
"MISSING_USERNAME": "You have to enter someone's twitter nickname!",
"MISSING_TEXT": "You have to specify the tweet content!",
"SUCCESS": "New tweet by {{user}}:"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"wanted\" image using Nekobot API",
"USAGE": "wanted (@member)",
"EXAMPLES": "wanted\nwanted @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"wasted\" image using Nekobot API",
"USAGE": "wasted (@member)",
"EXAMPLES": "wasted\nwasted @Jonny_Bro#4226"
}

View file

@ -1,5 +0,0 @@
{
"DESCRIPTION": "Generates a \"ytcomment\" image",
"USAGE": "ytcomment (@member) [text]",
"EXAMPLES": "ytcomment Hi!\nytcomment @Jonny_Bro#4226 Hi!"
}

View file

@ -1,28 +0,0 @@
{
"ERR_OCCURRED": "Something went wrong... Please retry again later!",
"PLEASE_WAIT": "Please wait a few seconds...",
"COMMAND_DISABLED": "This command is currently disabled!",
"CLICK_HERE": "Click here to start {{activity}} in {{channel}}",
"TIMES_UP": "Time's up! Please send the command again!",
"INVALID_YES_NO": "You must send \"yes\" or \"no\"!",
"INVALID_CHANNEL": "Please specify a valid channel!",
"INVALID_TIME": "You must enter a valid time! Available units: `s`, `m`, `h` or `d`",
"INVALID_NUMBER": "Please specify a valid number!",
"INVALID_NUMBER_RANGE": "Please specify a valid number between **{{min}}** and **{{max}}**!",
"STATS_FOOTER": "● [Dashboard]({{dashboardLink}})\n● [Docs]({{docsLink}})\n● [Invite JaBa]({{inviteLink}})\n● [Support]({{donateLink}}) (for other payment methods send DM to <@{{owner}}>)",
"BOT_USER": "This user is a bot!",
"NO_PERMS": "You must have an administration rights to perform this action!",
"NO_REASON_PROVIDED": "No reason provided",
"NO_USER_FOUND_ID": "No user on Discord has the ID `{{id}}`!",
"HELLO_SERVER": "Hello **{{username}}**, my prefix on this server is ``. Use `help` to get the list of the commands!",
"HELLO_DM": "Hello, as you are currently in direct message you don't need to add a prefix before command name.",
"GUILD_ONLY": "This command is only available on a server!",
"MISSING_BOT_PERMS": "I need the following permissions to execute this command: {{list}}",
"MISSING_MEMBER_PERMS": "You need the following permissions to execute this command: {{list}}",
"RESTRICTED_CHANNEL": "Commands are not allowed in {{channel}}!",
"EVERYONE_MENTION": "You are not allowed to mention everyone or here in the commands.",
"NSFW_COMMAND": "You must execute this command in a channel that allows NSFW!",
"OWNER_ONLY": "Only the owner of JaBa can do these commands!",
"COOLDOWNED": "You must wait **{{seconds}}** second(s) to be able to run this command again!",
"CANNOT_DM": "I don't have permission to send you private messages... Please update your privacy settings!"
}

View file

@ -1,10 +0,0 @@
{
"DESCRIPTION": "Send an announcement in the current channel!",
"USAGE": "announcement [text]",
"EXAMPLES": "announcement New staff member!",
"MISSING_TEXT": "You must enter the announcement text!",
"TOO_LONG": "Your text should be shorter than 1030 characters!",
"MENTION_PROMPT": "Would you like to add a mention to your message?\nAnswer by sending `yes` or `no`!",
"MENTION_TYPE_PROMPT": "Choose to mention `@`everyone by typing `every` or to mention `@`here by typing `here`!",
"TITLE": "📢 Announcement:"
}

Some files were not shown because too many files have changed in this diff Show more