vouchers update
Vouchers now with images
This commit is contained in:
parent
bbe91b03c3
commit
79b8b4939e
431
index.js
431
index.js
@ -4,10 +4,14 @@ const {
|
|||||||
Markup
|
Markup
|
||||||
} = require('telegraf')
|
} = require('telegraf')
|
||||||
const shortid = require('shortid');
|
const shortid = require('shortid');
|
||||||
|
const voucher_codes = require('voucher-code-generator');
|
||||||
|
const { createCanvas, loadImage } = require('canvas');
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const bot = new Telegraf(process.env.BOT_TOKEN)
|
const bot = new Telegraf(process.env.BOT_TOKEN)
|
||||||
const weaponshop = require('./json/weaponshop.json')
|
const weaponshop = require('./json/weaponshop.json')
|
||||||
const slots = require('./json/slots.json')
|
const slots = require('./json/slots.json')
|
||||||
|
const rarecars = require('./json/rarecars.json')
|
||||||
|
const simplecars = require('./json/simplecars.json')
|
||||||
const houses = require('./presets/houses.json')
|
const houses = require('./presets/houses.json')
|
||||||
const cars = require('./presets/cars.json')
|
const cars = require('./presets/cars.json')
|
||||||
const phones = require('./presets/mobiles.json')
|
const phones = require('./presets/mobiles.json')
|
||||||
@ -23,8 +27,9 @@ const BusinessModel = require('./models/business.model');
|
|||||||
const ReportModel = require('./models/report.model');
|
const ReportModel = require('./models/report.model');
|
||||||
const BlockModel = require('./models/block.model');
|
const BlockModel = require('./models/block.model');
|
||||||
const PromocodeModel = require('./models/promocode.model');
|
const PromocodeModel = require('./models/promocode.model');
|
||||||
|
const mainChat = -1001895132127
|
||||||
const adminList = [275416286]
|
const adminList = [275416286]
|
||||||
const expToUp = [0, 10, 20, 40, 60, 80, 120, 150, 200, 500, 1000]
|
const expToUp = [0, 10, 20, 40, 60, 100, 250, 370, 450, 575, 666, 777, 860, 999, 1000, 1177, 1234, 1350, 1488, 1515, 1610]
|
||||||
const topSym = ['🥇', '🥈', '🥉', '4️⃣', '5️⃣', '6️⃣', '7️⃣', '8️⃣', '9️⃣', '🔟']
|
const topSym = ['🥇', '🥈', '🥉', '4️⃣', '5️⃣', '6️⃣', '7️⃣', '8️⃣', '9️⃣', '🔟']
|
||||||
|
|
||||||
const start = async () => {
|
const start = async () => {
|
||||||
@ -65,10 +70,11 @@ bot.telegram.setMyCommands([{
|
|||||||
bot.use(async (ctx, next) => {
|
bot.use(async (ctx, next) => {
|
||||||
let id = ctx.from.id
|
let id = ctx.from.id
|
||||||
let username = ctx.from.username
|
let username = ctx.from.username
|
||||||
|
if(username == null) username = ctx.from.id
|
||||||
try {
|
try {
|
||||||
console.log(getCurrentTime() + `: ` + username + `: ` + ctx.update.message.text)
|
console.log(getCurrentTime() + `: ` + username + `: ` + ctx.update.message.text)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(getCurrentTime() + `: ${username}: Не удалось перехватить контекст.`)
|
console.log(getCurrentTime() + `: ${username}: ${ctx.update.callback_query.data}`)
|
||||||
}
|
}
|
||||||
let user = await UserModel.findByPk(id);
|
let user = await UserModel.findByPk(id);
|
||||||
let block = await BlockModel.findByPk(id);
|
let block = await BlockModel.findByPk(id);
|
||||||
@ -82,6 +88,7 @@ bot.use(async (ctx, next) => {
|
|||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
user.name = ctx.from.first_name
|
user.name = ctx.from.first_name
|
||||||
|
if(user.username === null) user.username = ctx.from.id
|
||||||
user.save()
|
user.save()
|
||||||
}
|
}
|
||||||
if (property === null) {
|
if (property === null) {
|
||||||
@ -121,8 +128,9 @@ bot.command('start', async (ctx) => {
|
|||||||
}
|
}
|
||||||
return await ctx.reply('Главное меню', Markup
|
return await ctx.reply('Главное меню', Markup
|
||||||
.keyboard([
|
.keyboard([
|
||||||
['😎 Профиль', '💳 Баланс'], // Row1 with 2 buttons
|
['😎 Профиль'], // Row1 with 2 buttons
|
||||||
['🗄️ Работать', '🌐 Организация', '🎁 Бонус', '🏯 Казино'], // Row2 with 2 buttons
|
['🗄️ Работать', '🌐 Организация', '🎁 Бонус', '🏯 Казино'], // Row2 with 2 buttons
|
||||||
|
['📦 Контейнеры'],
|
||||||
['📢 Вакансии', '🔵 Имущество', '📞 Пригласить'] // Row3 with 3 buttons
|
['📢 Вакансии', '🔵 Имущество', '📞 Пригласить'] // Row3 with 3 buttons
|
||||||
])
|
])
|
||||||
.resize()
|
.resize()
|
||||||
@ -132,20 +140,25 @@ bot.command('start', async (ctx) => {
|
|||||||
bot.hears('▶️ Меню', async (ctx) => {
|
bot.hears('▶️ Меню', async (ctx) => {
|
||||||
return await ctx.reply('Main Menu', Markup
|
return await ctx.reply('Main Menu', Markup
|
||||||
.keyboard([
|
.keyboard([
|
||||||
['😎 Профиль', '💳 Баланс'], // Row1 with 2 buttons
|
['😎 Профиль'],
|
||||||
['🗄️ Работать', '🌐 Организация', '🎁 Бонус', '🏯 Казино'], // Row2 with 2 buttons
|
['🗄️ Работать', '🌐 Организация', '🎁 Бонус', '🏯 Казино'],
|
||||||
['📢 Вакансии', '🔵 Имущество', '📞 Пригласить'] // Row3 with 3 buttons
|
['📦 Контейнеры'],
|
||||||
|
['📢 Вакансии', '🔵 Имущество', '📞 Пригласить']
|
||||||
])
|
])
|
||||||
.resize()
|
.resize()
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
bot.hears('Чат', async (ctx) => {
|
||||||
|
ctx.telegram.sendMessage(mainChat, `Automatic message`)
|
||||||
|
});
|
||||||
|
|
||||||
bot.hears('😎 Профиль', async (ctx) => {
|
bot.hears('😎 Профиль', async (ctx) => {
|
||||||
let user = await UserModel.findByPk(ctx.from.id);
|
let user = await UserModel.findByPk(ctx.from.id);
|
||||||
let property = await PropertyModel.findByPk(ctx.from.id);
|
let property = await PropertyModel.findByPk(ctx.from.id);
|
||||||
if (!user) return ctx.reply(`Ошибка #1`);
|
if (!user) return ctx.reply(`Ошибка #1`);
|
||||||
return ctx.replyWithMarkdownV2(`
|
return ctx.replyWithMarkdownV2(`
|
||||||
👤${escape(user.username)} ${user.status == 'bronze' ? `\\[_*Bronze Status*_\\]` : ""}${user.status == 'silver' ? `\\[_*Silver Status*_\\]` : ""}${user.status == 'gold' ? `\\[_*Gold Status*_\\]` : ""}${user.status == 'admin' ? "✅" : ""}
|
👤${escape(user.username)} ${user.status == 'bronze' ? `\\[🔺\\]` : ""}${user.status == 'silver' ? `\\[🔹\\]` : ""}${user.status == 'gold' ? `\\[🔸\\]` : ""}${user.status == 'admin' ? "✅" : ""}
|
||||||
🆔: ${ctx.from.id}
|
🆔: ${ctx.from.id}
|
||||||
|
|
||||||
📶 Уровень: ${user.level} \\| ${user.exp} / ${expToUp[user.level]}
|
📶 Уровень: ${user.level} \\| ${user.exp} / ${expToUp[user.level]}
|
||||||
@ -170,7 +183,7 @@ bot.command('getprofile', async (ctx) => {
|
|||||||
let user = await UserModel.findByPk(id);
|
let user = await UserModel.findByPk(id);
|
||||||
let property = await PropertyModel.findByPk(id);
|
let property = await PropertyModel.findByPk(id);
|
||||||
return ctx.replyWithMarkdownV2(`
|
return ctx.replyWithMarkdownV2(`
|
||||||
👤${escape(user.username)} ${user.status == 'bronze' ? `\\[_*Bronze Status*_\\]` : ""}${user.status == 'silver' ? `\\[_*Silver Status*_\\]` : ""}${user.status == 'gold' ? `\\[_*Gold Status*_\\]` : ""}${user.status == 'admin' ? "Administrator" : ""}
|
👤${escape(user.username)} ${user.status == 'bronze' ? `\\[🔺\\]` : ""}${user.status == 'silver' ? `\\[🔹\\]` : ""}${user.status == 'gold' ? `\\[🔸\\]` : ""}${user.status == 'admin' ? "Administrator" : ""}
|
||||||
🆔: ${ctx.from.id}
|
🆔: ${ctx.from.id}
|
||||||
|
|
||||||
📶 Уровень: ${user.level} \\| ${user.exp} / ${expToUp[user.level]}
|
📶 Уровень: ${user.level} \\| ${user.exp} / ${expToUp[user.level]}
|
||||||
@ -661,7 +674,7 @@ bot.hears('Топ', async (ctx) => {
|
|||||||
group: ['username', 'status'],
|
group: ['username', 'status'],
|
||||||
where: {
|
where: {
|
||||||
telegram_id: {
|
telegram_id: {
|
||||||
[Op.ne]: 275416286 // игнорировать игрока с telegram_id 275416286
|
[Op.ne]: 275416286
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
order: [
|
order: [
|
||||||
@ -671,7 +684,7 @@ bot.hears('Топ', async (ctx) => {
|
|||||||
})
|
})
|
||||||
let text = `🏆 Топ 10 игроков по балансу.\n\n`
|
let text = `🏆 Топ 10 игроков по балансу.\n\n`
|
||||||
for(i=0; i<topPlayer.length; i++){
|
for(i=0; i<topPlayer.length; i++){
|
||||||
text += `${topSym[i]}. ${topPlayer[i].status != 'user' ? `⚜️` : ""} ${topPlayer[i].username} [¤${spaces(topPlayer[i].money)}]\n`
|
text += `${topSym[i]}. ${topPlayer[i].status == 'bronze' ? `[🔺]` : ""}${topPlayer[i].status == 'silver' ? `[🔹]` : ""}${topPlayer[i].status == 'gold' ? `[🔸]` : ""} ${topPlayer[i].username} [¤${spaces(topPlayer[i].money)}]\n`
|
||||||
}
|
}
|
||||||
return await ctx.reply(text)
|
return await ctx.reply(text)
|
||||||
|
|
||||||
@ -801,12 +814,13 @@ bot.action(/{"action": "buy"*/, async (ctx) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
bot.hears('Поставщик', async (ctx) => {
|
bot.hears('Поставщик', async (ctx) => {
|
||||||
let text = `Вы подходите к зданию с вывеской "Ништяки Хаткейса".\nВлад Хаткейс: "Вот мой ассортимент на сегодня:"\n`
|
let text = `[Hatkeis Gunsmith](https://telegra.ph/Hatkeis-Gunsmith-09-27)`
|
||||||
|
let shop = `\n Вы подходите к зданию с вывеской "Ништяки Хаткейса".\n Вот ассортимент на сегодня\n`
|
||||||
for (i = 0; i < 10; i++) {
|
for (i = 0; i < 10; i++) {
|
||||||
text += `${i}. ${weaponshop[i].name} (¤${weaponshop[i].price}) [/buy equipment ${i}]\n`
|
shop += `${i}. ${weaponshop[i].name} (¤${spaces(weaponshop[i].price)})\n`
|
||||||
}
|
}
|
||||||
weaponShopUpdate()
|
weaponShopUpdate()
|
||||||
return await ctx.reply(text)
|
return await ctx.replyWithMarkdownV2(text + escape(shop), {disable_web_page_preview: true})
|
||||||
})
|
})
|
||||||
|
|
||||||
bot.command('sell', async (ctx) => {
|
bot.command('sell', async (ctx) => {
|
||||||
@ -886,23 +900,91 @@ bot.hears('🌐 Организация', async (ctx) => {
|
|||||||
owner: user.business.id
|
owner: user.business.id
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return await ctx.replyWithMarkdown(`🏭 Организация\n_${business.name}_\n💹 Баланс: ¤${business.balance}\n🧰 Сырье: ${business.materials}\n👥 Рабочих: ${business.users.length}`, Markup.keyboard([
|
return await ctx.replyWithMarkdownV2(`🏭 Организация\n_${business.name}_\n💹 Баланс: ¤${escape(spaces(business.balance))}\n🧰 Сырье: ${business.materials}\n👥 Рабочих: ${business.users.length}\n\nВаши отработки: ${user.business.checks}`, Markup.inlineKeyboard([
|
||||||
['📶 Отработка'],
|
[{
|
||||||
['⬅️ Покинуть'],
|
text: `📶 Отработка`,
|
||||||
['🌐 Организация', '▶️ Меню'] // Row3 with 3 buttons
|
callback_data: "workoff"
|
||||||
|
}, {
|
||||||
|
text: `⬅️ Покинуть`,
|
||||||
|
callback_data: "покинуть"
|
||||||
|
}]
|
||||||
])
|
])
|
||||||
|
.oneTime()
|
||||||
.resize())
|
.resize())
|
||||||
}
|
}
|
||||||
if (business.owner == ctx.from.id){
|
if (business.owner == ctx.from.id){
|
||||||
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([
|
return await ctx.replyWithMarkdownV2(`🏭 Ваша организация\n_${business.name}_\n💹 Баланс: ¤${escape(spaces(business.balance))}\n🧰 Сырье: ${business.materials}\n👥 Рабочих: ${business.users.length}\n🔨 Отработок: ${business.checks}\n\nВаши отработки: ${user.business.checks}`, Markup.inlineKeyboard([
|
||||||
['📶 Отработка'],
|
[{
|
||||||
['💸 Payday', '🌐 Организация', '▶️ Меню']
|
text: `📶 Отработка`,
|
||||||
|
callback_data: "workoff"
|
||||||
|
}, {
|
||||||
|
text: `💸 Payday`,
|
||||||
|
callback_data: "payday"
|
||||||
|
}]
|
||||||
])
|
])
|
||||||
|
.oneTime()
|
||||||
.resize())
|
.resize())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
bot.hears('⬅️ Покинуть', async (ctx) => {
|
bot.action('workoff', async (ctx) => {
|
||||||
|
let user = await UserModel.findByPk(ctx.from.id)
|
||||||
|
let business = await BusinessModel.findOne({
|
||||||
|
where: {
|
||||||
|
owner: user.business.id.toString()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (user.business == null) return await ctx.reply(`Вы не работаете в организации.`)
|
||||||
|
let timer = user.worktime
|
||||||
|
let cooldown = setCooldown(user, 3600, timer)
|
||||||
|
if (user.worktime > cooldown.currentTime) return ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `📛 Работа в организации будет доступна через ${cooldown.timeLeftInMinutes} минут(у/ы)`, {show_alert: true});
|
||||||
|
if (business.materials < 10) return ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `📛 В организации недостаточно материалов для отработки.`);
|
||||||
|
user.worktime = cooldown.endTime
|
||||||
|
user.business = {
|
||||||
|
id: user.business.id,
|
||||||
|
checks: user.business.checks + 1,
|
||||||
|
percent: user.business.percent
|
||||||
|
}
|
||||||
|
business.materials -= 10
|
||||||
|
business.checks += 1
|
||||||
|
await user.save()
|
||||||
|
await business.save()
|
||||||
|
if (business.owner == ctx.from.id){
|
||||||
|
return await ctx.editMessageText(`🏭 Ваша организация\n_${business.name}_\n💹 Баланс: ¤${escape(spaces(business.balance))}\n🧰 Сырье: ${business.materials} \n👥 Рабочих: ${business.users.length}\n🔨 Отработок: ${business.checks}\n\nВаши отработки: ${user.business.checks}`,
|
||||||
|
{
|
||||||
|
reply_markup: {
|
||||||
|
inline_keyboard: [
|
||||||
|
[{
|
||||||
|
text: `📶 Отработка`,
|
||||||
|
callback_data: "workoff"
|
||||||
|
}, {
|
||||||
|
text: `💸 Payday`,
|
||||||
|
callback_data: "payday"
|
||||||
|
}]
|
||||||
|
]},
|
||||||
|
parse_mode: `MarkdownV2`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}else{
|
||||||
|
return await ctx.editMessageText(`🏭 Организация\n_${business.name}_\n💹 Баланс: ¤${escape(spaces(business.balance))}\n🧰 Сырье: ${business.materials}\n👥 Рабочих: ${business.users.length}\n\nВаши отработки: ${user.business.checks}`,
|
||||||
|
{
|
||||||
|
reply_markup: {
|
||||||
|
inline_keyboard: [
|
||||||
|
[{
|
||||||
|
text: `📶 Отработка`,
|
||||||
|
callback_data: "workoff"
|
||||||
|
}, {
|
||||||
|
text: `⬅️ Покинуть`,
|
||||||
|
callback_data: "покинуть"
|
||||||
|
}]
|
||||||
|
]},
|
||||||
|
parse_mode: `MarkdownV2`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
bot.action('покинуть', async (ctx) => {
|
||||||
let user = await UserModel.findByPk(ctx.from.id)
|
let user = await UserModel.findByPk(ctx.from.id)
|
||||||
if (user.business.id == 0) return await ctx.reply(`Вы не состоите в организации.`)
|
if (user.business.id == 0) return await ctx.reply(`Вы не состоите в организации.`)
|
||||||
let business = await BusinessModel.findOne({
|
let business = await BusinessModel.findOne({
|
||||||
@ -935,6 +1017,11 @@ bot.hears('⬅️ Покинуть', async (ctx) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
bot.action('cancel', async (ctx) => {
|
||||||
|
await ctx.deleteMessage()
|
||||||
|
await bot.telegram.answerCbQuery(ctx.callbackQuery.id, `Отмена.`)
|
||||||
|
})
|
||||||
|
|
||||||
bot.action('user_leave_business', async (ctx) => {
|
bot.action('user_leave_business', async (ctx) => {
|
||||||
let data = ctx.update.callback_query.data;
|
let data = ctx.update.callback_query.data;
|
||||||
let user = await UserModel.findByPk(ctx.from.id)
|
let user = await UserModel.findByPk(ctx.from.id)
|
||||||
@ -955,32 +1042,7 @@ bot.action('user_leave_business', async (ctx) => {
|
|||||||
return await bot.telegram.sendMessage(ctx.from.id, `🏭 Вы покинули ${business.name}`)
|
return await bot.telegram.sendMessage(ctx.from.id, `🏭 Вы покинули ${business.name}`)
|
||||||
})
|
})
|
||||||
|
|
||||||
bot.hears('📶 Отработка', async (ctx) => {
|
bot.action('payday', async (ctx) => {
|
||||||
let user = await UserModel.findByPk(ctx.from.id)
|
|
||||||
let business = await BusinessModel.findOne({
|
|
||||||
where: {
|
|
||||||
owner: user.business.id.toString()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
if (user.business == null) return await ctx.reply(`Вы не работаете в организации.`)
|
|
||||||
let timer = user.worktime
|
|
||||||
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,
|
|
||||||
percent: user.business.percent
|
|
||||||
}
|
|
||||||
business.materials -= 10
|
|
||||||
business.checks += 1
|
|
||||||
await user.save()
|
|
||||||
await business.save()
|
|
||||||
return await ctx.reply(`Вы отработали час на ${business.name}\nВсего отработок ${user.business.checks}`)
|
|
||||||
})
|
|
||||||
|
|
||||||
bot.hears('💸 Payday', async (ctx) => {
|
|
||||||
let user = null
|
let user = null
|
||||||
let business = await BusinessModel.findOne({
|
let business = await BusinessModel.findOne({
|
||||||
where: {
|
where: {
|
||||||
@ -1000,36 +1062,35 @@ bot.hears('💸 Payday', async (ctx) => {
|
|||||||
for (i = 0; i < business.users.length; i++) { // Summary percent
|
for (i = 0; i < business.users.length; i++) { // Summary percent
|
||||||
user = await UserModel.findByPk(business.users[i])
|
user = await UserModel.findByPk(business.users[i])
|
||||||
percentSum += Number(user.business.percent)
|
percentSum += Number(user.business.percent)
|
||||||
percentErrorText += `${user.username} ${user.business.percent}% [для изменения введите /percent ${user.username} [проценты]]\n`
|
percentErrorText += `ℹ️ ${user.username} ${user.business.percent}% [/percent ${user.username} [проценты]]\n`
|
||||||
}
|
}
|
||||||
if (percentSum > 100) return await ctx.reply(`Общий процент всех сотрудников превышает 100%\nОстаток процентов перенесется в баланс организации.\n${percentErrorText}`)
|
if (percentSum > 100) return await ctx.reply(`⚠️ Общий процент всех сотрудников превышает 100%\n ➕ Остаток процентов перенесется в баланс организации.\n\n${percentErrorText}\n`)
|
||||||
for (i = 0; i < business.users.length; i++) { // Общая внесенная сумма всеми участниками
|
for (x = 0; x < business.users.length; x++) { // Общая внесенная сумма всеми участниками
|
||||||
user = await UserModel.findByPk(business.users[i])
|
user = await UserModel.findByPk(business.users[x])
|
||||||
profit += user.business.checks * moneyList
|
profit += user.business.checks * moneyList * user.level
|
||||||
text += `${user.username} отработал ${user.business.checks} раз.\n`
|
text += `ℹ️ ${user.username} отработал ${user.business.checks} раз.\n`
|
||||||
user.business = {
|
user.business = {
|
||||||
id: user.business.id,
|
id: user.business.id,
|
||||||
checks: 0,
|
checks: 0,
|
||||||
percent: user.business.percent
|
percent: user.business.percent
|
||||||
}
|
}
|
||||||
|
|
||||||
user.save()
|
user.save()
|
||||||
}
|
}
|
||||||
text += `Наработка за текущий период: ${profit}\n`
|
text += ` 💹 Наработка за текущий период: ${profit}\n`
|
||||||
let profitCheck = profit
|
let profitCheck = profit
|
||||||
for (i = 0; i < business.users.length; i++) { // Процент выплаты участникам
|
for (n = 0; n < business.users.length; n++) { // Процент выплаты участникам
|
||||||
user = await UserModel.findByPk(business.users[i])
|
user = await UserModel.findByPk(business.users[n])
|
||||||
piece = Math.round(profit / 100 * user.business.percent)
|
piece = Math.round(profit / 100 * user.business.percent)
|
||||||
profitCheck -= piece
|
profitCheck -= piece
|
||||||
user.money += piece
|
user.money += piece
|
||||||
|
text += `➕ ${user.username} получает ¤${piece}\n`
|
||||||
|
await bot.telegram.sendMessage(user.telegram_id, `ℹ️ Директор организации сформировал выплаты.\n➕ На ваш баланс поступило: ${spaces(piece)}`)
|
||||||
giveExp(user, business.checks)
|
giveExp(user, business.checks)
|
||||||
user.save()
|
user.save()
|
||||||
text += `${user.username} получает ¤${piece}\n`
|
|
||||||
await bot.telegram.sendMessage(user.telegram_id, `Директор организации сформировал выплаты.\n На ваш баланс поступило: ${spaces(piece)}`)
|
|
||||||
}
|
}
|
||||||
if (profitCheck > 0) {
|
if (profitCheck > 0) {
|
||||||
business.balance += profitCheck
|
business.balance += profitCheck
|
||||||
text += `На баланс бизнеса поступило ¤${profitCheck}`
|
text += `➕ На баланс бизнеса поступило ¤${profitCheck}`
|
||||||
}
|
}
|
||||||
business.checks = 0
|
business.checks = 0
|
||||||
business.save()
|
business.save()
|
||||||
@ -1056,23 +1117,25 @@ bot.command('orgmessage', async (ctx) => {
|
|||||||
bot.command('materials', async (ctx) => {
|
bot.command('materials', async (ctx) => {
|
||||||
ctx.args = ctx.update.message.text.split(' ')
|
ctx.args = ctx.update.message.text.split(' ')
|
||||||
let user = await UserModel.findByPk(ctx.from.id)
|
let user = await UserModel.findByPk(ctx.from.id)
|
||||||
if (user.business.id == 0) return await ctx.reply(`Вы не владеете организацией.`)
|
if (user.business.id == 0) return await ctx.reply(`🚫 Вы не владеете организацией.`)
|
||||||
let world = await WorldModel.findByPk(1)
|
let world = await WorldModel.findByPk(1)
|
||||||
let business = await BusinessModel.findOne({
|
let business = await BusinessModel.findOne({
|
||||||
where: {
|
where: {
|
||||||
owner: ctx.from.id.toString()
|
owner: ctx.from.id.toString()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if (business === null) return await ctx.reply(`У вас нет организации.`)
|
if (business === null) return await ctx.reply(`🚫 У вас нет организации.`)
|
||||||
if (!ctx.args[1]) return ctx.reply(`Не указан аргумент.`)
|
if (!ctx.args[1]) return ctx.reply(`🚫 Не указан аргумент.`)
|
||||||
if (!Number(ctx.args[1])) return ctx.reply(`Количество должно быть числом.`)
|
if (!Number(ctx.args[1])) return ctx.reply(`ℹ️ Количество должно быть числом.`)
|
||||||
if (ctx.args[1] < 1) return ctx.reply(`Минимальное количество для покупки - 1`)
|
if (ctx.args[1] < 1) return ctx.reply(`ℹ️ Минимальное количество для покупки - 1`)
|
||||||
if (ctx.args[1] > business.balance) return ctx.reply(`Недостаточно средств на балансе организации.`)
|
if (ctx.args[1]*world.matPrice > business.balance) return ctx.reply(`🚫 Недостаточно средств на балансе организации.`)
|
||||||
|
if (business.materials >= 700) return ctx.reply(`🚫 Склады полны.`)
|
||||||
|
if (business.materials + Number(ctx.args[1]) > 700) return ctx.reply(`🚫 Нет столько места на складах.\n Можно закупить еще ${700 - business.materials}`)
|
||||||
let count = Number(ctx.args[1])
|
let count = Number(ctx.args[1])
|
||||||
business.balance -= world.matPrice*count
|
business.balance -= world.matPrice*count
|
||||||
business.materials += count
|
business.materials += count
|
||||||
business.save()
|
business.save()
|
||||||
return await ctx.reply(`Закуплено ${ctx.args[1]} материалов для организации на сумму ${world.matPrice*count}`)
|
return await ctx.reply(`➕ Закуплено ${ctx.args[1]} материалов для организации на сумму ¤${world.matPrice*count}`)
|
||||||
})
|
})
|
||||||
|
|
||||||
bot.command('percent', async (ctx) => {
|
bot.command('percent', async (ctx) => {
|
||||||
@ -1149,13 +1212,19 @@ bot.command('invite', async (ctx) => {
|
|||||||
ctx.args = ctx.update.message.text.split(' ')
|
ctx.args = ctx.update.message.text.split(' ')
|
||||||
if (!ctx.args[1]) return ctx.reply(`/invite [Nick]`)
|
if (!ctx.args[1]) return ctx.reply(`/invite [Nick]`)
|
||||||
let user = await UserModel.findByPk(ctx.from.id)
|
let user = await UserModel.findByPk(ctx.from.id)
|
||||||
if (user.business.id == 0) return await ctx.reply(`У вас нет организации в которую можно пригласить игрока.`)
|
if (user.business.id == 0) return await ctx.reply(`🚫 У вас нет организации в которую можно пригласить игрока.`)
|
||||||
|
let business = await BusinessModel.findOne({
|
||||||
|
where: {
|
||||||
|
owner: ctx.from.id.toString()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (business.users.length >= 5) return await ctx.reply(`📛 Достигнуто максимальное количество сотрудников в организации.`)
|
||||||
let invited = await UserModel.findOne({
|
let invited = await UserModel.findOne({
|
||||||
where: {
|
where: {
|
||||||
username: ctx.args[1]
|
username: ctx.args[1]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
await bot.telegram.sendMessage(invited.telegram_id, 'Приглашение', Markup
|
await bot.telegram.sendMessage(invited.telegram_id, '⤵️ Приглашение', Markup
|
||||||
.inlineKeyboard([
|
.inlineKeyboard([
|
||||||
[{
|
[{
|
||||||
text: `Принять`,
|
text: `Принять`,
|
||||||
@ -1187,12 +1256,12 @@ bot.action(/{"type": "business_invite_(accept|refuse)"*/, async ctx => {
|
|||||||
business.users = sequelize.fn('array_append', sequelize.col('users'), ctx.update.callback_query.from.id);
|
business.users = sequelize.fn('array_append', sequelize.col('users'), ctx.update.callback_query.from.id);
|
||||||
business.save()
|
business.save()
|
||||||
user.save()
|
user.save()
|
||||||
await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Приглашение принято.`, {show_alert: true})
|
await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `✔️ Приглашение принято.`, {show_alert: true})
|
||||||
}
|
}
|
||||||
await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Вы уже в организации.`, {show_alert: true})
|
await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `ℹ️ Вы уже в организации.`, {show_alert: true})
|
||||||
}
|
}
|
||||||
if (data.type == 'business_invite_refuse'){
|
if (data.type == 'business_invite_refuse'){
|
||||||
await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Приглашение отклонено.`, {show_alert: true})
|
await ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `❌ Приглашение отклонено.`, {show_alert: true})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -1279,20 +1348,20 @@ bot.action(/slots(1000|5000|25000|50000|100000)/, async (ctx) => {
|
|||||||
user.save()
|
user.save()
|
||||||
world.save()
|
world.save()
|
||||||
return setTimeout(() => {
|
return setTimeout(() => {
|
||||||
ctx.reply(`Вы выиграли ${bet*win}`)
|
ctx.reply(`➕ Вы выиграли ¤${spaces(bet*win)}`)
|
||||||
}, 1700);
|
}, 1700);
|
||||||
}
|
}
|
||||||
if(win > 0 && win <= 4){
|
if(win > 0 && win <= 4){
|
||||||
await giveExp(user, win*2)
|
await giveExp(user, win*2)
|
||||||
return setTimeout(() => {
|
return setTimeout(() => {
|
||||||
ctx.reply(`Вы выиграли ${win*2} опыта.`)
|
ctx.reply(`➕ Вы выиграли ${win*2} опыта.`)
|
||||||
}, 1700);
|
}, 1700);
|
||||||
}
|
}
|
||||||
if(win == 0){
|
if(win == 0){
|
||||||
return setTimeout(() => {
|
return setTimeout(() => {
|
||||||
world.save()
|
world.save()
|
||||||
user.save()
|
user.save()
|
||||||
ctx.reply(`Вы ничего не выиграли.`)
|
ctx.reply(`➖ Вы проиграли ¤${spaces(bet)}.`)
|
||||||
}, 1700);
|
}, 1700);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1313,18 +1382,92 @@ bot.command('promocode', async (ctx) => {
|
|||||||
code: ctx.args[1]
|
code: ctx.args[1]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if(promocode === null) return await ctx.reply(`Нет такого кода.`)
|
if(promocode === null) return await ctx.reply(`➖ Нет такого кода.`)
|
||||||
if(promocode.users.length-1 >= promocode.activations && promocode.users != 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.toString())) return await ctx.reply(`Вы уже активировали этот промокод.`)
|
if(promocode.users.includes(ctx.from.id.toString())) return await ctx.reply(`⚠️ Вы уже активировали этот промокод.`)
|
||||||
console.log(promocode.users)
|
console.log(promocode.users)
|
||||||
promocode.users = sequelize.fn('array_append', sequelize.col('users'), ctx.from.id.toString());
|
promocode.users = sequelize.fn('array_append', sequelize.col('users'), ctx.from.id.toString());
|
||||||
user.money += promocode.money
|
user.money += promocode.money
|
||||||
user.save()
|
user.save()
|
||||||
promocode.save()
|
promocode.save()
|
||||||
await bot.telegram.sendMessage(adminList[0], `${user.username} активировал промокод.`)
|
await bot.telegram.sendMessage(adminList[0], `${user.username} активировал промокод.`)
|
||||||
return await ctx.reply(`Вы активировали промокод.`)
|
return await ctx.reply(`✅ Вы активировали промокод.`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
bot.hears('📦 Контейнеры', async (ctx) => {
|
||||||
|
let user = await UserModel.findByPk(ctx.from.id)
|
||||||
|
let containers = []
|
||||||
|
let superWin = rarecars.random()
|
||||||
|
let values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||||
|
let oneValue = []
|
||||||
|
for(i = 0; i < 10; i++){
|
||||||
|
oneValue = values.random()
|
||||||
|
values = values.filter(value => value != oneValue);
|
||||||
|
containers.push({name: `📦 Контейнер ${i+1}`, value: oneValue})
|
||||||
|
}
|
||||||
|
let keyboardButtons = containers.map(container => {
|
||||||
|
return {text: container.name, callback_data: `container_${container.value}`}
|
||||||
|
})
|
||||||
|
let rows = []
|
||||||
|
while (keyboardButtons.length > 0) {
|
||||||
|
rows.push(keyboardButtons.splice(0, 2)) // разбиваем на подмассивы по 5 кнопок
|
||||||
|
}
|
||||||
|
await ctx.replyWithMarkdownV2('[Sueta Logistic International](https://telegra.ph/OOO-Sueta-Logistic-International-09-27)\nДоступные контейнеры в порту:',
|
||||||
|
{
|
||||||
|
reply_markup: {
|
||||||
|
inline_keyboard: rows
|
||||||
|
},
|
||||||
|
disable_web_page_preview: true
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
bot.action(/container_(1|2|3|4|5|6|7|8|9|10)/, async (ctx) => {
|
||||||
|
let data = ctx.update.callback_query.data;
|
||||||
|
let user = await UserModel.findByPk(ctx.from.id)
|
||||||
|
let property = await PropertyModel.findByPk(ctx.from.id)
|
||||||
|
if(user.money < 500000) return ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `Открытие контейнера стоит ¤500.000`, {show_alert: true})
|
||||||
|
if(property.car.name) return ctx.telegram.answerCbQuery(ctx.callbackQuery.id, `У вас уже есть автомобиль\nПродайте текущий автомобиль: /sell car`, {show_alert: true})
|
||||||
|
user.money -= 500000
|
||||||
|
let userWin = null
|
||||||
|
switch(data){
|
||||||
|
case `container_7`:
|
||||||
|
userWin = rarecars.random()
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
userWin = simplecars.random()
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
property.car = userWin
|
||||||
|
user.save()
|
||||||
|
property.save()
|
||||||
|
ctx.deleteMessage()
|
||||||
|
return await ctx.sendPhoto(userWin.image, { caption: `В контейнере была: ${userWin.name} стоимостью ¤${spaces(userWin.price)}`})
|
||||||
|
})
|
||||||
|
|
||||||
|
bot.action(/{"action": "sueta_*/, async (ctx) => {
|
||||||
|
let data = ctx.update.callback_query.data;
|
||||||
|
data = JSON.parse(data)
|
||||||
|
console.log(data.car)
|
||||||
|
let user = await UserModel.findByPk(ctx.from.id)
|
||||||
|
let property = await PropertyModel.findByPk(ctx.from.id)
|
||||||
|
switch(data.action){
|
||||||
|
case `sueta_accept`:
|
||||||
|
user.money += data.carprice
|
||||||
|
await ctx.editMessageText(`➕ ${data.carprice}`)
|
||||||
|
break;
|
||||||
|
case `sueta_refuse`:
|
||||||
|
user.money += Math.round(property.car.price/2)
|
||||||
|
property.car = {
|
||||||
|
name: data.carname,
|
||||||
|
price: data.carprice
|
||||||
|
}
|
||||||
|
await ctx.editMessageText(`➕ ${data.carname}`)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
user.save()
|
||||||
|
property.save()
|
||||||
|
})
|
||||||
/////////////////////////////////////Admin Commands//////////////////////////////////////////////////
|
/////////////////////////////////////Admin Commands//////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
@ -1368,7 +1511,7 @@ bot.command('createpromocode', async (ctx) => {
|
|||||||
if (!ctx.args[1] || !ctx.args[2] || !ctx.args[3]) return ctx.reply(`/createpromo [activations] [money] [code]`)
|
if (!ctx.args[1] || !ctx.args[2] || !ctx.args[3]) return ctx.reply(`/createpromo [activations] [money] [code]`)
|
||||||
let promocode = await PromocodeModel.findOne({
|
let promocode = await PromocodeModel.findOne({
|
||||||
where: {
|
where: {
|
||||||
code: ctx.args[1]
|
code: ctx.args[3]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if(promocode === null){
|
if(promocode === null){
|
||||||
@ -1377,7 +1520,36 @@ bot.command('createpromocode', async (ctx) => {
|
|||||||
activations: ctx.args[1],
|
activations: ctx.args[1],
|
||||||
money: ctx.args[2]
|
money: ctx.args[2]
|
||||||
})
|
})
|
||||||
return await ctx.reply(`Создан промокод ${ctx.args[3]}`)
|
let voucherImage = await generateVoucher(ctx.args[3], ctx.args[1], ctx.args[2])
|
||||||
|
return await ctx.sendPhoto({source: voucherImage, caption: `Создан промокод ${ctx.args[3]}` })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
bot.command('genpromo', async (ctx) => {
|
||||||
|
let user = await UserModel.findByPk(ctx.from.id)
|
||||||
|
if(user.status != 'admin') return await ctx.reply(`Admin Only.`)
|
||||||
|
ctx.args = ctx.update.message.text.split(' ')
|
||||||
|
if (!ctx.args[1] || !ctx.args[2]) return ctx.reply(`/genpromo [activations] [money]`)
|
||||||
|
let code = voucher_codes.generate({
|
||||||
|
length: 6,
|
||||||
|
count: 1,
|
||||||
|
prefix: "CMP-",
|
||||||
|
postfix: "-FIRE",
|
||||||
|
charset: voucher_codes.charset("alphanumeric")
|
||||||
|
});
|
||||||
|
let promocode = await PromocodeModel.findOne({
|
||||||
|
where: {
|
||||||
|
code: code[0]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if(promocode === null){
|
||||||
|
await PromocodeModel.create({
|
||||||
|
code: code[0],
|
||||||
|
activations: ctx.args[1],
|
||||||
|
money: ctx.args[2]
|
||||||
|
})
|
||||||
|
let voucherImage = await generateVoucher(code, ctx.args[1], ctx.args[2])
|
||||||
|
return await ctx.sendPhoto({source: voucherImage, caption: `Создан промокод ${code[0]}` })
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -1396,13 +1568,27 @@ function spacesWithMarkdown(string) {
|
|||||||
if (typeof string !== "string") string = string.toString();
|
if (typeof string !== "string") string = string.toString();
|
||||||
return string.split("").reverse().join("").match(/[0-9]{1,3}/g).join(".\\").split("").reverse().join("");
|
return string.split("").reverse().join("").match(/[0-9]{1,3}/g).join(".\\").split("").reverse().join("");
|
||||||
};
|
};
|
||||||
function escape(string) {
|
function escape(text) {
|
||||||
string = string
|
text = text
|
||||||
.replace("_", "\\_")
|
.replace(/\_/g, '\\_')
|
||||||
.replace("*", "\\*")
|
.replace(/\*/g, '\\*')
|
||||||
.replace("[", "\\[")
|
.replace(/\[/g, '\\[')
|
||||||
.replace("`", "\\`");
|
.replace(/\]/g, '\\]')
|
||||||
return string
|
.replace(/\(/g, '\\(')
|
||||||
|
.replace(/\)/g, '\\)')
|
||||||
|
.replace(/\~/g, '\\~')
|
||||||
|
.replace(/\`/g, '\\`')
|
||||||
|
.replace(/\>/g, '\\>')
|
||||||
|
.replace(/\#/g, '\\#')
|
||||||
|
.replace(/\+/g, '\\+')
|
||||||
|
.replace(/\-/g, '\\-')
|
||||||
|
.replace(/\=/g, '\\=')
|
||||||
|
.replace(/\|/g, '\\|')
|
||||||
|
.replace(/\{/g, '\\{')
|
||||||
|
.replace(/\}/g, '\\}')
|
||||||
|
.replace(/\./g, '\\.')
|
||||||
|
.replace(/\!/g, '\\!');
|
||||||
|
return text
|
||||||
};
|
};
|
||||||
Array.prototype.random = function() {
|
Array.prototype.random = function() {
|
||||||
return this[Math.floor(this.length * Math.random())];
|
return this[Math.floor(this.length * Math.random())];
|
||||||
@ -1467,13 +1653,14 @@ function setCooldown(user, seconds, type) {
|
|||||||
return cooldown
|
return cooldown
|
||||||
}
|
}
|
||||||
|
|
||||||
function giveExp(user, experience) {
|
async function giveExp(user, experience) {
|
||||||
user.exp += experience
|
user.exp += experience
|
||||||
if (user.exp >= expToUp[user.level]) {
|
for(i in expToUp){
|
||||||
user.level += 1
|
if (user.exp >= expToUp[user.level]) {
|
||||||
user.exp = 0
|
user.exp -= expToUp[user.level]
|
||||||
user.save()
|
user.level += 1
|
||||||
bot.telegram.sendMessage(user.telegram_id, `Ваш уровень повысился до ${user.level}!`)
|
user.save()
|
||||||
|
await bot.telegram.sendMessage(user.telegram_id, `⤴️ Ваш уровень повысился до ${user.level}!`)}
|
||||||
}
|
}
|
||||||
user.save()
|
user.save()
|
||||||
}
|
}
|
||||||
@ -1506,6 +1693,10 @@ async function matPriceUpdate() {
|
|||||||
world.save()
|
world.save()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
generatePromo()
|
||||||
|
}, 360000*3);
|
||||||
|
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
var today = new Date();
|
var today = new Date();
|
||||||
let hours = today.getHours();
|
let hours = today.getHours();
|
||||||
@ -1515,6 +1706,58 @@ setInterval(() => {
|
|||||||
}
|
}
|
||||||
}, 360000);
|
}, 360000);
|
||||||
|
|
||||||
|
async function generatePromo() {
|
||||||
|
let activs = rand(1, 3)
|
||||||
|
let give = rand(1000, 10000)
|
||||||
|
let code = voucher_codes.generate({
|
||||||
|
length: 6,
|
||||||
|
count: 1,
|
||||||
|
prefix: "CMP-",
|
||||||
|
postfix: "-FIRE",
|
||||||
|
charset: voucher_codes.charset("alphanumeric")
|
||||||
|
});
|
||||||
|
let promocode = await PromocodeModel.findOne({
|
||||||
|
where: {
|
||||||
|
code: code[0]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if(promocode === null){
|
||||||
|
await PromocodeModel.create({
|
||||||
|
code: code[0],
|
||||||
|
activations: activs,
|
||||||
|
money: give
|
||||||
|
})
|
||||||
|
let voucherImage = await generateVoucher(code[0], activs, give)
|
||||||
|
return await bot.telegram.sendPhoto(mainChat, {source: voucherImage})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function generateVoucher(code, activations, money) {
|
||||||
|
// загружаем изображение фона
|
||||||
|
const background = await loadImage('./media/imageDefault3.png');
|
||||||
|
|
||||||
|
// создаем новый canvas
|
||||||
|
const canvas = createCanvas(background.width, background.height);
|
||||||
|
const ctx = canvas.getContext('2d');
|
||||||
|
|
||||||
|
// рисуем фоновое изображение
|
||||||
|
ctx.drawImage(background, 0, 0);
|
||||||
|
|
||||||
|
// выводим текст на картинку
|
||||||
|
ctx.font = 'bold 30px Srbija Sans';
|
||||||
|
ctx.fillStyle = '#232323';
|
||||||
|
ctx.textAlign = 'center';
|
||||||
|
ctx.fillText(`${code}`, canvas.width/2, canvas.height/1.90);
|
||||||
|
|
||||||
|
// сохраняем картинку в файл
|
||||||
|
const out = fs.createWriteStream('./media/image.png');
|
||||||
|
const stream = canvas.createPNGStream();
|
||||||
|
stream.pipe(out);
|
||||||
|
|
||||||
|
// возвращаем путь к сгенерированной картинке
|
||||||
|
return './media/image.png';
|
||||||
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|
||||||
bot.launch()
|
bot.launch()
|
97
json/rarecars.json
Normal file
97
json/rarecars.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "BMW 7 Series 2001",
|
||||||
|
"price": 1100000,
|
||||||
|
"image": "https://sun9-1.userapi.com/impg/d5DVc5oNorJw50mw0c1y_4iMA1gmFJQ9bqZ7IQ/uebjpdo7_dg.jpg?size=960x720&quality=96&sign=2e5cb705062b188c15050723a8598722&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mercedes W140 S600 1997",
|
||||||
|
"price": 1300000,
|
||||||
|
"image": "https://sun9-10.userapi.com/impg/_UawxXF4t14mD_6aHahzdibBK5TbATlnW_Yzmg/n38ggX23gFo.jpg?size=959x960&quality=96&sign=911a96d2f290a114f41806de26dd9351&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Audi RS2 1994",
|
||||||
|
"price": 3500000,
|
||||||
|
"image": "https://sun9-37.userapi.com/impg/VnZ3YEAwLuLuF9OKhLdc8000uVH7oXuKt0RKWA/ucQP9J0Fo3A.jpg?size=1600x1200&quality=96&sign=fa9c200d9aedf424cbc9839949f5eeb0&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Lotus Omega 1991",
|
||||||
|
"price": 7000000,
|
||||||
|
"image": "https://sun9-40.userapi.com/impg/z_XO05RQoDz1sexN4jNOOb0VG_lHX9HhyU1hGQ/nPz-SGAgWoQ.jpg?size=1280x800&quality=96&sign=96f0c7b5e7e035433cb19e7a81f664da&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Acura RSX 2003",
|
||||||
|
"price": 1000000,
|
||||||
|
"image": "https://sun9-25.userapi.com/impg/bpq2RE5Olya6nuVmubYay4cH6Ju6akl6kdTaHw/_IAnNsU_HQw.jpg?size=1600x1200&quality=96&sign=e74da55a75a20d6ace2fc00059a975fb&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Honda NSX 1991",
|
||||||
|
"price": 6000000,
|
||||||
|
"image": "https://sun9-78.userapi.com/impg/GocdnvUVxZP1QkkGcJBKI2pMzmitnBlS3uMHOA/BKE2BFk44NQ.jpg?size=1080x1080&quality=96&sign=84eb4a7eae688ab34242bf98c0b3b453&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mazda RX-7 FC 1990",
|
||||||
|
"price": 2000000,
|
||||||
|
"image": "https://sun9-16.userapi.com/impg/KSFDRrsRpHvePQdyFLMYPKJ8fO3r1HBFChItQQ/z3lILSdkoSQ.jpg?size=750x499&quality=96&sign=ce7cfe2238c8d2295f6d59c256a378a7&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Corvette C3 1990",
|
||||||
|
"price": 5000000,
|
||||||
|
"image": "https://sun9-30.userapi.com/impg/S104d3tiupLZNxIag76AzoTD7eSP2c23SnEaFQ/9qGBEj--af4.jpg?size=1024x768&quality=96&sign=86a959a0b03668f412f5d158017e611c&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ford Mustang 302 boss 1970",
|
||||||
|
"price": 5000000,
|
||||||
|
"image": "https://sun9-33.userapi.com/impg/v5msKxJGvCm6_ku5HEVN0BntMV_5nti5VU_uUw/3_9wEI-wmr4.jpg?size=1600x1200&quality=96&sign=207c04e9ce19efd4ed896a1d33c07a8b&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Dodge Viper SRT10 2010",
|
||||||
|
"price": 7000000,
|
||||||
|
"image": "https://static1.topspeedimages.com/wordpress/wp-content/uploads/jpg/200912/2010-dodge-viper-srt10-1.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Alfa Romeo 4c 2015",
|
||||||
|
"price": 10000000,
|
||||||
|
"image": "https://sun9-66.userapi.com/impg/JhQb558Zh_1R7QGzpzMxnNcz5HL95QDPsLHrsA/vUb_j7G-g2M.jpg?size=1342x1920&quality=96&sign=3372c45b71a2aa9eb661cfaa0864875f&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Alfa Romeo Gulia 2020",
|
||||||
|
"price": 3500000,
|
||||||
|
"image": "https://sun9-25.userapi.com/impg/H7d5BjKtcR9_dHqbIec87PHewxJdb76-HmBcdg/4ThAZlSR3vM.jpg?size=1920x1280&quality=96&sign=55afcf8e5e1aefb3943b992d0d5586f7&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Lexus LFA 2012",
|
||||||
|
"price": 24000000,
|
||||||
|
"image": "https://sun9-59.userapi.com/impg/rs2uFK_yhce7n4LrUu6zRuEiMjmAZY1efF7rPw/M6KE-3yrCi0.jpg?size=960x1200&quality=96&sign=446b869ff12b7ec35eff551b01678cc4&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Buick GNX 1987",
|
||||||
|
"price": 7000000,
|
||||||
|
"image": "https://sun9-80.userapi.com/impg/9UoGREtyWSCVLLGFzywnNX_-eDncb1B7Ax63DA/hb3J0XrlYZE.jpg?size=736x1102&quality=96&sign=06ccae23f18eb06b93ba3e46129f7138&type=album"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Chevrolet Corvette Z06, 2006",
|
||||||
|
"price": 4200000,
|
||||||
|
"image": " https://w.forfun.com/fetch/9f/9f237b9f36e27d1fddf442020bd69ff4.jpeg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Porsche 911",
|
||||||
|
"price": 7000000,
|
||||||
|
"image": "https://ivanglazunov.ru/wp-content/uploads/5/3/6/53621ef51acb742df6a27295963e65d4.jpeg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mercedes-Benz C 200",
|
||||||
|
"price": 3500000,
|
||||||
|
"image": "https://avtoshark.com/wp-content/uploads/2020/07/mersedes-c200.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Audi Q5",
|
||||||
|
"price": 4500000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-autoru-vos/5278263/8baf8d9c6f3fabbe19ab206a9b712713/1200x900n"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ferrari F8",
|
||||||
|
"price": 34000000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-autoru-vos/2037331/cd075cbfc2d10c05bb0450dcc889d351/1200x900n"
|
||||||
|
}
|
||||||
|
]
|
57
json/simplecars.json
Normal file
57
json/simplecars.json
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "Subaru Legacy II",
|
||||||
|
"price": 267000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-verba/1540742/2a00000185547e7c4fe6a1ef0a2cccdcc91d/cattouchret"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Peugeot 206",
|
||||||
|
"price": 290000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-verba/1030388/2a000001609d64c298bd8a1807bbd401efe8/cattouchret"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ford Focus II",
|
||||||
|
"price": 350000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-verba/1030388/2a000001609579d292099d1496c4184c3a1a/cattouchret"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Chevrolet Lanos",
|
||||||
|
"price": 250000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a000001609b62fdc53e55145a10f2ec6ecc/cattouchret"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Opel Astra H",
|
||||||
|
"price": 450000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a000001609cedee6fbec659b57da48df99a/cattouchret"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mitsubishi Lancer IX",
|
||||||
|
"price": 380000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a0000016099a4e6be992d7b50134fd908fd/thumb_m_2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mitsubishi Lancer X",
|
||||||
|
"price": 680000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-verba/216201/2a000001609bda17487cc63d8b957ab4aab2/cattouchret"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Cadillac STS I",
|
||||||
|
"price": 420000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-verba/787013/2a000001609c8f446bce6bfd7271b1c276aa/cattouchret"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Toyota Mark II VIII (X100)",
|
||||||
|
"price": 380000,
|
||||||
|
"image": "https://avatars.mds.yandex.net/get-verba/787013/2a000001609d5a2d4aef665d95347c1aea99/cattouchret"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Renault Logan",
|
||||||
|
"price": 400000,
|
||||||
|
"image": "https://cartechnic.ru/800/renault/logan/renault_logan_2013_1.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Mazda 3",
|
||||||
|
"price": 500000,
|
||||||
|
"image": "https://a.d-cd.net/da371e4s-1920.jpg"
|
||||||
|
}
|
||||||
|
]
|
@ -1,52 +1,52 @@
|
|||||||
{
|
{
|
||||||
"0": {
|
"0": {
|
||||||
"name": "SCAR L",
|
"name": "M1911",
|
||||||
"price": 1000,
|
"price": 13000,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"1": {
|
"1": {
|
||||||
"name": "Deagle",
|
"name": "ПМ",
|
||||||
"price": 1000,
|
"price": 13000,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"name": "ПМ",
|
"name": "АКС74У",
|
||||||
"price": 1000,
|
"price": 34999,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"name": "Deagle",
|
"name": "G36C",
|
||||||
"price": 1000,
|
"price": 38999,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"4": {
|
"4": {
|
||||||
"name": "SCAR L",
|
"name": "G36C",
|
||||||
"price": 1000,
|
"price": 38999,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"5": {
|
"5": {
|
||||||
"name": "Бронежилет M4",
|
"name": "Бронежилет M1",
|
||||||
"price": 1000,
|
"price": 25000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"6": {
|
"6": {
|
||||||
"name": "Бронежилет M6",
|
"name": "Бронежилет M2",
|
||||||
"price": 1000,
|
"price": 35000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"7": {
|
"7": {
|
||||||
"name": "Бронежилет M5",
|
"name": "Бронежилет M1",
|
||||||
"price": 1000,
|
"price": 25000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"8": {
|
"8": {
|
||||||
"name": "Картонные накладки",
|
"name": "Бронежилет M2",
|
||||||
"price": 1000,
|
"price": 35000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"9": {
|
"9": {
|
||||||
"name": "Бронежилет M6",
|
"name": "Бронежилет M3",
|
||||||
"price": 1000,
|
"price": 60000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
}
|
}
|
||||||
}
|
}
|
BIN
media/image.png
Normal file
BIN
media/image.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 117 KiB |
BIN
media/imageDefault.png
Normal file
BIN
media/imageDefault.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 MiB |
BIN
media/imageDefault2.png
Normal file
BIN
media/imageDefault2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 270 KiB |
BIN
media/imageDefault3.png
Normal file
BIN
media/imageDefault3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 114 KiB |
493
package-lock.json
generated
493
package-lock.json
generated
@ -9,6 +9,7 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"canvas": "^2.11.2",
|
||||||
"date-fns": "^2.30.0",
|
"date-fns": "^2.30.0",
|
||||||
"dotenv": "^16.3.1",
|
"dotenv": "^16.3.1",
|
||||||
"fs": "^0.0.1-security",
|
"fs": "^0.0.1-security",
|
||||||
@ -20,7 +21,8 @@
|
|||||||
"sequelize": "^6.6.2",
|
"sequelize": "^6.6.2",
|
||||||
"shortid": "^2.2.16",
|
"shortid": "^2.2.16",
|
||||||
"telegraf": "^4.13.1",
|
"telegraf": "^4.13.1",
|
||||||
"uuid": "^9.0.1"
|
"uuid": "^9.0.1",
|
||||||
|
"voucher-code-generator": "^1.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/runtime": {
|
"node_modules/@babel/runtime": {
|
||||||
@ -34,6 +36,53 @@
|
|||||||
"node": ">=6.9.0"
|
"node": ">=6.9.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@mapbox/node-pre-gyp": {
|
||||||
|
"version": "1.0.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
|
||||||
|
"integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"detect-libc": "^2.0.0",
|
||||||
|
"https-proxy-agent": "^5.0.0",
|
||||||
|
"make-dir": "^3.1.0",
|
||||||
|
"node-fetch": "^2.6.7",
|
||||||
|
"nopt": "^5.0.0",
|
||||||
|
"npmlog": "^5.0.1",
|
||||||
|
"rimraf": "^3.0.2",
|
||||||
|
"semver": "^7.3.5",
|
||||||
|
"tar": "^6.1.11"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"node-pre-gyp": "bin/node-pre-gyp"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@mapbox/node-pre-gyp/node_modules/nopt": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"abbrev": "1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"nopt": "bin/nopt.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@mapbox/node-pre-gyp/node_modules/semver": {
|
||||||
|
"version": "7.5.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
|
||||||
|
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
|
||||||
|
"dependencies": {
|
||||||
|
"lru-cache": "^6.0.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@sindresorhus/is": {
|
"node_modules/@sindresorhus/is": {
|
||||||
"version": "0.14.0",
|
"version": "0.14.0",
|
||||||
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
|
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
|
||||||
@ -79,6 +128,38 @@
|
|||||||
"node": ">=6.5"
|
"node": ">=6.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/agent-base": {
|
||||||
|
"version": "6.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
|
||||||
|
"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"debug": "4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/agent-base/node_modules/debug": {
|
||||||
|
"version": "4.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||||
|
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"supports-color": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/agent-base/node_modules/ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
|
},
|
||||||
"node_modules/ajv": {
|
"node_modules/ajv": {
|
||||||
"version": "6.12.6",
|
"version": "6.12.6",
|
||||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||||
@ -154,6 +235,36 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/aproba": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
|
||||||
|
},
|
||||||
|
"node_modules/are-we-there-yet": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
|
||||||
|
"dependencies": {
|
||||||
|
"delegates": "^1.0.0",
|
||||||
|
"readable-stream": "^3.6.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/are-we-there-yet/node_modules/readable-stream": {
|
||||||
|
"version": "3.6.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
|
||||||
|
"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
|
||||||
|
"dependencies": {
|
||||||
|
"inherits": "^2.0.3",
|
||||||
|
"string_decoder": "^1.1.1",
|
||||||
|
"util-deprecate": "^1.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/array.prototype.findindex": {
|
"node_modules/array.prototype.findindex": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.1.0.tgz",
|
||||||
@ -368,6 +479,20 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/canvas": {
|
||||||
|
"version": "2.11.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz",
|
||||||
|
"integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@mapbox/node-pre-gyp": "^1.0.0",
|
||||||
|
"nan": "^2.17.0",
|
||||||
|
"simple-get": "^3.0.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/caseless": {
|
"node_modules/caseless": {
|
||||||
"version": "0.12.0",
|
"version": "0.12.0",
|
||||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||||
@ -424,6 +549,14 @@
|
|||||||
"fsevents": "~2.3.1"
|
"fsevents": "~2.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/chownr": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ci-info": {
|
"node_modules/ci-info": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
|
||||||
@ -464,6 +597,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||||
},
|
},
|
||||||
|
"node_modules/color-support": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
|
||||||
|
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
|
||||||
|
"bin": {
|
||||||
|
"color-support": "bin.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/combined-stream": {
|
"node_modules/combined-stream": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
@ -496,6 +637,11 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/console-control-strings": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
|
||||||
|
},
|
||||||
"node_modules/core-util-is": {
|
"node_modules/core-util-is": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||||
@ -591,6 +737,11 @@
|
|||||||
"node": ">=0.4.0"
|
"node": ">=0.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/delegates": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
|
||||||
|
},
|
||||||
"node_modules/depd": {
|
"node_modules/depd": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
||||||
@ -599,6 +750,14 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/detect-libc": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/dot-prop": {
|
"node_modules/dot-prop": {
|
||||||
"version": "5.3.0",
|
"version": "5.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
|
||||||
@ -787,6 +946,33 @@
|
|||||||
"resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
|
"resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
|
||||||
"integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w=="
|
"integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w=="
|
||||||
},
|
},
|
||||||
|
"node_modules/fs-minipass": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
|
||||||
|
"dependencies": {
|
||||||
|
"minipass": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/fs-minipass/node_modules/minipass": {
|
||||||
|
"version": "3.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
|
||||||
|
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
|
||||||
|
"dependencies": {
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
|
||||||
|
},
|
||||||
"node_modules/fsevents": {
|
"node_modules/fsevents": {
|
||||||
"version": "2.3.2",
|
"version": "2.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
|
||||||
@ -805,6 +991,44 @@
|
|||||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
||||||
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
||||||
},
|
},
|
||||||
|
"node_modules/gauge": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"aproba": "^1.0.3 || ^2.0.0",
|
||||||
|
"color-support": "^1.1.2",
|
||||||
|
"console-control-strings": "^1.0.0",
|
||||||
|
"has-unicode": "^2.0.1",
|
||||||
|
"object-assign": "^4.1.1",
|
||||||
|
"signal-exit": "^3.0.0",
|
||||||
|
"string-width": "^4.2.3",
|
||||||
|
"strip-ansi": "^6.0.1",
|
||||||
|
"wide-align": "^1.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/gauge/node_modules/ansi-regex": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/gauge/node_modules/strip-ansi": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": "^5.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/get-intrinsic": {
|
"node_modules/get-intrinsic": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
|
||||||
@ -846,6 +1070,25 @@
|
|||||||
"assert-plus": "^1.0.0"
|
"assert-plus": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/glob": {
|
||||||
|
"version": "7.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
|
||||||
|
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"fs.realpath": "^1.0.0",
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "^3.1.1",
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"path-is-absolute": "^1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/glob-parent": {
|
"node_modules/glob-parent": {
|
||||||
"version": "5.1.2",
|
"version": "5.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
||||||
@ -956,6 +1199,11 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/has-unicode": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
|
||||||
|
},
|
||||||
"node_modules/has-yarn": {
|
"node_modules/has-yarn": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
|
||||||
@ -983,6 +1231,39 @@
|
|||||||
"npm": ">=1.3.7"
|
"npm": ">=1.3.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/https-proxy-agent": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
|
||||||
|
"dependencies": {
|
||||||
|
"agent-base": "6",
|
||||||
|
"debug": "4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/https-proxy-agent/node_modules/debug": {
|
||||||
|
"version": "4.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||||
|
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"supports-color": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/https-proxy-agent/node_modules/ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
|
},
|
||||||
"node_modules/ignore-by-default": {
|
"node_modules/ignore-by-default": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
|
||||||
@ -1012,6 +1293,15 @@
|
|||||||
"node >= 0.4.0"
|
"node >= 0.4.0"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"node_modules/inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
|
||||||
|
"dependencies": {
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/inherits": {
|
"node_modules/inherits": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
@ -1387,9 +1677,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/minimatch": {
|
"node_modules/minimatch": {
|
||||||
"version": "3.0.4",
|
"version": "3.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"brace-expansion": "^1.1.7"
|
"brace-expansion": "^1.1.7"
|
||||||
},
|
},
|
||||||
@ -1402,6 +1692,48 @@
|
|||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
||||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
|
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
|
||||||
},
|
},
|
||||||
|
"node_modules/minipass": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minizlib": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
|
||||||
|
"dependencies": {
|
||||||
|
"minipass": "^3.0.0",
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minizlib/node_modules/minipass": {
|
||||||
|
"version": "3.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
|
||||||
|
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
|
||||||
|
"dependencies": {
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mkdirp": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
|
||||||
|
"bin": {
|
||||||
|
"mkdirp": "bin/cmd.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/moment": {
|
"node_modules/moment": {
|
||||||
"version": "2.29.1",
|
"version": "2.29.1",
|
||||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
|
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
|
||||||
@ -1434,6 +1766,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
},
|
},
|
||||||
|
"node_modules/nan": {
|
||||||
|
"version": "2.18.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
|
||||||
|
"integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w=="
|
||||||
|
},
|
||||||
"node_modules/nanoid": {
|
"node_modules/nanoid": {
|
||||||
"version": "2.1.11",
|
"version": "2.1.11",
|
||||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz",
|
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz",
|
||||||
@ -1537,6 +1874,17 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/npmlog": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
|
||||||
|
"dependencies": {
|
||||||
|
"are-we-there-yet": "^2.0.0",
|
||||||
|
"console-control-strings": "^1.1.0",
|
||||||
|
"gauge": "^3.0.0",
|
||||||
|
"set-blocking": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/oauth-sign": {
|
"node_modules/oauth-sign": {
|
||||||
"version": "0.9.0",
|
"version": "0.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||||
@ -1545,6 +1893,14 @@
|
|||||||
"node": "*"
|
"node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/object-assign": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/object-inspect": {
|
"node_modules/object-inspect": {
|
||||||
"version": "1.10.2",
|
"version": "1.10.2",
|
||||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz",
|
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz",
|
||||||
@ -1629,6 +1985,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
|
||||||
"integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
|
"integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
|
||||||
},
|
},
|
||||||
|
"node_modules/path-is-absolute": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/performance-now": {
|
"node_modules/performance-now": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||||
@ -1991,6 +2355,20 @@
|
|||||||
"any-promise": "^1.3.0"
|
"any-promise": "^1.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/rimraf": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
|
||||||
|
"dependencies": {
|
||||||
|
"glob": "^7.1.3"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"rimraf": "bin.js"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/safe-buffer": {
|
"node_modules/safe-buffer": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
@ -2152,6 +2530,11 @@
|
|||||||
"uuid": "dist/bin/uuid"
|
"uuid": "dist/bin/uuid"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/set-blocking": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
|
||||||
|
},
|
||||||
"node_modules/shortid": {
|
"node_modules/shortid": {
|
||||||
"version": "2.2.16",
|
"version": "2.2.16",
|
||||||
"resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz",
|
"resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz",
|
||||||
@ -2166,6 +2549,57 @@
|
|||||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
|
||||||
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
|
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
|
||||||
},
|
},
|
||||||
|
"node_modules/simple-concat": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/simple-get": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
|
||||||
|
"dependencies": {
|
||||||
|
"decompress-response": "^4.2.0",
|
||||||
|
"once": "^1.3.1",
|
||||||
|
"simple-concat": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/simple-get/node_modules/decompress-response": {
|
||||||
|
"version": "4.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
|
||||||
|
"integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
|
||||||
|
"dependencies": {
|
||||||
|
"mimic-response": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/simple-get/node_modules/mimic-response": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/split2": {
|
"node_modules/split2": {
|
||||||
"version": "3.2.2",
|
"version": "3.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
|
||||||
@ -2233,22 +2667,22 @@
|
|||||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||||
},
|
},
|
||||||
"node_modules/string-width": {
|
"node_modules/string-width": {
|
||||||
"version": "4.2.2",
|
"version": "4.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||||
"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
|
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"emoji-regex": "^8.0.0",
|
"emoji-regex": "^8.0.0",
|
||||||
"is-fullwidth-code-point": "^3.0.0",
|
"is-fullwidth-code-point": "^3.0.0",
|
||||||
"strip-ansi": "^6.0.0"
|
"strip-ansi": "^6.0.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/string-width/node_modules/ansi-regex": {
|
"node_modules/string-width/node_modules/ansi-regex": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
@ -2267,11 +2701,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/string-width/node_modules/strip-ansi": {
|
"node_modules/string-width/node_modules/strip-ansi": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||||
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
|
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi-regex": "^5.0.0"
|
"ansi-regex": "^5.0.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
@ -2331,6 +2765,22 @@
|
|||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/tar": {
|
||||||
|
"version": "6.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
|
||||||
|
"integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"chownr": "^2.0.0",
|
||||||
|
"fs-minipass": "^2.0.0",
|
||||||
|
"minipass": "^5.0.0",
|
||||||
|
"minizlib": "^2.1.1",
|
||||||
|
"mkdirp": "^1.0.3",
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/telegraf": {
|
"node_modules/telegraf": {
|
||||||
"version": "4.13.1",
|
"version": "4.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/telegraf/-/telegraf-4.13.1.tgz",
|
"resolved": "https://registry.npmjs.org/telegraf/-/telegraf-4.13.1.tgz",
|
||||||
@ -2602,6 +3052,11 @@
|
|||||||
"extsprintf": "^1.2.0"
|
"extsprintf": "^1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/voucher-code-generator": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/voucher-code-generator/-/voucher-code-generator-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-t4wnI91KC58LtjX2I0rJDhRm1JTXD+G7A+7iqp0sRSgpeJP4eKLexDRDLe2nedR7xFQcVlZudDZRBLrMP5+KTA=="
|
||||||
|
},
|
||||||
"node_modules/webidl-conversions": {
|
"node_modules/webidl-conversions": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||||
@ -2631,6 +3086,14 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/wide-align": {
|
||||||
|
"version": "1.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
|
||||||
|
"integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
|
||||||
|
"dependencies": {
|
||||||
|
"string-width": "^1.0.2 || 2 || 3 || 4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/widest-line": {
|
"node_modules/widest-line": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"canvas": "^2.11.2",
|
||||||
"date-fns": "^2.30.0",
|
"date-fns": "^2.30.0",
|
||||||
"dotenv": "^16.3.1",
|
"dotenv": "^16.3.1",
|
||||||
"fs": "^0.0.1-security",
|
"fs": "^0.0.1-security",
|
||||||
@ -22,6 +23,7 @@
|
|||||||
"sequelize": "^6.6.2",
|
"sequelize": "^6.6.2",
|
||||||
"shortid": "^2.2.16",
|
"shortid": "^2.2.16",
|
||||||
"telegraf": "^4.13.1",
|
"telegraf": "^4.13.1",
|
||||||
"uuid": "^9.0.1"
|
"uuid": "^9.0.1",
|
||||||
|
"voucher-code-generator": "^1.3.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,47 +6,47 @@
|
|||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"name": "Картонные накладки",
|
"name": "Картонные накладки",
|
||||||
"price": 1000,
|
"price": 350,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"name": "Шлем танкиста",
|
"name": "Шлем танкиста",
|
||||||
"price": 1000,
|
"price": 10000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"4": {
|
"4": {
|
||||||
"name": "Кольчуга",
|
"name": "Кольчуга",
|
||||||
"price": 1000,
|
"price": 13000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"5": {
|
"5": {
|
||||||
"name": "Бронежилет M1",
|
"name": "Бронежилет M1",
|
||||||
"price": 1000,
|
"price": 25000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"6": {
|
"6": {
|
||||||
"name": "Бронежилет M2",
|
"name": "Бронежилет M2",
|
||||||
"price": 1000,
|
"price": 35000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"7": {
|
"7": {
|
||||||
"name": "Бронежилет M3",
|
"name": "Бронежилет M3",
|
||||||
"price": 1000,
|
"price": 60000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"8": {
|
"8": {
|
||||||
"name": "Бронежилет M4",
|
"name": "Бронежилет M4",
|
||||||
"price": 1000,
|
"price": 110000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"9": {
|
"9": {
|
||||||
"name": "Бронежилет M5",
|
"name": "Бронежилет M5",
|
||||||
"price": 1000,
|
"price": 150000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
},
|
},
|
||||||
"10": {
|
"10": {
|
||||||
"name": "Бронежилет M6",
|
"name": "Бронежилет M6",
|
||||||
"price": 1000,
|
"price": 250000,
|
||||||
"type": "equipment"
|
"type": "equipment"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,52 +1,82 @@
|
|||||||
{
|
{
|
||||||
"1": {
|
"1": {
|
||||||
"name": "ПМ",
|
"name": "ТТ",
|
||||||
"price": 1000,
|
"price": 12000,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"2": {
|
"2": {
|
||||||
"name": "ТТ",
|
"name": "Glock 17",
|
||||||
"price": 1000,
|
"price": 7999,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"3": {
|
"3": {
|
||||||
"name": "FiveSeven",
|
"name": "G36C",
|
||||||
"price": 1000,
|
"price": 38999,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"4": {
|
"4": {
|
||||||
"name": "Deagle",
|
"name": "M1911",
|
||||||
"price": 1000,
|
"price": 13000,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"5": {
|
"5": {
|
||||||
"name": "AK47",
|
"name": "ПМ",
|
||||||
"price": 1000,
|
"price": 13000,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"6": {
|
"6": {
|
||||||
"name": "M4A1",
|
"name": "SIG MCX .300",
|
||||||
"price": 1000,
|
"price": 133999,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"7": {
|
"7": {
|
||||||
"name": "SCAR H",
|
"name": "АК101",
|
||||||
"price": 1000,
|
"price": 49999,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"8": {
|
"8": {
|
||||||
"name": "MP5",
|
"name": "HK UMP",
|
||||||
"price": 1000,
|
"price": 33999,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"9": {
|
"9": {
|
||||||
"name": "SCAR L",
|
"name": "ПП19 `Бизон`",
|
||||||
"price": 1000,
|
"price": 24999,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
},
|
},
|
||||||
"10": {
|
"10": {
|
||||||
"name": "Glock",
|
"name": "АКС74У",
|
||||||
"price": 1000,
|
"price": 34999,
|
||||||
|
"type": "weapon"
|
||||||
|
},
|
||||||
|
"11": {
|
||||||
|
"name": "M4A1",
|
||||||
|
"price": 56999,
|
||||||
|
"type": "weapon"
|
||||||
|
},
|
||||||
|
"12": {
|
||||||
|
"name": "CheyTac M200 `Intervention`",
|
||||||
|
"price": 1400000,
|
||||||
|
"type": "weapon"
|
||||||
|
},
|
||||||
|
"13": {
|
||||||
|
"name": "SR25",
|
||||||
|
"price": 259999,
|
||||||
|
"type": "weapon"
|
||||||
|
},
|
||||||
|
"14": {
|
||||||
|
"name": "ВСС `Винторез`",
|
||||||
|
"price": 120999,
|
||||||
|
"type": "weapon"
|
||||||
|
},
|
||||||
|
"15": {
|
||||||
|
"name": "HK417",
|
||||||
|
"price": 388999,
|
||||||
|
"type": "weapon"
|
||||||
|
},
|
||||||
|
"16": {
|
||||||
|
"name": "СВД",
|
||||||
|
"price": 199999,
|
||||||
"type": "weapon"
|
"type": "weapon"
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user