tkd-api/node_modules/telebot/lib/webhook.js

57 lines
1.5 KiB
JavaScript

const fs = require('fs');
const url = require('url');
const http = require('http');
const https = require('https');
module.exports = (bot, opt) => {
const token = '/' + bot.token;
const host = opt.host || '0.0.0.0';
const port = opt.port || 443;
const path = url.parse(opt.url).pathname;
const key = opt.key && fs.readFileSync(opt.key);
const cert = opt.cert && fs.readFileSync(opt.cert);
// Create server
const server = key && cert ?
https.createServer({key, cert}, listener) :
http.createServer(listener);
// Start server
server.listen(port, host, () => {
if (bot.logging) {
console.log(`[bot.webhook] started${key ? ' secure' : ''} server on "${host}:${port}"`);
}
});
// Request listener
function listener(req, res) {
const botUrl = path && path !== '/' ? path : '';
const fullPath = botUrl + token;
if (req.url === fullPath && req.method === 'POST') {
let body = '';
req.on('data', (data) => body += data);
req.on('end', () => {
try {
const update = JSON.parse(body);
bot.receiveUpdates([update]).then(() => res.end());
} catch (error) {
if (bot.logging) {
console.log('[bot.error.webhook]', error);
}
res.end();
}
});
}
}
};