112 lines
4.3 KiB
JavaScript
112 lines
4.3 KiB
JavaScript
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();
|