57 lines
1.5 KiB
JavaScript
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();
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|