Files
telegramBot/tgBot.js
2020-05-15 23:38:15 +02:00

107 lines
4.5 KiB
JavaScript

const fetch = require("node-fetch");
var mysql = require('mysql');
const TelegramBot = require('node-telegram-bot-api');
const tgInfo = require('./telegram-credentials');
if (!tgInfo.token) {
console.error("ERR: credentials not set.")
return;
}
var connection = mysql.createPool({
host: 'localhost',
user: 'simcompanies',
password: '',
database: 'simcompanies'
});
function twoDigits(d) {
if (0 <= d && d < 10) return "0" + d.toString();
if (-10 < d && d < 0) return "-0" + (-1 * d).toString();
return d.toString();
}
Date.prototype.toMysqlFormat = function () {
return this.getFullYear() + "-" + twoDigits(1 + this.getMonth()) + "-" + twoDigits(this.getDate()) + " " + twoDigits(this.getHours()) + ":" + twoDigits(this.getMinutes()) + ":" + twoDigits(this.getSeconds());
};
const init = async () => {
const resourceAPI = "https://www.simcompanies.com/api/v3/en/encyclopedia/resources/";
var resourceList = await fetch(resourceAPI);
resourceList = await resourceList.json();
const tgBot = new TelegramBot(tgInfo.token, { polling: true });
tgBot.onText(/\/resource (.+)/, (msg, match) => {
const chatId = msg.chat.id;
var resource = match[1];
resource = resourceList.find(function (elem) {
return elem["name"].toUpperCase() === resource.toUpperCase();
});
if (!resource)
return tgBot.sendMessage(chatId, `DASH - Simcompany bot made by OTB\nThe resource you are looking for could not be found. Please make sure, you spelled the name correctly. eg. "Mining Research."`);
tgBot.sendMessage(chatId, `DASH - Simcompany bot made by OTB\nI see you are looking for some information about ${resource["name"]}.\nPlease tell me which quality you are looking for:`, {
reply_markup: {
inline_keyboard: [[
{
text: 'q0',
callback_data: resource["db_letter"] + '|0|' + resource["name"]
},
{
text: 'q1',
callback_data: resource["db_letter"] + '|1|' + resource["name"]
}], [
{
text: 'q2',
callback_data: resource["db_letter"] + '|2|' + resource["name"]
},
{
text: 'q3',
callback_data: resource["db_letter"] + '|3|' + resource["name"]
}], [
{
text: 'q4',
callback_data: resource["db_letter"] + '|4|' + resource["name"]
},
{
text: 'q5',
callback_data: resource["db_letter"] + '|5|' + resource["name"]
}], [
{
text: 'q6',
callback_data: resource["db_letter"] + '|6|' + resource["name"]
},
{
text: 'q7',
callback_data: resource["db_letter"] + '|7|' + resource["name"]
},
]]
}
});
});
tgBot.on("callback_query", (data) => {
const msgData = data.data.split("|");
var dayend = new Date().toMysqlFormat();
var daybegin = new Date();
daybegin.setDate(daybegin.getDate() - 1);
daybegin = daybegin.toISOString().slice(0, 19).replace('T', ' ');
const querystring = `SELECT AVG(price) as avg, MIN(price) as min, MAX(price) as max FROM marketv2 WHERE kind = ${mysql.escape(msgData[0])} AND time > "${daybegin}" AND time < "${dayend}" AND quality = ${mysql.escape(msgData[1])} GROUP BY quality`;
connection.query(querystring, function (error, results, fields) {
if (error) {
console.error(error);
return tgBot.sendMessage(data.message.chat.id, "ERR: sorry, I had trouble querying the database.")
}
if (!results[0]) {
return tgBot.sendMessage(data.message.chat.id, "WRN: sorry, I didn't find any data matching your request.")
}
tgBot.sendMessage(data.message.chat.id, `DASH - Simcompany bot made by OTB\nInformation displayed for ${msgData[2]} q${msgData[1]}\nHighest price (24h): ${results[0]["max"]}\nAverage price (24h): ${results[0]["avg"]}\nLowest price (24h): ${results[0]["min"]}\n`)
});
});
}
init();