const Telegraf = require('telegraf'); const Database = require('./Database'); const session = require('telegraf/session'); let database = new Database(process.env.DATABASE_URL); let bot = new Telegraf.Telegraf(process.env.TOKEN); bot.use(session()); bot.start(async (ctx) => { let code = ctx.message.text.split(" ")[1]; if (!code) { await ctx.reply("Добро пожаловать на QR квест! Для участия используйте QR коды"); return; } switch (code) { case "shaman": { ctx.session.state = "register"; await ctx.reply("Введите название группы"); break; } default: { let team = await database.getTeam(ctx.from.id); if (team == null) return; let task = await database.getQRTask(code); if (task == null) return; if (!await database.checkPreviousTasks(team.id, task.id)) { await ctx.reply("Вы не выполнили предыдущие задания или это одно из прошлых заданий"); return; } await database.addView(team.id, task.id); await database.addCompletion(team.id, task.id - 1); let pTask = await database.getTask(task.id - 1); await bot.telegram.sendMessage(-879242326, "Команда " + team.team_name + " получила задание " + task.short_name + "(" + task.id + ") и закончила задание " + pTask.short_name + "(" + (task.id - 1) + ")"); if (code === "freead") { await ctx.reply(task.id + ") \n" + task.task_text, Telegraf.Extra.markup((m) => m.inlineKeyboard([[m.callbackButton("Проверить выполнение", "check")]]))); } else { await ctx.reply(task.id + ") \n" + task.task_text); } } } }); bot.command("top", async (ctx) => { if (ctx.chat.id !== -879242326) return; let top = await database.getTop(); let message = "Топ команд:\n"; for (let i = 0; i < top.length; i++) { message += (i + 1) + ". " + top[i].team_name + " - " + top[i].count + " заданий\n"; } await ctx.reply(message); }); bot.action("check", async (ctx) => { bot.telegram.getChatMember("@ks54_op5", ctx.from.id).then(async (member) => { if(member.status === "left") { await ctx.answerCbQuery("Вы не состоите в @ks54_op5"); return; } bot.telegram.getChatMember("@studsovet_ks54", ctx.from.id).then(async (mem) => { if (mem.status === "left") { await ctx.answerCbQuery("Вы не состоите в @studsovet_ks54"); return; } let team = await database.getTeam(ctx.from.id); if (team == null) return; await bot.telegram.sendMessage(-879242326, "Команда " + team.team_name + " завершила прохождение квеста!"); await ctx.editMessageText("Поздравляем с прохождением QR квеста! Вы можете спускаться к Деду Морозу.") }).catch(async (err) => { await ctx.answerCbQuery("Вы не состоите в @studsovet_ks54"); }); }).catch(async (err) => { await ctx.answerCbQuery("Вы не состоите в @ks54_op5"); }); }); bot.on('text', async (ctx) => { switch (ctx.session.state) { case "register": { let group = ctx.message.text; await database.registerQRTeam(group, ctx.from.id); await ctx.reply("Группа зарегистрирована.\nЛиса на девятом небе отдыхает, найдёшь ли ты её?"); ctx.session.state = undefined; await bot.telegram.sendMessage(-879242326, "Группа " + group + " зарегистрирована by " + ctx.from.first_name + "", {parse_mode: "HTML"}); } } }); bot.startPolling();