This repository has been archived by the owner on Jan 6, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
functions.js
130 lines (120 loc) · 4.71 KB
/
functions.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
const config = require('./config')
module.exports = {
/**
* Préfixe un message avec le gitterPrefix et l'envoie dans le salon
* @param room Objet représentant le salon
* @param message Message à envoyer
*/
sendGitterMessage: function (room, message) {
room.send(config.gitterPrefix + ' ' + message)
},
/**
* Analyse un message et réagit en conséquence.
* @param room Objet représentant le salon
* @param message Objet représentant le message
*/
parseGitterMessage: function (room, message) {
// Si c'est un nouveau message:
if (message.operation === 'create') {
// On recherche si le bot doit réagir à ce message
const text = message.model.text.toLowerCase()
console.log(text)
const sender = message.model.fromUser.username
// Message du bot
if (config.regexes.botPrefix.exec(text)) {
console.log('[G] Message du bot, on ne fait rien.')
return
}
// Message de salutation
if (config.regexes.greeting.exec(text)) {
this.sendGitterMessage(room, 'Salut @' + sender + '!')
return
}
// Demande au bot
if (config.regexes.botCall.exec(text)) {
const actions = text.split(' ')
if (['status', 'trotg', 'help', 'random', 'rm'].indexOf(actions[1]) === -1) {
this.sendGitterMessage(room, 'Oui @' + sender + ' ? Que veux tu ?')
} else {
switch (actions[1]) {
case 'status':
break
case 'ghorg':
this.sendGitterMessage(room, 'Lien vers l\'organisation de la classe sur Gitter : ' + config.links.gitterOrg)
break
case 'trorg':
this.sendGitterMessage(room, 'Lien vers les tableaux Trello de la classe : ' + config.links.trelloOrg)
break
case 'rm':
console.log(actions)
var prepa = ''
var raison = ''
if (actions.length >= 4 && actions[2] === '-rf' && /^@/g.exec(actions[3])) {
prepa = '\n# Anihilation totale ! Bye ' + actions[3] + ' !\n'
actions.splice(0, 4)
raison = '\n_' + actions.join(' ') + '_'
}
this.sendGitterMessage(room, prepa + raison + '\n![rm -rf](' + config.links.boom + ')')
break
case 'help':
this.sendGitterMessage(room, 'Commandes disponibles : **`/bot ...`**\n\n - `'
+ [
'ghorg',
'trorg',
'help',
'random',
'random list',
'random reset',
].join('`\n - `') + '`')
break
case 'random':
console.log('[G] Random')
// Actions spéciales
if (actions.length === 3) {
console.log('[B] Random : action spéciale')
if (actions[2] === 'reset') {
if (config.states.currentUser === sender) {
this.resetRandomList()
this.sendGitterMessage(room, 'Liste aléatoire remise à zéro')
} else {
this.sendGitterMessage(room, 'Bien essayé, mais non :)')
}
}
if (actions[2] === 'list') {
this.sendGitterMessage(room, '\n**Personnes déjà interrogées :** '
+ config.states.random.done.join(', ')
+ '\n**Personnes restantes :** '
+ config.states.random.students.join(', ')
)
}
} else {
console.log('[B] Random : action normale')
// On prend un nom au hasard:
if (config.states.random.students.length === 0) {
// initialisation de la liste;
this.resetRandomList()
}
const rdm = Math.floor(Math.random() * config.states.random.students.length)
const student = config.states.random.students[rdm]
// Permutation de liste
config.states.random.done.push(student)
config.states.random.students.splice(rdm, 1)
this.sendGitterMessage(room, 'Au hasard, ce sera ... ' + student)
}
return
}
}
return
}
// Status du bot:
if (config.regexes.botStatus.exec(text)) {
this.sendGitterMessage(room, 'Oui @' + sender + ', je suis toujours là')
}
}
},
resetRandomList: function () {
console.log('[B] Reset de la liste random')
config.states.random.students = JSON.parse(JSON.stringify(config.students))
config.states.random.done = []
},
}