From b0de760de9a4d35089eeb5074ed55b9769e1d15e Mon Sep 17 00:00:00 2001 From: Ilya Date: Thu, 22 Dec 2022 18:15:45 +0300 Subject: [PATCH] commit --- Database.js | 10 +++++++--- index.js | 47 ++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/Database.js b/Database.js index de15312..1e2f6e7 100644 --- a/Database.js +++ b/Database.js @@ -80,13 +80,13 @@ class Database { let prevtasks = 0; try { await client.query('BEGIN'); - let res = await client.query('SELECT * FROM qr_view WHERE task < $1 AND group_id = $2', [task, team]); + let res = await client.query('SELECT * FROM qr_view WHERE task = $1 AND group_id = $2', [task-1, team]); prevtasks = res.rowCount; await client.query('COMMIT'); } finally { client.release(); } - return prevtasks === task - 1; + return prevtasks > 0; } async getTeam(user) { @@ -107,7 +107,11 @@ class Database { let client = await this.pool.connect(); try { await client.query('BEGIN'); - await client.query('INSERT INTO qr_completion (group_id, task) values ($1,$2)', [team, task]); + //add completion if not exists + let res = await client.query('SELECT * FROM qr_completion WHERE group_id = $1 AND task = $2', [team, task]); + if(res.rowCount === 0) { + await client.query('INSERT INTO qr_completion (group_id, task) values ($1,$2)', [team, task]); + } await client.query('COMMIT'); } finally { client.release(); diff --git a/index.js b/index.js index 86de639..bfefff2 100644 --- a/index.js +++ b/index.js @@ -24,37 +24,66 @@ bot.start(async (ctx) => { if (team == null) return; let task = await database.getQRTask(code); if (task == null) return; - if (!await database.checkPreviousTasks(team.id,task.id)) { + 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) + ")"); - await ctx.reply(task.id + ") \n" + task.task_text); + 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; + 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"; + 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Где обитают допуски?"); + await ctx.reply("Группа зарегистрирована.\nЛиса на девятом небе отдыхает, найдёшь ли ты её?"); ctx.session.state = undefined; - await bot.telegram.sendMessage(-879242326, "Группа " + group + " зарегистрирована by "+ctx.from.first_name+"", {parse_mode: "HTML"}); + await bot.telegram.sendMessage(-879242326, "Группа " + group + " зарегистрирована by " + ctx.from.first_name + "", {parse_mode: "HTML"}); } } });