-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathhandler.js
83 lines (71 loc) · 2.07 KB
/
handler.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
'use strict'
const reload = require('./reloader')
const fs = require('fs')
function roomName(message) {
return message.room() ? message.room().topic() : 'self'
}
function userName(message) {
return message.from().name()
}
function content(message) {
return message.content()
}
function cleanContent(prefix, message) {
var messageContent = content(message)
if(messageContent.startsWith(prefix)) {
messageContent = messageContent
.substr(prefix.length)
.trim()
}
return messageContent.trim()
}
function mine(str, prefix) {
return str
.substr(0, prefix.length)
.toLowerCase()
.startsWith(prefix)
}
function destination(message) {
return message.room() ? message.room() : message.from()
}
function isNameAllowed(config, currentRoomName) {
if(config.ignoreName) {
return false
}
return currentRoomName
.toLowerCase()
.indexOf(config.prefix.toLowerCase()) != -1
}
function isWhitelisted(config, currentRoomName) {
if(!config.whitelisted) {
return false
}
return config.whitelisted.indexOf(currentRoomName) != -1
}
function isValidRoom(config, currentRoomName) {
return isWhitelisted(config, currentRoomName) ||
isNameAllowed(config, currentRoomName)
}
function handler(config, data, message) {
const currentRoomName = roomName(message)
if(currentRoomName === 'self' ||
(mine(content(message), config.prefix) &&
isValidRoom(config, currentRoomName))) {
const processor = reload(config.processor)
if(!(data.tickets instanceof Object)) {
data.tickets = processor.load(config.store)
}
if(!data.fs) {
data.fs = fs
}
const reply = processor.process(data, {
content: cleanContent(config.prefix, message),
prefix: config.prefix,
roomName: currentRoomName,
userName: userName(message),
})
processor.store(config.store, data.tickets)
destination(message).say(reply)
}
}
module.exports = handler