-
Notifications
You must be signed in to change notification settings - Fork 5
/
notify.js
109 lines (92 loc) · 3.61 KB
/
notify.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
'use strict';
/**
* Module dependencies.
*/
const
Promise = require('bluebird'),
path = require('path'),
mongoose = require('mongoose'),
autoIncrement = require('mongoose-auto-increment'),
debug = require('debug'),
dotenv = require('dotenv'),
requireDir = require('require-dir'),
_ = require('underscore'),
TelegramBot = require('node-telegram-bot-api');
/**
* Application specific configurations.
*/
debug.enable('telegrambot-reanderman:notify');
const
log = debug('telegrambot-reanderman:notify'),
env = process.env;
dotenv.load({
path: path.join(__dirname, '.env')
});
_.defaults(env, {
NODE_ENV: 'development',
PORT: 9000
});
const
message = [
'*[공지]*',
'안녕하세요 여러분, 개발자 Presott 입니다.',
'업데이트 내역이 있어서 이렇게 메세지로 찾아뵙게 되었습니다!',
'',
'*4/17 업데이트 내역*',
'- 피드 가독성 향상',
'피드 가독성을 향상했습니다. 제보해주신 Stig KJ 님 감사합니다!',
'',
'- 광고 추가 (또르르...)',
'이제 3일~1주일에 한번씩 개발자가 만드는 서비스의 광고 메세지가 발송됩니다',
'매달 AWS에 서버 사용료를 지불하고 있지만, 사비를 들이다 보니 부담이 가는 실정입니다.',
'그래서 부득이하게 광고를 추가하게 되었습니다 T.T',
'광고는 오직 개발자가 만든 서비스를 소개하는 용도로만 발송되며, 제3자의 광고는 나가지 않습니다.',
'또한, 최대한 불편하시지 않도록 주기를 최소 3일로 설정해두었습니다.',
'불편하신 분들께서는 아래 Github 프로젝트를 방문하시어 광고가 없는 RSS봇을 직접 운영하실 수도 있습니다',
'',
'- 오픈소스 프로젝트로 공개',
'이제 RSS 봇이 오픈소스 프로젝트로 공개되었습니다.',
'프로젝트에 star를 쏘아주세요! Contribute도 환영입니다! :)',
'[Github 저장소 바로가기](https://github.com/mooyoul/telegrambot-readerman)',
'',
'혹시라도 사용 도중 기능이 제대로 동작하지 않거나 불편하신 사항이 있으시다면 [@mooyoul](https://telegram.me/mooyoul) 계정으로 메세지를 남겨주시면 감사하겠습니다.',
'[친구추가 바로가기](https://telegram.me/mooyoul)',
'그럼, 즐거운 주말 되세요. 감사합니다!'
].join('\n');
/**
* Creates an Application.
*/
const db = mongoose.connect(process.env.MONGO_URL, { options: { db: { safe: true } } }, (e) => {
if (e) throw e;
log('Connected to mongodb.');
mongoose.set('debug', process.env.NODE_ENV === "development");
autoIncrement.initialize(db);
// Bootstrap models
requireDir('./models');
log('Bootstrapped models.');
const
bot = new TelegramBot(env.TELEGRAM_BOT_TOKEN, {
webHook: false,
polling: false
});
log('Created bot. Getting Users...');
// Bootstrap commands
const User = mongoose.model('User');
User.find()
.exec((e, users) => {
log('Fetched %d users', users.length);
Promise.map(users.map((user) => user.id), (id) => {
return bot.sendMessage(id, message, {
parse_mode: 'Markdown'
}).then(() => {
return Promise.resolve(true);
}).catch((e) => {
console.error(e);
return Promise.resolve(false);
});
}, {concurrency: 10}).then((results) => {
log('sent: %d, failed: %d', results.filter((x) => x).length, results.filter((x) => !x).length);
process.exit(0);
});
});
});