forked from MMRIZE/MMM-NotificationTrigger
/
MMM-NotificationTrigger.js
98 lines (93 loc) · 2.59 KB
/
MMM-NotificationTrigger.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
//
// Module : MMM-NotificationTrigger
//
Module.register("MMM-NotificationTrigger", {
defaults: {
useWebhook: false,
triggers:[
{
trigger: "SAMPLE_INCOMINIG_NOTIFICATION",
triggerSenderFilter: (sender) => {
return true
},
triggerPayloadFilter: (payload) => {
return true
},
fires: [
{
fire:"SAMPLE_OUTGOING_NOTIFICATION",
payload: (payload) => {
return payload
},
delay: 0,
exec: ""
},
],
},
]
},
start: function() {
this.sendSocketNotification("INIT")
},
socketNotificationReceived: function(notification, payload) {
if (notification == "WEBHOOK" && this.config.useWebhook) {
this.notificationReceived(payload.notification, payload.payload, payload.sender)
}
if (notification == "EXEC_RESULT") {
this.sendNotification(payload.fire + "_RESULT", payload)
console.log("[NOTTRG] Execution Result: ", payload)
}
},
notificationReceived: function (notification, payload, sender) {
var triggers = this.config.triggers
for(i in triggers) {
var trigger = triggers[i]
if (notification == trigger.trigger) {
var senderFilter = (trigger.triggerSenderFilter)
? trigger.triggerSenderFilter
: this.defaults.triggers[0].triggerSenderFilter
var payloadFilter = (trigger.triggerPayloadFilter)
? trigger.triggerPayloadFilter
: this.defaults.triggers[0].triggerPayloadFilter
if (senderFilter(sender) && payloadFilter(payload)) {
for(j in trigger.fires) {
var fire = trigger.fires[j]
var payload_result = payload
if (typeof fire.payload == "function") {
payload_result = fire.payload(payload)
} else if (fire.payload) {
payload_result = fire.payload
}
var exec_result = fire.exec
if (exec_result && typeof exec_result == "function") {
exec_result = exec_result(payload)
}
if(fire.delay) {
setTimeout((fire, trigger, payload, exec) => {
this.sendNotification(fire, payload)
console.log(`[NOTTRG] ${fire.fire} is emitted.`)
if (exec) {
this.sendSocketNotification("EXEC", {
trigger:trigger,
fire: fire,
exec: exec
})
}
}, fire.delay, fire.fire, trigger.trigger, payload_result, exec_result)
} else {
this.sendNotification(fire.fire, payload_result)
console.log(`[NOTTRG] ${fire.fire} is emitted.`)
if (exec_result) {
this.sendSocketNotification("EXEC", {
trigger:trigger.trigger,
fire: fire.fire,
exec: exec_result
})
}
}
}
}
}
}
},
})