-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
70 lines (54 loc) · 1.41 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
'use strict';
const R = require('ramda');
const Telegraf = require('telegraf');
const { hash, uri, useTemplate } = require('./utils');
const config = require('./loadconfig');
const bot = new Telegraf(config.token);
R.mapObjIndexed(
(text, name) =>
bot.command(name, ctx =>
ctx.reply(useTemplate(text))),
config.commands);
const requireSubFiles = prop => R.compose(
R.fromPairs,
R.map(R.converge(
R.pair, [
R.prop('name'),
R.compose(
require,
R.concat('./'),
R.prop(prop))
])),
R.filter(R.has(prop)));
const urlTransformers =
requireSubFiles('urlTransformer')(config.sources);
const makeURL = (base, query) => query.length > 0
? base + uri(query)
: base + uri(config.emptyMessage);
const createArticle = async (name, base, query, transformer) => ({
description: query,
id: hash(name + ':' + query),
input_message_content: {
disable_web_page_preview: !config.preview,
message_text: transformer
? await transformer(makeURL(base, query))
: makeURL(base, query)
},
title: name,
type: 'article'
});
bot.on('inline_query', async ctx => {
const query = ctx.inlineQuery.query.trim();
const articles = await Promise.all(config.sources
.map(source =>
createArticle(
source.name,
source.baseURL,
query,
urlTransformers[source.name])));
return ctx.answerInlineQuery(articles, {
cache_time: config.cacheTime
});
});
bot.catch(console.error);
bot.startPolling();