-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathindex.js
148 lines (125 loc) · 4.79 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
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
require('dotenv').config();
if (process.env.IS_IT_UP_TOKEN == undefined) {
console.error("You have to set the environment variable IS_IT_UP_TOKEN with your telegram token.");
process.exit(1);
}
let token = process.env.IS_IT_UP_TOKEN;
let trackFeature = process.env.IS_IT_UP_TRACK && process.env.IS_IT_UP_TRACK == 'true';
console.log("Running! \u{1F604}");
// External Modules
let TelegramBot = require('node-telegram-bot-api');
let telegram = new TelegramBot(token, {
polling: true,
onlyFirstMatch: true
});
// My Modules
let Regex = require('./util/Regex.js');
let Message = require('./util/Message.js');
let Verifier = require('./feature/Verifier.js');
// first message
telegram.onText(Regex.startOrHelpRegex, (msg, match) => {
msgId = msg.chat.id;
telegram.sendMessage(msgId, Message.welcomeFirstStep(msg.from.first_name));
telegram.sendMessage(msgId, Message.welcomeSecondStep);
});
// verify urls
telegram.onText(Regex.urlRegex, (msg, match) => {
Verifier.verifyUrl(msg, match, verifyCallback);
});
telegram.onText(Regex.verifyUrlRegex, (msg, match) => {
match[0] = match[0].split(' ')[1];
Verifier.verifyUrl(msg, match, verifyCallback);
});
function verifyCallback(msg, url, success, statusCode) {
if (success) {
// status code of client or server error
if (statusCode >= 400 && statusCode < 600) {
telegram.sendMessage(
msg.chat.id,
Message.clientOrServerErrorStatus(url, statusCode)
);
} else {
// seems successful
telegram.sendMessage(msg.chat.id, Message.successStatus(url));
}
} else {
// seems down
telegram.sendMessage(msg.chat.id, Message.errorStatus(url));
}
}
// wrong usage
telegram.onText(Regex.justVerifyRegex, (msg) => {
telegram.sendMessage(msg.chat.id, Message.verifyHowToUse);
});
telegram.onText(Regex.justTrackRegex, (msg) => {
telegram.sendMessage(msg.chat.id, Message.trackHowToUse);
});
// not found
telegram.on('message', msg => {
let textMessage = msg.text;
let chatId = msg.chat.id;
// verify if match with any regex from user
if (textMessage == undefined || Regex.isRegexMatch(textMessage)) return;
// Verify if its a group call
if (Regex.usernameCallRegex.exec(textMessage) &&
(match = Regex.usernameCallLinkRegex.exec(textMessage))
) {
match[0] = match[0].split(' ')[1];
Verifier.verifyUrl(msg, match, verifyCallback);
} else if (Regex.usernameCallRegex.exec(textMessage) || msg.chat.type != 'group') {
// Group call without link or not a group call
console.log("error: " + textMessage);
telegram.sendMessage(chatId, Message.didntUnderstand);
}
});
// track feature
if (trackFeature) {
console.log("with track feature");
var track = new(require('./feature/Track'))();
// receive a track request
telegram.onText(Regex.trackUrlRegex, (msg, match) => {
match[0] = match[0].split(' ')[1];
Verifier.verifyUrl(msg, match, (msg, url, success, statusCode) => {
verifyCallback(msg, url, success, statusCode);
track.addUrl(url, msg.chat.id, success);
console.log(`${url} added to track list`);
telegram.sendMessage(msg.chat.id, Message.addedToTrackList(url));
telegram.sendMessage(msg.chat.id, Message.trackListHowToUse);
});
});
//receive a track list request
telegram.onText(Regex.trackListRegex, (msg, match) => {
track.getAllFromUser(msg.chat.id, (msgId, urls) => {
telegram.sendMessage(msgId, Message.getListMessage(urls));
});
});
// delete an url
telegram.onText(Regex.deleteTrackRegex, function(msg, match) {
track.getAllUrlsKeyBoard(msg.chat.id, keyboard => {
if (keyboard != null) {
telegram.sendMessage(msg.from.id, 'Choose an url to delete', keyboard);
} else {
telegram.sendMessage(msg.from.id, Message.urlNotFound);
}
})
});
// callback from custom keyboard(just when it is a delete action)
telegram.on("callback_query", function(callbackQuery) {
track.deleteUrl(callbackQuery.from.id, callbackQuery.data,
(success, msgId) => {
if (success) {
telegram.sendMessage(msgId, Message.deleteSuccess);
} else {
telegram.sendMessage(msdId, Message.deleteError);
}
});
});
// setup verification
track.scheduleVerification((url, msgId, status) => {
if (status) {
telegram.sendMessage(msgId, Message.successStatus(url) + Message.checkedAt);
} else {
telegram.sendMessage(msgId, Message.errorStatus(url) + Message.checkedAt);
}
});
}