From 5b2a2b3ff94abf357aaa46b7810f28d45c80575f Mon Sep 17 00:00:00 2001 From: Degradin Date: Sat, 23 Sep 2023 22:09:12 +0300 Subject: [PATCH] v0.0.59 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Система слотов Промокоды --- index.js | 273 +++++++++++++++++++++++++++++++++----- json/slots.json | 67 ++++++++++ json/weaponshop.json | 34 ++--- models/promocode.model.js | 12 ++ models/user.model.js | 4 +- presets/houses.json | 2 +- 6 files changed, 342 insertions(+), 50 deletions(-) create mode 100644 json/slots.json create mode 100644 models/promocode.model.js diff --git a/index.js b/index.js index 7396230..f7b0bf7 100644 --- a/index.js +++ b/index.js @@ -7,12 +7,14 @@ const shortid = require('shortid'); const fs = require('fs') const bot = new Telegraf(process.env.BOT_TOKEN) const weaponshop = require('./json/weaponshop.json') +const slots = require('./json/slots.json') const houses = require('./presets/houses.json') const cars = require('./presets/cars.json') const phones = require('./presets/mobiles.json') const weapons = require('./presets/weapons.json') const equipment = require('./presets/equipment.json') const sequelize = require('./db'); +const { Op } = require('sequelize'); const UserModel = require('./models/user.model'); const WorldModel = require('./models/world.model'); const JobModel = require('./models/job.model'); @@ -20,9 +22,10 @@ const PropertyModel = require('./models/property.model'); const BusinessModel = require('./models/business.model'); const ReportModel = require('./models/report.model'); const BlockModel = require('./models/block.model'); +const PromocodeModel = require('./models/promocode.model'); const whitelist = [275416286, 1797342681] const adminList = [`275416286`] -const expToUp = [0, 10, 15, 22, 35, 50, 70, 85, 100, 125, 200] +const expToUp = [0, 10, 20, 40, 60, 80, 120, 150, 200, 500, 1000] const start = async () => { try { @@ -62,10 +65,10 @@ bot.telegram.setMyCommands([{ bot.use(async (ctx, next) => { let id = ctx.from.id let username = ctx.from.username - if(ctx.update.message.text){ - console.log(username + `: ` + ctx.update.message.text) - }else{ - console.log(username + `: ` + ctx) + try { + console.log(getCurrentTime() + `: ` + username + `: ` + ctx.update.message.text) + } catch (e) { + console.log(getCurrentTime() + `: ${username}: Не удалось перехватить контекст.`) } let user = await UserModel.findByPk(id); let block = await BlockModel.findByPk(id); @@ -75,8 +78,12 @@ bot.use(async (ctx, next) => { await UserModel.create({ telegram_id: id, username: username, + name: ctx.from.first_name }) - } else {} + } else { + user.name = ctx.from.first_name + user.save() + } if (property === null) { await PropertyModel.create({ telegram_id: id @@ -115,7 +122,7 @@ bot.command('start', async (ctx) => { return await ctx.reply('Главное меню', Markup .keyboard([ ['😎 Профиль', '💳 Баланс'], // Row1 with 2 buttons - ['🗄️ Работать', '🌐 Организация', '🎁 Бонус'], // Row2 with 2 buttons + ['🗄️ Работать', '🌐 Организация', '🎁 Бонус', '🏯 Казино'], // Row2 with 2 buttons ['📢 Вакансии', '🔵 Имущество', '📞 Пригласить'] // Row3 with 3 buttons ]) .oneTime() @@ -127,7 +134,7 @@ bot.hears('▶️ Меню', async (ctx) => { return await ctx.reply('Main Menu', Markup .keyboard([ ['😎 Профиль', '💳 Баланс'], // Row1 with 2 buttons - ['🗄️ Работать', '🌐 Организация', '🎁 Бонус'], // Row2 with 2 buttons + ['🗄️ Работать', '🌐 Организация', '🎁 Бонус', '🏯 Казино'], // Row2 with 2 buttons ['📢 Вакансии', '🔵 Имущество', '📞 Пригласить'] // Row3 with 3 buttons ]) .oneTime() @@ -159,6 +166,31 @@ bot.hears('😎 Профиль', async (ctx) => { }); +bot.command('getprofile', async (ctx) => { + if(!ctx.message.reply_to_message) return await ctx.reply(`Только на пересланное сообщение.`) + let id = ctx.message.reply_to_message.from.id + let user = await UserModel.findByPk(id); + let property = await PropertyModel.findByPk(id); + return ctx.reply(` + 👤${user.username} ${adminList.includes(user.telegram_id)? " ✅" : ""} + 🆔: ${ctx.from.id} + + 📶 Уровень: ${user.level} | ${user.exp} / ${expToUp[user.level]} + ⏩ Повышается за различные действия. + + Баланс + ¤${user.money} + + Имущество + Жилье: ${property.house == 0 ? "Бездомный" : property.house.name} + Автомобиль: ${property.car == 0 ? "Пешком" : property.car.name} + Телефон: ${property.mobile == 0 ? "Нет" : property.mobile.name} + Оружие: ${property.weapon == 0 ? "Безоружный" : property.weapon.name} + Экипировка: ${property.equipment == 0 ? "Нет" : property.equipment.name} + `); + +}); + bot.hears('💳 Баланс', async (ctx) => { let user = await UserModel.findByPk(ctx.from.id); return ctx.reply(` @@ -289,7 +321,6 @@ bot.hears('📞 Пригласить', async (ctx) => { }) bot.hears('📢 Вакансии', async (ctx) => { - let user = await UserModel.findByPk(ctx.from.id); return await ctx.reply('Список работы', Markup .keyboard([ ['Дворник', 'Промоутер'], // Row1 with 2 buttons @@ -302,6 +333,17 @@ bot.hears('📢 Вакансии', async (ctx) => { ) }) +bot.hears('🏯 Казино', async (ctx) => { + return await ctx.reply('Добро пожаловать в казино "杜明"\n', Markup + .keyboard([ + ['🎰 Слоты'], + ['▶️ Меню'] + ]) + .oneTime() + .resize() + ) +}) + bot.hears('Дворник', async (ctx) => { let user = await UserModel.findByPk(ctx.from.id); let job = await JobModel.findByPk(1); @@ -404,7 +446,7 @@ bot.hears('🗄️ Работать', async (ctx) => { let job = await JobModel.findByPk(user.job); let world = await WorldModel.findByPk(1) let timer = user.jobtime - let cooldown = setCooldown(user, 1800, timer) + let cooldown = setCooldown(user, 3600, timer) if (user.jobtime > cooldown.currentTime) return ctx.reply(`📛 Работать можно будет через ${cooldown.timeLeftInMinutes} минут(у/ы)`); if (user.job == 0) { return await ctx.reply(`Вы безработный.`) @@ -595,6 +637,11 @@ bot.hears('Топ', async (ctx) => { let topPlayer = await UserModel.findAll({ attributes: ['username', [sequelize.fn('sum', sequelize.col('money')), 'money']], group: ['username'], + where: { + telegram_id: { + [Op.ne]: 275416286 // игнорировать игрока с telegram_id 275416286 + } + }, order: [ [sequelize.literal('money'), 'DESC'] ], @@ -610,16 +657,16 @@ bot.hears('Топ', async (ctx) => { } else { return await ctx.reply(` Рейтинг игроков: - 1. ${topPlayer[0].username} - 2. ${topPlayer[1].username} - 3. ${topPlayer[2].username} - 4. ${topPlayer[3].username} - 5. ${topPlayer[4].username} - 6. ${topPlayer[5].username} - 7. ${topPlayer[6] ? topPlayer[6].username : `Пока никого`} - 8. ${topPlayer[7] ? topPlayer[7].username : `Пока никого`} - 9. ${topPlayer[8] ? topPlayer[8].username : `Пока никого`} - 10. ${topPlayer[9] ? topPlayer[9].username : `Пока никого`} + 1. ${topPlayer[0].username} [¤${spaces(topPlayer[0].money)}] + 2. ${topPlayer[1].username} [¤${spaces(topPlayer[1].money)}] + 3. ${topPlayer[2].username} [¤${spaces(topPlayer[2].money)}] + 4. ${topPlayer[3].username} [¤${spaces(topPlayer[3].money)}] + 5. ${topPlayer[4].username} [¤${spaces(topPlayer[4].money)}] + 6. ${topPlayer[5].username} [¤${spaces(topPlayer[5].money)}] + 7. ${topPlayer[6] ? topPlayer[6].username + `[¤${spaces(topPlayer[6].money)}]` : `Пока никого`} + 8. ${topPlayer[7] ? topPlayer[7].username + `[¤${spaces(topPlayer[7].money)}]` : `Пока никого`} + 9. ${topPlayer[8] ? topPlayer[8].username + `[¤${spaces(topPlayer[8].money)}]` : `Пока никого`} + 10. ${topPlayer[9] ? topPlayer[9].username + `[¤${spaces(topPlayer[9].money)}]` : `Пока никого`} `) } @@ -678,6 +725,7 @@ bot.command('buy', async (ctx) => { if (!Number(ctx.args[2])) return ctx.reply(`Неверно указан параметр.`) if (ctx.args[1] == "house") { if (user.money < houses[ctx.args[2]].price) return await ctx.reply(`У вас недостаточно средств!`) + if (property.house.name) return await ctx.reply(`У вас уже есть дом.`) user.money -= houses[ctx.args[2]].price world.balance += houses[ctx.args[2]].price property.house = houses[ctx.args[2]] @@ -742,17 +790,18 @@ bot.hears('🌐 Организация', async (ctx) => { owner: user.business.id } }) - return await ctx.reply(`Организация\n${business.name}\nБаланс: ¤${business.balance}\nСырье: ${business.materials}\nРабочих: ${business.users.length}`, Markup.keyboard([ + return await ctx.replyWithMarkdown(`🏭 Организация\n_${business.name}_\n💹 Баланс: ¤${business.balance}\n🧰 Сырье: ${business.materials}\n👥 Рабочих: ${business.users.length}`, Markup.keyboard([ ['📶 Отработка'], - ['⬅️ Покинуть', '▶️ Меню'] // Row3 with 3 buttons + ['⬅️ Покинуть'], + ['🌐 Организация', '▶️ Меню'] // Row3 with 3 buttons ]) .oneTime() .resize()) } if (business.owner == ctx.from.id){ - return await ctx.reply(`Ваша организация\n${business.name}\nБаланс: ¤${business.balance}\nСырье: ${business.materials} (Для закупки: [/materials Кол-во])\nРабочих: ${business.users.length} (Для приглашения: [/invite ID])\nОтработок: ${business.checks}`, Markup.keyboard([ + return await ctx.replyWithMarkdown(`🏭 Ваша организация\n_${business.name}_\n💹 Баланс: ¤${business.balance}\n🧰 Сырье: ${business.materials} (Для закупки: [/materials Кол-во])\n👥 Рабочих: ${business.users.length} (Для приглашения: [/invite [Nick]])\n🔨 Отработок: ${business.checks}`, Markup.keyboard([ ['📶 Отработка'], - ['💸 Payday', '▶️ Меню'] + ['💸 Payday', '🌐 Организация', '▶️ Меню'] ]) .oneTime() .resize()) @@ -763,14 +812,15 @@ bot.hears('📶 Отработка', async (ctx) => { let user = await UserModel.findByPk(ctx.from.id) let business = await BusinessModel.findOne({ where: { - owner: ctx.from.id + owner: user.business.id.toString() } }) if (user.business == null) return await ctx.reply(`Вы не работаете в организации.`) let timer = user.worktime - let cooldown = setCooldown(user, 1800, timer) + let cooldown = setCooldown(user, 3600, timer) if (user.worktime > cooldown.currentTime) return ctx.reply(`📛 Работа в организации будет доступна через ${cooldown.timeLeftInMinutes} минут(у/ы)`); if (business.materials < 10) return ctx.reply(`📛 В организации недостаточно материалов для отработки.`); + user.worktime = cooldown.endTime user.business = { id: user.business.id, checks: user.business.checks + 1, @@ -798,13 +848,13 @@ bot.hears('💸 Payday', async (ctx) => { let percentErrorText = `` let profit = 0 let piece = 0 - let moneyList = rand(500, 2000) + let moneyList = rand(500, 5000) for (i = 0; i < business.users.length; i++) { // Summary percent user = await UserModel.findByPk(business.users[i]) percentSum += Number(user.business.percent) - percentErrorText += `${user.username} ${user.business.percent}% [для изменения введите /percent ${user.telegram_id} проценты]\n` + percentErrorText += `${user.username} ${user.business.percent}% [для изменения введите /percent ${user.username} [проценты]]\n` } - if (percentSum > 100) return await ctx.reply(`Общий процент всех сотрудников превышает 100%\nПроцент организации: ${business.percent}%\n${percentErrorText}`) + if (percentSum > 100) return await ctx.reply(`Общий процент всех сотрудников превышает 100%\nОстаток процентов перенесется в баланс организации.\n${percentErrorText}`) for (i = 0; i < business.users.length; i++) { // Общая внесенная сумма всеми участниками user = await UserModel.findByPk(business.users[i]) profit += user.business.checks * moneyList @@ -825,6 +875,7 @@ bot.hears('💸 Payday', async (ctx) => { giveExp(user, business.checks) user.save() text += `${user.username} получает ¤${piece}\n` + await bot.telegram.sendMessage(user.telegram_id, `Директор организации сформировал выплаты.\n На ваш баланс поступило: ${spaces(piece)}`) } if (profitCheck > 0) { business.balance += profitCheck @@ -832,6 +883,7 @@ bot.hears('💸 Payday', async (ctx) => { } business.checks = 0 business.save() + console.log(`Payday: ${business.name}\n${text}`) return await ctx.reply(text) }) @@ -870,7 +922,7 @@ bot.command('percent', async (ctx) => { if (!ctx.args[1] || !ctx.args[2]) return ctx.reply(`Не указан аргумент.`) if (!Number(ctx.args[2])) return ctx.reply(`Процент должен быть числом от 1 до 100.`) if (ctx.args[2] < 1 || ctx.args[2] > 100) return ctx.reply(`Минимальный процент 1 | Максимальный процент 100.`) - ctx.args[1] = ctx.args[1].slice(1) + ctx.args[1] = ctx.args[1] console.log(ctx.args) let change = await UserModel.findOne({ where: { @@ -928,7 +980,7 @@ bot.command('business', async (ctx) => { bot.command('invite', async (ctx) => { ctx.args = ctx.update.message.text.split(' ') - if (!ctx.args[1]) return ctx.reply(`/invite [ID]`) + if (!ctx.args[1]) return ctx.reply(`/invite [Nick]`) let user = await UserModel.findByPk(ctx.from.id) if (user.business.id == 0) return await ctx.reply(`У вас нет организации в которую можно пригласить игрока.`) let invited = await UserModel.findOne({ @@ -969,6 +1021,88 @@ bot.command('report', async (ctx) => { return await ctx.reply(`Обращение #${report.id}[${report.uid}] создано.`) }) +bot.hears('🎰 Слоты', async (ctx) => { + let user = await UserModel.findByPk(ctx.from.id) + ctx.args = ctx.update.message.text.split(' ') + await ctx.reply('Комбинации слотов:\n7️⃣7️⃣7️⃣ - x25\n🍋🍋🍋 - x20\n🍇🍇🍇 - x15\n🔤🔤🔤 - x10', Markup + .inlineKeyboard([ + [{ + text: `1000`, + callback_data: `slots1000` + }, { + text: `5000`, + callback_data: `slots5000` + }, { + text: `25000`, + callback_data: `slots25000` + }, { + text: `50000`, + callback_data: `slots50000` + }, { + text: `100000`, + callback_data: `slots100000` + }] + ]).oneTime()) +}) + +bot.action(/slots(1000|5000|25000|50000|100000)/, async (ctx) => { + let data = ctx.update.callback_query.data; + let bet = 1000 + switch(data){ + case `slots1000`: + bet = 1000 + break; + case `slots5000`: + bet = 5000 + break; + case `slots25000`: + bet = 25000 + break; + case `slots50000`: + bet = 50000 + break; + case `slots100000`: + bet = 100000 + break; + } + let user = await UserModel.findByPk(ctx.from.id) + let timer = user.slottime + let cooldown = setCooldown(user, 10, timer) + if (user.slottime > cooldown.currentTime) return ctx.reply(`📛 Слоты будут доступны через пару секунд`); + if (user.money < bet) return ctx.reply(`Недостаточно средств.`) + user.slottime = cooldown.endTime + let world = await WorldModel.findByPk(1) + let result = await ctx.replyWithDice({emoji: `🎰`}) + let slot = slots[result.dice.value] + let win = getSlot(result) + console.log(user.username + `: Win: x` + win) + user.money -= bet + world.balance += bet + if(win > 4){ + user.world -= bet*win + user.money += bet*win + user.save() + world.save() + return setTimeout(() => { + ctx.reply(`Вы выиграли ${bet*win}`) + }, 1700); + } + if(win > 0 && win <= 4){ + await giveExp(user, win*2) + return setTimeout(() => { + ctx.reply(`Вы выиграли ${win*2} опыта.`) + }, 1700); + } + if(win == 0){ + return setTimeout(() => { + world.save() + user.save() + ctx.reply(`Вы ничего не выиграли.`) + }, 1700); + } + +}) + bot.hears('Помощь', async (ctx) => { return await ctx.reply(`https://telegra.ph/CampFireGameBot-09-19`) }) @@ -977,6 +1111,7 @@ bot.on('callback_query', async ctx => { const data = ctx.update.callback_query.data; let user = await UserModel.findByPk(ctx.update.callback_query.from.id) if (data != 0) { + if(user.business.id == 0){ let business = await BusinessModel.findOne({ where: { owner: data @@ -991,11 +1126,32 @@ bot.on('callback_query', async ctx => { business.save() user.save() await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Приглашение принято.`) + } + await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Вы уже в организации.`) } else { await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Приглашение отклонено.`) } }) +bot.command('promocode', async (ctx) => { + let user = await UserModel.findByPk(ctx.from.id) + ctx.args = ctx.update.message.text.split(' ') + if (!ctx.args[1]) return ctx.reply(`/promocode [Code]`) + let promocode = await PromocodeModel.findOne({ + where: { + code: ctx.args[1] + } + }) + if(promocode === null) return await ctx.reply(`Нет такого кода.`) + if(promocode.users.length-1 >= promocode.activations && promocode.users != null) return await ctx.reply(`Промокод уже активировали максимальное количество раз.`) + if(promocode.users.includes(ctx.from.id)) return await ctx.reply(`Вы уже активировали этот промокод.`) + promocode.users = sequelize.fn('array_append', sequelize.col('users'), ctx.from.id.toString()); + user.money += promocode.money + user.save() + promocode.save() + await bot.telegram.sendMessage(adminList[0], `${user.username} активировал промокод.`) + return await ctx.reply(`Вы активировали промокод.`) +}) /////////////////////////////////////Admin Commands////////////////////////////////////////////////// @@ -1019,7 +1175,9 @@ bot.command('answer', async (ctx) => { bot.command('fastblock', async (ctx) => { let user = await UserModel.findByPk(ctx.from.id) + if(!ctx.message.reply_to_message) return await ctx.reply(`Только на пересланное сообщение.`) let blocked = ctx.message.reply_to_message.from.id + if(!adminList.includes(user.telegram_id)) return await ctx.reply(`Admin Only.`) await BlockModel.create({ telegram_id: blocked, isBlocked: true, @@ -1030,6 +1188,26 @@ bot.command('fastblock', async (ctx) => { return await ctx.reply(`Пользователь заблокирован.`) }) +bot.command('createpromocode', async (ctx) => { + let user = await UserModel.findByPk(ctx.from.id) + if(!adminList.includes(user.telegram_id.toString())) return await ctx.reply(`Admin Only.`) + ctx.args = ctx.update.message.text.split(' ') + if (!ctx.args[1] || !ctx.args[2] || !ctx.args[3]) return ctx.reply(`/createpromo [activations] [money] [code]`) + let promocode = await PromocodeModel.findOne({ + where: { + code: ctx.args[1] + } + }) + if(promocode === null){ + await PromocodeModel.create({ + code: ctx.args[3], + activations: ctx.args[1], + money: ctx.args[2] + }) + return await ctx.reply(`Создан промокод ${ctx.args[3]}`) +} +}) + ///////////////////////////////////////Functions////////////////////////////////////////////////////// function rand(min, max) { @@ -1045,6 +1223,39 @@ Array.prototype.random = function() { return this[Math.floor(this.length * Math.random())]; } +function getCurrentTime() { + const now = new Date(); + const year = now.getFullYear(); + const month = now.getMonth() < 9 ? `0${now.getMonth() + 1}` : now.getMonth() + 1; + const day = now.getDate() < 10 ? `0${now.getDate()}` : now.getDate(); + const hours = now.getHours() < 10 ? `0${now.getHours()}` : now.getHours(); + const minutes = now.getMinutes() < 10 ? `0${now.getMinutes()}` : now.getMinutes(); + const seconds = now.getSeconds() < 10 ? `0${now.getSeconds()}` : now.getSeconds(); + return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`; +} + +function getSlot(result) { + switch(result.dice.value){ + case 1: + return 10 + case 22: + return 15 + case 43: + return 20 + case 64: + return 25 + case 17: case 33: case 49: + return 1 + case 6: case 38: case 54: + return 2 + case 11: case 27: case 59: + return 3 + case 16: case 32: case 48: + return 4 + default: + return 0 +}} + function setCooldown(user, seconds, type) { let cooldown = {} cooldown.currentTime = Math.trunc(Date.now() / 1000) diff --git a/json/slots.json b/json/slots.json new file mode 100644 index 0000000..11e2896 --- /dev/null +++ b/json/slots.json @@ -0,0 +1,67 @@ +[ + {"first": "Error", "second": "Error", "third": "Error"}, + {"first": "бар", "second": "бар", "third": "бар"}, + {"first": "виноград", "second": "бар", "third": "бар"}, + {"first": "лимон", "second": "бар", "third": "бар"}, + {"first": "семёрка", "second": "бар", "third": "бар"}, + {"first": "бар", "second": "виноград", "third": "бар"}, + {"first": "виноград", "second": "виноград", "third": "бар"}, + {"first": "лимон", "second": "виноград", "third": "бар"}, + {"first": "семёрка", "second": "виноград", "third": "бар"}, + {"first": "бар", "second": "лимон", "third": "бар"}, + {"first": "виноград", "second": "лимон", "third": "бар"}, + {"first": "лимон", "second": "лимон", "third": "бар"}, + {"first": "семёрка", "second": "лимон", "third": "бар"}, + {"first": "бар", "second": "семёрка", "third": "бар"}, + {"first": "виноград", "second": "семёрка", "third": "бар"}, + {"first": "лимон", "second": "семёрка", "third": "бар"}, + {"first": "семёрка", "second": "семёрка", "third": "бар"}, + {"first": "бар", "second": "бар", "third": "виноград"}, + {"first": "виноград", "second": "бар", "third": "виноград"}, + {"first": "лимон", "second": "бар", "third": "виноград"}, + {"first": "семёрка", "second": "бар", "third": "виноград"}, + {"first": "бар", "second": "виноград", "third": "виноград"}, + {"first": "виноград", "second": "виноград", "third": "виноград"}, + {"first": "лимон", "second": "виноград", "third": "виноград"}, + {"first": "семёрка", "second": "виноград", "third": "виноград"}, + {"first": "бар", "second": "лимон", "third": "виноград"}, + {"first": "виноград", "second": "лимон", "third": "виноград"}, + {"first": "лимон", "second": "лимон", "third": "виноград"}, + {"first": "семёрка", "second": "лимон", "third": "виноград"}, + {"first": "бар", "second": "семёрка", "third": "виноград"}, + {"first": "виноград", "second": "семёрка", "third": "виноград"}, + {"first": "лимон", "second": "семёрка", "third": "виноград"}, + {"first": "семёрка", "second": "семёрка", "third": "виноград"}, + {"first": "бар", "second": "бар", "third": "лимон"}, + {"first": "виноград", "second": "бар", "third": "лимон"}, + {"first": "лимон", "second": "бар", "third": "лимон"}, + {"first": "семёрка", "second": "бар", "third": "лимон"}, + {"first": "бар", "second": "виноград", "third": "лимон"}, + {"first": "виноград", "second": "виноград", "third": "лимон"}, + {"first": "лимон", "second": "виноград", "third": "лимон"}, + {"first": "семёрка", "second": "виноград", "third": "лимон"}, + {"first": "бар", "second": "лимон", "third": "лимон"}, + {"first": "виноград", "second": "лимон", "third": "лимон"}, + {"first": "лимон", "second": "лимон", "third": "лимон"}, + {"first": "семёрка", "second": "лимон", "third": "лимон"}, + {"first": "бар", "second": "семёрка", "third": "лимон"}, + {"first": "виноград", "second": "семёрка", "third": "лимон"}, + {"first": "лимон", "second": "семёрка", "third": "лимон"}, + {"first": "семёрка", "second": "семёрка", "third": "лимон"}, + {"first": "бар", "second": "бар", "third": "семёрка"}, + {"first": "виноград", "second": "бар", "third": "семёрка"}, + {"first": "лимон", "second": "бар", "third": "семёрка"}, + {"first": "семёрка", "second": "бар", "third": "семёрка"}, + {"first": "бар", "second": "виноград", "third": "семёрка"}, + {"first": "виноград", "second": "виноград", "third": "семёрка"}, + {"first": "лимон", "second": "виноград", "third": "семёрка"}, + {"first": "семёрка", "second": "виноград", "third": "семёрка"}, + {"first": "бар", "second": "лимон", "third": "семёрка"}, + {"first": "виноград", "second": "лимон", "third": "семёрка"}, + {"first": "лимон", "second": "лимон", "third": "семёрка"}, + {"first": "семёрка", "second": "лимон", "third": "семёрка"}, + {"first": "бар", "second": "семёрка", "third": "семёрка"}, + {"first": "виноград", "second": "семёрка", "third": "семёрка"}, + {"first": "лимон", "second": "семёрка", "third": "семёрка"}, + {"first": "семёрка", "second": "семёрка", "third": "семёрка"} + ] \ No newline at end of file diff --git a/json/weaponshop.json b/json/weaponshop.json index 2d90fa2..c992e1a 100644 --- a/json/weaponshop.json +++ b/json/weaponshop.json @@ -1,51 +1,51 @@ { "0": { - "name": "ТТ", + "name": "MP5", "price": 1000, "type": "weapon" }, "1": { - "name": "ТТ", - "price": 1000, - "type": "weapon" - }, - "2": { - "name": "M4A1", - "price": 1000, - "type": "weapon" - }, - "3": { "name": "Glock", "price": 1000, "type": "weapon" }, + "2": { + "name": "Deagle", + "price": 1000, + "type": "weapon" + }, + "3": { + "name": "MP5", + "price": 1000, + "type": "weapon" + }, "4": { - "name": "SCAR-H", + "name": "Glock", "price": 1000, "type": "weapon" }, "5": { - "name": "Бронежилет M3", + "name": "Кольчуга", "price": 1000, "type": "equipment" }, "6": { - "name": "Бронежилет M3", + "name": "Наколенники", "price": 1000, "type": "equipment" }, "7": { - "name": "Бронежилет M2", + "name": "Бронежилет M6", "price": 1000, "type": "equipment" }, "8": { - "name": "Бронежилет M4", + "name": "Бронежилет M5", "price": 1000, "type": "equipment" }, "9": { - "name": "Бронежилет M2", + "name": "Картонные накладки", "price": 1000, "type": "equipment" } diff --git a/models/promocode.model.js b/models/promocode.model.js new file mode 100644 index 0000000..85c874d --- /dev/null +++ b/models/promocode.model.js @@ -0,0 +1,12 @@ +const sequelize = require('../db'); +const {DataTypes} = require('sequelize'); + +const Promocode = sequelize.define('promocode', { + id: {type: DataTypes.INTEGER, primaryKey: true, unique: true, autoIncrement: true}, + code: {type: DataTypes.STRING, unique: true}, + activations: {type: DataTypes.INTEGER, defaultValue: 1}, + users: {type: DataTypes.ARRAY(DataTypes.BIGINT)}, + money: {type: DataTypes.INTEGER, defaultValue: 100} +}) + +module.exports = Promocode; diff --git a/models/user.model.js b/models/user.model.js index ca9c800..667a977 100644 --- a/models/user.model.js +++ b/models/user.model.js @@ -4,6 +4,7 @@ const {DataTypes} = require('sequelize'); const User = sequelize.define('user', { telegram_id: {type: DataTypes.STRING, primaryKey: true, unique: true}, username: {type: DataTypes.STRING}, + name: {type: DataTypes.STRING}, level: {type: DataTypes.INTEGER, defaultValue: 1}, exp: {type: DataTypes.INTEGER, defaultValue: 0}, money: {type: DataTypes.INTEGER, defaultValue: 0}, @@ -18,7 +19,8 @@ const User = sequelize.define('user', { percent: 0 } }, - worktime: {type: DataTypes.INTEGER, defaultValue: 0} + worktime: {type: DataTypes.INTEGER, defaultValue: 0}, + slottime: {type: DataTypes.INTEGER, defaultValue: 0} }) module.exports = User; diff --git a/presets/houses.json b/presets/houses.json index 9c2ea37..79bbe48 100644 --- a/presets/houses.json +++ b/presets/houses.json @@ -25,7 +25,7 @@ }, "7": { "name": "2-комнатная квартира с евроремонтом в панельке", - "price": 2000000 + "price": 3800000 }, "8": { "name": "2-этажный дом",