-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathTrustRemoteCommands.lua
105 lines (82 loc) · 2.93 KB
/
TrustRemoteCommands.lua
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
local DisposeBag = require('cylibs/events/dispose_bag')
local TrustRemoteCommands = {}
TrustRemoteCommands.__index = TrustRemoteCommands
local default_native_commands = L{
'refa all',
'warp',
'pcmd leave',
'pcmd add',
'pcmd kick',
'pcmd leader',
}
local native_commands_whitelist = L{
}
function TrustRemoteCommands.new(addonSettings)
local self = setmetatable({
addonSettings = addonSettings;
action_events = {};
disposeBag = DisposeBag.new()
}, TrustRemoteCommands)
self:on_init()
return self
end
function TrustRemoteCommands:destroy()
self.disposeBag:destroy()
end
function TrustRemoteCommands:on_init()
local updateNativeCommands = function(settings)
native_commands_whitelist = S(default_native_commands)
self.whitelist = L(settings.remote_commands.whitelist)
for name in self.whitelist:it() do
native_commands_whitelist:add('pcmd add '..name)
native_commands_whitelist:add('pcmd kick '..name)
native_commands_whitelist:add('pcmd leader '..name)
end
native_commands_whitelist = S(native_commands_whitelist)
end
self.disposeBag:add(self.addonSettings:onSettingsChanged():addAction(function(settings)
updateNativeCommands(settings)
end), self.addonSettings:onSettingsChanged())
updateNativeCommands(self.addonSettings:getSettings())
self.action_events.chat_message = windower.register_event('chat message', function(message, sender, mode, gm)
if not gm and self.whitelist:contains(sender) then
local args = string.split(message, ' ')
if args[1] == 'trust' then
windower.send_command('input // '..message)
elseif native_commands_whitelist:contains(message) then
self:handle_native_command(sender, message)
end
end
end)
end
function TrustRemoteCommands:destroy()
if self.action_events then
for _,event in pairs(self.action_events) do
windower.unregister_event(event)
end
end
end
function TrustRemoteCommands:handle_native_command(sender, command)
if L{ 'pcmd add', 'pcmd kick', 'pcmd leader'}:contains(command) then
command = command .. " " .. sender
end
windower.chat.input('/'..command)
addon_message(209, 'Executing remote command from '..sender..': '..command)
end
-- Custom commands
function TrustRemoteCommands:handle_dismiss_trusts()
local cmd = args[1]
if cmd then
local params = ''
for _,v in ipairs(args) do
params = params..' '..tostring(v)
end
if self.commands:contains(cmd) then
windower.send_command('input // trust '..params)
addon_message(209, 'Executing remote command from '..sender..': trust'..params)
else
error('Unknown remote command from '..sender..': trust'..params)
end
end
end
return TrustRemoteCommands