From 85d3259bad3db1e7e9c0bf1806d7314e9c71b2ae Mon Sep 17 00:00:00 2001 From: JonnyBro Date: Sun, 16 Jan 2022 23:18:56 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BD=D0=BD=D1=8B=D0=B5=20=D1=81?= =?UTF-8?q?=D0=BA=D0=B0=D1=87=D0=BA=D0=B8=20=D0=B8=20=D1=81=D0=B5=D0=BA?= =?UTF-8?q?=D1=80=D0=B5=D1=82=D0=BD=D0=BE=D0=B5=20=D0=BF=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=B6=D0=B5=D0=BA=D0=BF?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=20:)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commands/Economy/pay.js | 2 +- commands/Economy/slots.js | 4 +- commands/Fun/findwords.js | 6 +- commands/Fun/horserace.js | 144 ++++++++++++++++++ commands/Fun/number.js | 6 +- languages/ru-RU/administration/automod.json | 2 +- languages/ru-RU/administration/autorole.json | 2 +- languages/ru-RU/administration/deletemod.json | 2 +- languages/ru-RU/administration/goodbye.json | 2 +- languages/ru-RU/administration/set.json | 2 +- languages/ru-RU/administration/welcome.json | 2 +- languages/ru-RU/economy/leaderboard.json | 2 +- languages/ru-RU/economy/marry.json | 2 +- languages/ru-RU/economy/transactions.json | 1 + languages/ru-RU/fun/horserace.json | 14 ++ languages/ru-RU/misc.json | 2 +- languages/ru-RU/moderation/giveaway.json | 4 +- languages/ru-RU/moderation/setwarns.json | 2 +- 18 files changed, 181 insertions(+), 20 deletions(-) create mode 100644 commands/Fun/horserace.js create mode 100644 languages/ru-RU/fun/horserace.json diff --git a/commands/Economy/pay.js b/commands/Economy/pay.js index 96301dc9..0afd9c9c 100644 --- a/commands/Economy/pay.js +++ b/commands/Economy/pay.js @@ -23,7 +23,7 @@ class Pay extends Command { if (member.id === message.author.id) return message.error("economy/pay:YOURSELF"); const sentAmount = args[1]; - if (!sentAmount || isNaN(sentAmount) || parseInt(sentAmount, 10) <= 0) return message.error("economy/pay:INVALID_AMOUNT", { username: member.user.tag }); + if (!sentAmount || isNaN(sentAmount) || parseInt(sentAmount, 10) <= 0) return message.error("economy/pay:INVALID_AMOUNT"); const amount = Math.ceil(parseInt(sentAmount, 10)); if (amount > data.memberData.money) return message.error("economy/pay:ENOUGH_MONEY", { diff --git a/commands/Economy/slots.js b/commands/Economy/slots.js index 418f8c78..4435f978 100644 --- a/commands/Economy/slots.js +++ b/commands/Economy/slots.js @@ -39,7 +39,7 @@ class Slots extends Command { function getCredits(number, isJackpot) { if (!isJackpot) number = number * 1.5; - else if (isJackpot) number = number * 4; + else if (isJackpot) number = number * 5; return Math.round(number); } @@ -48,7 +48,9 @@ class Slots extends Command { prefixEmoji: "loading" }); editMsg(); + const interval = setInterval(editMsg, 1000); + setTimeout(() => { clearInterval(interval); end(tmsg); diff --git a/commands/Fun/findwords.js b/commands/Fun/findwords.js index f92128ae..1fa10c19 100644 --- a/commands/Fun/findwords.js +++ b/commands/Fun/findwords.js @@ -110,7 +110,7 @@ class FindWords extends Command { credits: `**${won}** ${message.getNoun(won, message.translate("misc:NOUNS:CREDIT:1"), message.translate("misc:NOUNS:CREDIT:2"), message.translate("misc:NOUNS:CREDIT:5"))}` }); - const userdata = await this.client.findOrCreateMember({ + const memberData = await this.client.findOrCreateMember({ id: user.id, guildID: message.guild.id }); @@ -124,8 +124,8 @@ class FindWords extends Command { data.memberData.transactions.push(info); - userdata.money = userdata.money + won; - userdata.save(); + memberData.money += won; + memberData.save(); } } }); diff --git a/commands/Fun/horserace.js b/commands/Fun/horserace.js new file mode 100644 index 00000000..fa062421 --- /dev/null +++ b/commands/Fun/horserace.js @@ -0,0 +1,144 @@ +const Command = require("../../base/Command"); + +const games = {}; + +class Horserace extends Command { + constructor(client) { + super(client, { + name: "horserace", + dirname: __dirname, + enabled: false, + guildOnly: false, + aliases: ["hr"], + memberPermissions: [], + botPermissions: ["SEND_MESSAGES", "EMBED_LINKS"], + nsfw: false, + ownerOnly: false, + cooldown: 2000 + }); + } + + async run(message, args, data) { + if (!args[0]) return message.sendT("fun/horserace:MISSING_STATUS"); + const author = message.author; + + if (args[0] === "create") { + let thisGame = games[message.channel.id]; + if (thisGame !== undefined) message.sendT("fun/horserace:GAME_RUNNING"); + else { + games[message.channel.id] = { + horseSpeeds: [], + bets: [] + }; + + thisGame = games[message.channel.id]; + + const f = []; + for (let i = 0; i < 5; i++) { + const speed = Math.ceil(Math.random() * 10); + const profit = Math.floor((((8.9 / 9) * (10 - speed)) + 1.1) * 10) / 10; + thisGame.horseSpeeds.push(speed); + f.push({ + name: message.translate("fun/horserace:HORSE_NAME", { + number: i + 1 + }), + value: message.translate("fun/horserace:HORSE_VALUE", { + speed, + profit: Math.round(profit * 100) + }) + }); + } + message.channel.send({ + embeds: [{ + color: data.config.embed.color, + title: message.translate("fun/horserace:EMBED_T"), + fields: f + }] + }); + } + } else if (args[0] === "bet") { + const horse = parseFloat(args[1]); + if (horse > 5) return message.sendT("fun/horserace:HORSE_NUM"); + const amount = parseFloat(args[2]); + + if (!amount || isNaN(amount) || parseInt(amount, 10) <= 0) return message.error("economy/pay:INVALID_AMOUNT"); + if (amount > data.memberData.money) return message.error("economy/pay:ENOUGH_MONEY", { + amount: `**${amount}** ${message.getNoun(amount, message.translate("misc:NOUNS:CREDITS:1"), message.translate("misc:NOUNS:CREDITS:2"), message.translate("misc:NOUNS:CREDITS:5"))}` + }); + + games[message.channel.id].bets[author.id] = { + amount: amount, + horse: horse + }; + + data.memberData.money -= amount; + message.sendT("fun/horserace:BET", { + user: author.username, + amount: `**${amount}** ${message.getNoun(amount, message.translate("misc:NOUNS:CREDITS:1"), message.translate("misc:NOUNS:CREDITS:2"), message.translate("misc:NOUNS:CREDITS:5"))}`, + horse: horse + }); + + } else if (args[0] === "go") { + const thisGame = games[message.channel.id]; + const horsePositions = [0, 0, 0, 0, 0]; + + // eslint-disable-next-line no-constant-condition + while (true) { + for (let i = 0; i < 5; i++) { + if (thisGame.horseSpeeds[i] >= Math.random() * 15) { + horsePositions[i] += 1; + if (horsePositions[i] == 3) { + const winnings = []; + + const profit = Math.floor((((8.9 / 9) * (10 - thisGame.horseSpeeds[i])) + 1.1) * 10) / 10; + + for (let j = 0; j < Object.keys(thisGame.bets).length; j++) { + if (Object.values(thisGame.bets)[j].horse === i + 1) { + winnings.push([Object.keys(thisGame.bets)[j], Object.values(thisGame.bets)[j].amount * profit]); + } + } + + if (winnings.length === 0) { + message.sendT("fun/horserace:NO_WINNERS", { + horse: i + 1 + }); + } else { + let winners = ""; + for (let j = 0; j < winnings.length; j++) { + winners += `\n<@${winnings[j][0]}> выиграл **${winnings[j][1]}** ${message.getNoun(winnings[j][1], message.translate("misc:NOUNS:CREDITS:1"), message.translate("misc:NOUNS:CREDITS:2"), message.translate("misc:NOUNS:CREDITS:5"))}!`; + + const memberData = await this.client.findOrCreateMember({ + id: winnings[j][0], + guildID: message.guild.id + }); + + const info = { + user: message.translate("economy/transactions:HORSERACE"), + amount: winnings[j][1], + date: Date.now(), + type: "got" + }; + + data.memberData.transactions.push(info); + + memberData.money += winnings[j][1]; + memberData.save(); + } + + message.sendT("fun/horserace:WINNERS", { + horse: i + 1, + winners + }); + } + + delete games[message.channel.id]; + return; + } + } + } + } + } + } +} + +module.exports = Horserace; \ No newline at end of file diff --git a/commands/Fun/number.js b/commands/Fun/number.js index 5bc5423b..68cde99d 100644 --- a/commands/Fun/number.js +++ b/commands/Fun/number.js @@ -63,7 +63,7 @@ class Number extends Command { credits: `**${won}** ${message.getNoun(won, message.translate("misc:NOUNS:CREDIT:1"), message.translate("misc:NOUNS:CREDIT:2"), message.translate("misc:NOUNS:CREDIT:5"))}` }); - const userdata = await this.client.findOrCreateMember({ + const memberData = await this.client.findOrCreateMember({ id: msg.author.id, guildID: message.guild.id }); @@ -77,8 +77,8 @@ class Number extends Command { data.memberData.transactions.push(info); - userdata.money = userdata.money + won; - userdata.save(); + memberData.money += won; + memberData.save(); } collector.stop(); diff --git a/languages/ru-RU/administration/automod.json b/languages/ru-RU/administration/automod.json index fedb925a..c44b64d3 100644 --- a/languages/ru-RU/administration/automod.json +++ b/languages/ru-RU/administration/automod.json @@ -2,7 +2,7 @@ "DESCRIPTION": "Включить или отключить автоудаление Discord приглашений", "USAGE": "{{prefix}}automod [on/off] (#канал)", "EXAMPLES": "{{prefix}}automod on\n{{prefix}}automod off #general\n{{prefix}}automod off", - "MISSING_STATUS": "Укажите значение `on` или `off`", + "MISSING_STATUS": "Укажите значение `on` или `off`!", "ENABLED": "**Discord приглашения будут автоматически удаляться!**\n\n:arrow_right_hook: *Используйте `{{prefix}}automod off #channel`, чтобы игнорировать канал!*", "DISABLED_CHANNEL": "Автомодерация не будет выполняться в {{channel}}!", "DISABLED": "Автомодерация отключена на данном сервере!", diff --git a/languages/ru-RU/administration/autorole.json b/languages/ru-RU/administration/autorole.json index c2783587..b7a3470d 100644 --- a/languages/ru-RU/administration/autorole.json +++ b/languages/ru-RU/administration/autorole.json @@ -2,7 +2,7 @@ "DESCRIPTION": "Включить или отключить автоназначение роли при входе на сервер!", "USAGE": "{{prefix}}autorole [on/off] (@роль)", "EXAMPLES": "{{prefix}}autorole on @новенький\n{{prefix}}autorole off", - "MISSING_STATUS": "Укажите значение `on` или `off`", + "MISSING_STATUS": "Укажите значение `on` или `off`!", "MISSING_ROLE": "Укажите роль!", "SUCCESS_ENABLED": "Автоназначение роли включено! Новые пользователи будут автоматически получать **{{roleName}}** при входе на сервер.", "ALREADY_DISABLED": "**Автоназначение роли уже отключено.**\n\n:arrow_right_hook: *Используйте `{{prefix}}autorole on @роль`, чтобы включить!*", diff --git a/languages/ru-RU/administration/deletemod.json b/languages/ru-RU/administration/deletemod.json index 1cef5987..c3c941f9 100644 --- a/languages/ru-RU/administration/deletemod.json +++ b/languages/ru-RU/administration/deletemod.json @@ -2,7 +2,7 @@ "DESCRIPTION": "Включить или отключить автоудаление команд модерации!", "USAGE": "{{prefix}}deletemod [on/off]", "EXAMPLES": "{{prefix}}deletemod on", - "MISSING_STATUS": "Укажите значение `on` или `off`", + "MISSING_STATUS": "Укажите значение `on` или `off`!", "ENABLED": "Автоудаление команд модерации включено!", "DISABLED": "Автоудаление команд модерации отключено!" } \ No newline at end of file diff --git a/languages/ru-RU/administration/goodbye.json b/languages/ru-RU/administration/goodbye.json index 08806e16..a774ff3b 100644 --- a/languages/ru-RU/administration/goodbye.json +++ b/languages/ru-RU/administration/goodbye.json @@ -2,7 +2,7 @@ "DESCRIPTION": "Включить или отключить сообщения при выходе пользователя с сервера!", "USAGE": "{{prefix}}goodbye (edit/off/test)", "EXAMPLES": "{{prefix}}goodbye\n{{prefix}}goodbye test", - "MISSING_STATUS": "Выберите действие: `edit`, `off` или `test`", + "MISSING_STATUS": "Выберите действие: `edit`, `off` или `test`!", "DEFAULT_MESSAGE": "Пока, {user}! Нас теперь {membercount} без тебя :'(", "TEST_SUCCESS": "Тест выполнен!", "FORM_1": "**В какой канал будут отправляться сообщения?**\n\n:arrow_right_hook: *Отправьте упоминание канала!*", diff --git a/languages/ru-RU/administration/set.json b/languages/ru-RU/administration/set.json index de54adab..6f37c9ae 100644 --- a/languages/ru-RU/administration/set.json +++ b/languages/ru-RU/administration/set.json @@ -3,7 +3,7 @@ "USAGE": "{{prefix}}set [level/xp/credits/bank] [@пользователь] [значение]", "EXAMPLES": "{{prefix}}set level @Jonny_Bro#4226 10", "INVALID_MEMBER": "Вы должны упомянуть пользователя!", - "NO_STATUS": "Выберите параметр: `level`, `xp`, `credits` или `bank`", + "NO_STATUS": "Выберите значение: `level`, `xp`, `credits` или `bank`!", "BOT_USER": "Вы не можете изменить статистику бота!", "INVALID_AMOUNT": "Укажите новое значение!", "SUCCESS_LEVEL": "Уровень пользователя **{{username}}** изменён на **{{amount}}**!", diff --git a/languages/ru-RU/administration/welcome.json b/languages/ru-RU/administration/welcome.json index 5790075c..02b7f85f 100644 --- a/languages/ru-RU/administration/welcome.json +++ b/languages/ru-RU/administration/welcome.json @@ -2,7 +2,7 @@ "DESCRIPTION": "Включить или отключить сообщения при входе пользователя на сервер!", "USAGE": "{{prefix}}welcome (edit/off/test)", "EXAMPLES": "{{prefix}}welcome\n{{prefix}}welcome test", - "MISSING_STATUS": "Выберите действие: `edit`, `off` или `test`", + "MISSING_STATUS": "Выберите действие: `edit`, `off` или `test`!", "DEFAULT_MESSAGE": "Добро пожаловать на сервер {server}, {user}, теперь нас {membercount}! Ваш аккаунт был создан {createdat}.", "TEST_SUCCESS": "Тест выполнен!", "FORM_1": "**В какой канал будут отправляться сообщения?**\n\n:arrow_right_hook: *Отправьте упоминание канала!*", diff --git a/languages/ru-RU/economy/leaderboard.json b/languages/ru-RU/economy/leaderboard.json index 5fe644cd..319c367c 100644 --- a/languages/ru-RU/economy/leaderboard.json +++ b/languages/ru-RU/economy/leaderboard.json @@ -2,7 +2,7 @@ "DESCRIPTION": "Показать таблице лидеров по кредитам, уровню или очкам репутации!", "USAGE": "{{prefix}}leaderboard [rep/level/credits]", "EXAMPLES": "{{prefix}}leaderboard credits\n{{prefix}}leaderboard level", - "MISSING_TYPE": "Выберите таблицу `credits`, `level` или `rep`", + "MISSING_TYPE": "Выберите таблицу: `credits`, `level` или `rep`!", "MOBILE": ":confused: Я заметил, что вы онлайн с телефона... Таблица лидеров может отображаться некорректно на маленьких экранах. Попробуйте позже с другого устройства!", "TABLE": "Таблица лидеров {{name}}", "TOP": "Топ 20", diff --git a/languages/ru-RU/economy/marry.json b/languages/ru-RU/economy/marry.json index 4f913703..d277cb32 100644 --- a/languages/ru-RU/economy/marry.json +++ b/languages/ru-RU/economy/marry.json @@ -3,7 +3,7 @@ "USAGE": "{{prefix}}marry [@пользователь]", "EXAMPLES": "{{prefix}}marry @Jonny_Bro#4226", "INVALID_MEMBER": "Вы должны упомянуть пользователя!", - "ALREADY_MARRIED": "Вы уже состоите в браке! Вы можете развестить с помощью команды `{{prefix}}divorce`", + "ALREADY_MARRIED": "Вы уже состоите в браке! Вы можете развестить с помощью команды `{{prefix}}divorce`.", "ALREADY_MARRIED_USER": "Место занято! **{{username}}** уже состоит в браке!", "YOURSELF": "Вы не можете жениться на себе!", "REQUEST_AUTHOR_TO_AMEMBER": "Вы уже отправили предложение **{{username}}**!", diff --git a/languages/ru-RU/economy/transactions.json b/languages/ru-RU/economy/transactions.json index d77186cd..8686e852 100644 --- a/languages/ru-RU/economy/transactions.json +++ b/languages/ru-RU/economy/transactions.json @@ -7,6 +7,7 @@ "BANK": "Банк", "WORDS": "Угадай слово", "NUMBERS": "Угадай число", + "HORSERACE": "Конные скачки", "T_GOT": "Пополнение", "T_SEND": "Списание", "T_USER_GOT": "Источник", diff --git a/languages/ru-RU/fun/horserace.json b/languages/ru-RU/fun/horserace.json new file mode 100644 index 00000000..b5ce712d --- /dev/null +++ b/languages/ru-RU/fun/horserace.json @@ -0,0 +1,14 @@ +{ + "DESCRIPTION": "Конные скачки!", + "USAGE": "{{prefix}}horserace [create/bet/go]", + "EXAMPLES": "{{prefix}}horserace create\n{{prefix}}horserace bet 3 100", + "MISSING_STATUS": "Выберите параметр: `create`, `bet` или `go`!", + "HORSE_NUM": "На скачках всего 5 лошадей!", + "EMBED_T": "Конные скачки", + "HORSE_NAME": "Лошадь {{number}}", + "HORSE_VALUE": "Скорость - {{speed}}\nПрибыль - {{profit}}%", + "BET": "**{{user}}** поставил {{amount}} на лошадь **{{horse}}**!", + "NO_WINNERS": "Победила лошадь {{horse}}. Никто не выиграл кредиты!", + "WINNERS": "Победила лошадь {{horse}}. {{winners}}!", + "GAME_RUNNING": "Игра уже идёт!" +} \ No newline at end of file diff --git a/languages/ru-RU/misc.json b/languages/ru-RU/misc.json index 230867a6..4816f3e7 100644 --- a/languages/ru-RU/misc.json +++ b/languages/ru-RU/misc.json @@ -6,7 +6,7 @@ "TIMES_UP": "Время вышло! Используйте команду снова!", "INVALID_YES_NO": "Отправьте `да` или `нет` (регистр не важен)!", "INVALID_CHANNEL": "Укажите существующий канал!", - "INVALID_TIME": "Укажите действительное время! Доступные единицы: `s`, `m`, `h` или `d`", + "INVALID_TIME": "Укажите действительное время! Доступные единицы: `s`, `m`, `h` или `d`.", "INVALID_NUMBER": "Укажите число!", "INVALID_NUMBER_RANGE": "Укажите число от **{{min}}** до **{{max}}**!", "FORCE_STOP": "Игра принудительно окончена {{user}}, никто не победил!", diff --git a/languages/ru-RU/moderation/giveaway.json b/languages/ru-RU/moderation/giveaway.json index 4e4b7114..6d4d5a39 100644 --- a/languages/ru-RU/moderation/giveaway.json +++ b/languages/ru-RU/moderation/giveaway.json @@ -5,8 +5,8 @@ "MISSING_STATUS": "Выберите действие: `create`, `reroll`, `end` или `delete`!", "INVALID_CREATE": "Какой-то из аргументов указан неверно, попробуйте снова!", "MISSING_ID": "Укажите ID сообщения раздачи!", - "NOT_FOUND": "Раздач с ID `{{messageID}}` не найдено", - "NOT_FOUND_ENDED": "**Оконченных** раздач с ID `{{messageID}} не найдено`", + "NOT_FOUND": "Раздач с ID `{{messageID}}` не найдено!", + "NOT_FOUND_ENDED": "**Оконченных** раздач с ID `{{messageID}} не найдено!`!", "MAX_DURATION": "Максимальная длительность раздачи - 15 дней.", "MAX_COUNT": "Одновременно можно создать только 4 раздачи.", "TITLE": "🎉🎉 **РАЗДАЧА** 🎉🎉", diff --git a/languages/ru-RU/moderation/setwarns.json b/languages/ru-RU/moderation/setwarns.json index f03cf2e8..f5dcc14b 100644 --- a/languages/ru-RU/moderation/setwarns.json +++ b/languages/ru-RU/moderation/setwarns.json @@ -2,7 +2,7 @@ "DESCRIPTION": "Настроить наказание которое пользователь будет получать после данного кол-ва предупреждений!", "USAGE": "{{prefix}}setwarns [kick/ban] [число/reset]", "EXAMPLES": "{{prefix}}setwarns kick 5\n{{prefix}}setwarns ban 10\n{{prefix}}setwarns ban reset", - "MISSING_TYPE": "Выберите действие: `kick` или `ban`", + "MISSING_TYPE": "Выберите действие: `kick` или `ban`!", "SUCCESS_KICK": "`{{count}}` приведут к кику!\n\n:arrow_right_hook: *Используйте `{{prefix}}configuration`, чтобы увидеть обновлённые настройки!*", "SUCCESS_BAN": "`{{count}}` приведут к бану!\n\n:arrow_right_hook: *Используйте `{{prefix}}configuration`, чтобы увидеть обновлённые настройки!*", "SUCCESS_KICK_RESET": "**Автокик пользователей отключён!**\n\n:arrow_right_hook: *Используйте `{{prefix}}configuration`, чтобы увидеть обновлённые настройки!*",