const Telegraf = require('telegraf'); const session = require('telegraf/session'); const Database = require('./Database'); const axios = require("axios"); const Stage = require("telegraf/stage"); let bot = new Telegraf.Telegraf(process.env.TOKEN); bot.use(session()); let database = new Database(process.env.DATABASE_URL); bot.use(async (ctx, next) => { let start = new Date(); ctx.userdata = await database.prepareUser(ctx.from.id); await next(); let ms = new Date() - start; try { if (ctx.message && ctx.message.text.startsWith("/")) { let res = await axios.put("https://api.redguy.ru/v1/logs/", { service: 3, content: "Command " + ctx.message.text.split(" ")[0].substring(1) + " processed in " + ms + "ms", level: "info", category: "Santa" }, { headers: { authorization: "Bearer " + process.env.LOGS_TOKEN } }); console.log(res.data) } if (ctx.callbackQuery && ctx.callbackQuery.data) { await axios.put("https://api.redguy.ru/v1/logs/", { service: 3, content: "Callback " + ctx.callbackQuery.data + " processed in " + ms + "ms", level: "info", category: "Santa" }, { headers: { authorization: "Bearer " + process.env.LOGS_TOKEN } }); } } catch (e) { console.log(e) } }); let stage = new Stage(); stage.register(require("./scenes/start")); bot.use(stage.middleware()); bot.start(async (ctx) => { let keyboard = []; let text = `Добро пожаловать в тайного санту студенческого совета ОП5!\n\nТвой статус: ${ctx.userdata.ingame? "В игре" : "Не в игре"}`; if(ctx.userdata.pair==="") { if (ctx.userdata.ingame) { keyboard.push([{ text: "Выйти из игры", callback_data: "exit" }]); } else { keyboard.push([{ text: "Войти в игру", callback_data: "start" }]); } } else { let user = await database.prepareUser(ctx.userdata.pair); text+=`\n\nТы делаешь подарок для:\n ${user.first_name} ${user.last_name} (${user.group_name})\nАллергии: ${user.problems}.`; } await ctx.reply(text, Telegraf.Extra.markup((m) => m.inlineKeyboard(keyboard))); }); bot.action("menu", async (ctx) => { let keyboard = []; let text = `Добро пожаловать в тайного санту студенческого совета ОП5!\n\nТвой статус: ${ctx.userdata.ingame? "В игре" : "Не в игре"}`; if(ctx.userdata.pair==="") { if (ctx.userdata.ingame) { keyboard.push([{ text: "Выйти из игры", callback_data: "exit" }]); } else { keyboard.push([{ text: "Войти в игру", callback_data: "start" }]); } } else { let user = await database.prepareUser(ctx.userdata.pair); text+=`\n\nТы делаешь подарок для:\n ${user.first_name} ${user.last_name} (${user.group_name}\nАллергии: ${user.problems}.`; } await ctx.editMessageText(text, Telegraf.Extra.markup((m) => m.inlineKeyboard(keyboard))); }); bot.action("start", async (ctx) => { await ctx.scene.enter("start"); }); bot.action("exit", async (ctx) => { await database.setGameState(ctx.from.id, false); await ctx.answerCbQuery("Вы вышли из игры"); await ctx.editMessageText(`Добро пожаловать в тайного санту студенческого совета ОП5!\n\nТвой статус: Не в игре`, Telegraf.Extra.markup((m) => m.inlineKeyboard([{text: "Войти в игру", callback_data: "start"}]))); }); bot.command("stats", async (ctx) => { await ctx.reply("Всего игроков: " + (await database.getUsersCount())); }); bot.catch((err, ctx) => console.log(err, ctx)) // Print error and error context to console, no crash bot.startPolling();