This repository has been archived on 2024-05-27. You can view files and clone it, but cannot push or open issues or pull requests.
QRQuest/index.js
2022-12-22 18:15:45 +03:00

91 lines
4.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 <a href=\"tg://user?id=" + ctx.from.id + "\">" + ctx.from.first_name + "</a>", {parse_mode: "HTML"});
}
}
});
bot.startPolling();