This repository was archived by the owner on Apr 12, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmessages.js
More file actions
166 lines (126 loc) · 5.32 KB
/
messages.js
File metadata and controls
166 lines (126 loc) · 5.32 KB
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/**
* Compile the body of the message and possibily the inline keyboard for a specified
* payload.
*/
const { Keyboard, Key } = require('telegram-keyboard');
const [lessonsNow, lessonsNext, lessonsAll, lessonsOne, lessonsCalendar] = require("./lessons");
/**
* data structure
* type: hello|tellme|courses|course
*
*/
function compileMessage(data) {
console.log("compileMessage : "+data.type);
// Hello message
if (data.type == "hello") {
let keyboard = Keyboard.make([
[
Key.callback('🤡 Che succede', 'tellme'),
Key.callback('📚 Corsi', 'courses')
], [
Key.callback('📆 Calendario', 'calendar')
]
])
return {
message: `👋 Ciao!\nQuesto bot ti dice i corsi e le lezioni per il secondo anno di ingegneria informatica a UniPD.\nScegli un opzione dal menù qui sotto.`,
inlineKeyboard: keyboard.inline().reply_markup
}
}
// Information about the current class, possibily the next
else if (data.type == "tellme") {
let ls = lessonsNow();
// Creating the keyboard with the upcoming classes
let keyboard = Keyboard.make([
...Object.keys(ls).map(i => {return [Key.callback(ls[i].course.emoji + " "+ls[i].course.name, "course."+ls[i].courseid+"[tellme]")]}),
[Key.callback('◀️ Indietro', 'hello')],
])
let message = `*🤡 Che succede*\n\n`;
// If there are no other classes today...
if (ls.reduce((c, a) => {c+=(a!=null)}, 0) == 0) {
message += `Per oggi non ci sono altre lezioni.`;
// Looking ahead and finding the next lession
let nls = lessonsNext();
if (Object.keys(nls).length != 0)
message += `\nLa prossima lezione è ${nls.deltaDays == 1 ? "domani" : `tra ${nls.deltaDays} giorni`} alle ${parseLessionTime(nls.from)} di _${nls.course.emoji} ${nls.course.name}_.`
}
else {
// Creating the message
for (var i in ls) {
message += `*${ls[i].course.emoji} ${ls[i].course.name}*\n${parseLessionTime(ls[i].from)} → ${parseLessionTime(ls[i].to)}\n\n💻 `;
// Adding the zoom link if available
message += (ls[i].course.zoom != null ? `[Link Zoom](${ls[i].course.zoom})` : "_Nessun link Zoom_")
message += "\n\n";
}
}
return {
message,
inlineKeyboard: keyboard.inline().reply_markup
}
}
// Information about all the courses in this semester
else if (data.type == "courses") {
let ls = lessonsAll();
let courseKeyboard = Object.keys(ls).map(k => {return [Key.callback(ls[k].emoji + " "+ls[k].name, "course."+k+"[courses]")]});
let keyboard = Keyboard.make([...courseKeyboard,[Key.callback('◀️ Indietro', 'hello')] ])
return {
message: `*📚 Corsi*\nQuesto semestre c'è:`,
inlineKeyboard: keyboard.inline().reply_markup
}
}
// More detailed information about one specific course
else if (/^course\.([a-z0-9]+)(\[[a-z]+\])?$/.test(data.type)) {
let thisCourse = lessonsOne(data.type.match(/^course\.([a-z0-9]+)(\[[a-z]+\])?$/)[1]);
// Backlink is not to the home if the callback data is course.<ID>[<Go back to page>]
let keyboard = Keyboard.make([Key.callback('◀️ Indietro', (data.type.match(/^course\.([a-z0-9]+)(\[[a-z]+\])?$/)[2] != undefined ? data.type.match(/^course\.([a-z0-9]+)(\[([a-z]+)\])?$/)[3] : "hello"))])
// Class not found
if (thisCourse == undefined) {
return {
message: `*📖 Corso*\n_Corso non trovato..._`,
inlineKeyboard: keyboard.inline().reply_markup
}
}
let message = `*${thisCourse.emoji} ${thisCourse.name}*\n_${thisCourse.prof}_\n\n`;
if (thisCourse.moodle != null)
message += `🌐 [Moodle](${thisCourse.moodle})\n`;
if (thisCourse.email != null)
message += `📧 [${thisCourse.email}](mailto:${thisCourse.email})\n`;
if (thisCourse.moodle != null || thisCourse.email != null)
message += `\n`;
if (thisCourse.zoom != null)
message += `💻 [Link Zoom](${thisCourse.zoom})\n`;
if (thisCourse.links != null && thisCourse.links.length > 0) {
for (var i = 0; i < thisCourse.links.length; i++)
message += `${thisCourse.links[i][0]} [${thisCourse.links[i][1].split("/")[2]}](${thisCourse.links[i][1]})\n`;
message += `\n`;
}
if (thisCourse.note != null)
message += `🗒 _${thisCourse.note}_\n`;
return {
message,
inlineKeyboard: keyboard.inline().reply_markup
}
}
else if (data.type == "calendar") {
let fullCalendar = lessonsCalendar();
const weekDays = ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"];
let message = `*📆 Calendario*\n\n`;
for (var d=0; d < 7; d++) {
// Is there something here?
if (fullCalendar[d].length == 0)
continue;
message += `*${weekDays[d]}*\n`;
for (var c in fullCalendar[d])
message += `\`${fullCalendar[d][c][1] < 1000 ? " " : ""}${parseLessionTime(fullCalendar[d][c][1])}\` ${lessonsOne(fullCalendar[d][c][0]).emoji} ${lessonsOne(fullCalendar[d][c][0]).name}\n`;
message += `\n`;
}
let keyboard = Keyboard.make([Key.callback('◀️ Indietro', 'hello')])
return {
message,
inlineKeyboard: keyboard.inline().reply_markup
}
}
}
function parseLessionTime(t) {
return `${Math.floor(t/100)}:${t - Math.floor(t/100) * 100}`;
}
module.exports = compileMessage;