v0.0.59
Система слотов Промокоды
This commit is contained in:
parent
48fd7f232b
commit
5b2a2b3ff9
273
index.js
273
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)
|
||||
|
67
json/slots.json
Normal file
67
json/slots.json
Normal file
@ -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": "семёрка"}
|
||||
]
|
@ -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"
|
||||
}
|
||||
|
12
models/promocode.model.js
Normal file
12
models/promocode.model.js
Normal file
@ -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;
|
@ -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;
|
||||
|
@ -25,7 +25,7 @@
|
||||
},
|
||||
"7": {
|
||||
"name": "2-комнатная квартира с евроремонтом в панельке",
|
||||
"price": 2000000
|
||||
"price": 3800000
|
||||
},
|
||||
"8": {
|
||||
"name": "2-этажный дом",
|
||||
|
Loading…
Reference in New Issue
Block a user