mirror of
https://github.com/JonnyBro/JaBa.git
synced 2024-11-22 05:04:58 +05:00
Конные скачки и секретное повышение джекпота :)
This commit is contained in:
parent
7ba63e372c
commit
85d3259bad
18 changed files with 181 additions and 20 deletions
|
@ -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", {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
144
commands/Fun/horserace.js
Normal file
144
commands/Fun/horserace.js
Normal file
|
@ -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;
|
|
@ -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();
|
||||
|
|
|
@ -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": "Автомодерация отключена на данном сервере!",
|
||||
|
|
|
@ -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 @роль`, чтобы включить!*",
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"DESCRIPTION": "Включить или отключить автоудаление команд модерации!",
|
||||
"USAGE": "{{prefix}}deletemod [on/off]",
|
||||
"EXAMPLES": "{{prefix}}deletemod on",
|
||||
"MISSING_STATUS": "Укажите значение `on` или `off`",
|
||||
"MISSING_STATUS": "Укажите значение `on` или `off`!",
|
||||
"ENABLED": "Автоудаление команд модерации включено!",
|
||||
"DISABLED": "Автоудаление команд модерации отключено!"
|
||||
}
|
|
@ -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: *Отправьте упоминание канала!*",
|
||||
|
|
|
@ -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}}**!",
|
||||
|
|
|
@ -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: *Отправьте упоминание канала!*",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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}}**!",
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"BANK": "Банк",
|
||||
"WORDS": "Угадай слово",
|
||||
"NUMBERS": "Угадай число",
|
||||
"HORSERACE": "Конные скачки",
|
||||
"T_GOT": "Пополнение",
|
||||
"T_SEND": "Списание",
|
||||
"T_USER_GOT": "Источник",
|
||||
|
|
14
languages/ru-RU/fun/horserace.json
Normal file
14
languages/ru-RU/fun/horserace.json
Normal file
|
@ -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": "Игра уже идёт!"
|
||||
}
|
|
@ -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}}, никто не победил!",
|
||||
|
|
|
@ -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": "🎉🎉 **РАЗДАЧА** 🎉🎉",
|
||||
|
|
|
@ -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`, чтобы увидеть обновлённые настройки!*",
|
||||
|
|
Loading…
Reference in a new issue