91 lines
4.1 KiB
JavaScript
91 lines
4.1 KiB
JavaScript
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(); |