Конные скачки и секретное повышение джекпота :)

This commit is contained in:
JonnyBro 2022-01-16 23:18:56 +05:00
parent 7ba63e372c
commit 85d3259bad
18 changed files with 181 additions and 20 deletions

View file

@ -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", {

View file

@ -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);

View file

@ -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
View 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;

View file

@ -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();

View file

@ -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": "Автомодерация отключена на данном сервере!",

View file

@ -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 @роль`, чтобы включить!*",

View file

@ -2,7 +2,7 @@
"DESCRIPTION": "Включить или отключить автоудаление команд модерации!",
"USAGE": "{{prefix}}deletemod [on/off]",
"EXAMPLES": "{{prefix}}deletemod on",
"MISSING_STATUS": "Укажите значение `on` или `off`",
"MISSING_STATUS": "Укажите значение `on` или `off`!",
"ENABLED": "Автоудаление команд модерации включено!",
"DISABLED": "Автоудаление команд модерации отключено!"
}

View file

@ -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: *Отправьте упоминание канала!*",

View file

@ -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}}**!",

View file

@ -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: *Отправьте упоминание канала!*",

View file

@ -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",

View file

@ -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}}**!",

View file

@ -7,6 +7,7 @@
"BANK": "Банк",
"WORDS": "Угадай слово",
"NUMBERS": "Угадай число",
"HORSERACE": "Конные скачки",
"T_GOT": "Пополнение",
"T_SEND": "Списание",
"T_USER_GOT": "Источник",

View 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": "Игра уже идёт!"
}

View file

@ -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}}, никто не победил!",

View file

@ -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": "🎉🎉 **РАЗДАЧА** 🎉🎉",

View file

@ -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`, чтобы увидеть обновлённые настройки!*",