1
1
package gateway
2
2
3
3
import (
4
+ "strings"
5
+
4
6
"github.com/42wim/matterbridge/bridge/config"
5
7
)
6
8
7
9
// returns true if a command was registered (therefore a should not be relayed
8
10
func (r * Router ) handleCommand (msg * config.Message ) bool {
9
- switch text := msg .Text ; text {
10
- case "!chatId" :
11
+ help := `!optout - opt out from all message relaying
12
+ !optoutmedia - only opt out from relaying attachments
13
+ !optin - opt back into chat relaying
14
+ !setwelcome - set channel welcome message (admin)
15
+ !unsetwelcome - clear channel welcome message (admin)
16
+ !help - display this message`
17
+
18
+ isAdmin := r .isAdmin (msg )
19
+ addTextFromCaptions (msg )
20
+ cmd := msg .Text
21
+
22
+ switch {
23
+ case cmd == "!help" :
24
+ r .logger .Debug ("!help" )
25
+ r .replyCmd (msg , help )
26
+ case cmd == "!chatId" :
11
27
r .logger .Infof ("!chatId: %s" , msg .Channel )
12
- case "!optin" :
28
+ case cmd == "!userId" :
29
+ r .logger .Infof ("!userId: %s" , msg .UserID )
30
+ case cmd == "!ping" :
31
+ r .logger .Debug ("!pong: %s,%s" , msg .Channel , msg .UserID )
32
+ r .replyCmd (msg , "pong!" )
33
+ case cmd == "!pingdm" :
34
+ r .logger .Debug ("!pongdm: %s,%s" , msg .Channel , msg .UserID )
35
+ r .replyDM (msg , "pong!" )
36
+ case cmd == "!optin" :
13
37
r .logger .Debugf ("!optin: %s" , msg .UserID )
14
38
r .handleOptOutCmd (msg , OptIn )
15
- case "!optout" :
39
+ case cmd == "!optout" :
16
40
r .logger .Debugf ("!optout: %s" , msg .UserID )
17
41
r .handleOptOutCmd (msg , OptOut )
18
- case "!optoutmedia" :
42
+ case cmd == "!optoutmedia" :
19
43
r .logger .Debugf ("!optoutmedia: %s" , msg .UserID )
20
44
r .handleOptOutCmd (msg , OptOutMediaOnly )
21
- case "!help" :
22
- r .logger .Debug ("!help" )
23
- help := `!optout - opt out from all message relaying
24
- !optoutmedia - only opt out from relaying attachments
25
- !optin - opt back into chat relaying
26
- !help - display this message`
27
-
28
- r .replyCmd (msg , help )
29
- case "!ping" :
30
- r .logger .Debug ("!pong" )
31
- r .replyCmd (msg , "pong!" )
32
- case "!pingdm" :
33
- r .logger .Debug ("!pongdm" )
34
- r .replyDM (msg , "pong!" )
45
+ case isAdmin && strings .HasPrefix (cmd , "!setwelcome" ):
46
+ r .logger .Debugf ("!setwelcome: %s - %+v" , msg .Channel , msg )
47
+ r .handleWelcomeCmd (msg , msg )
48
+ case isAdmin && strings .HasPrefix (cmd , "!unsetwelcome" ):
49
+ r .logger .Debugf ("!unsetwelcome: %s" , msg .Channel )
50
+ r .handleWelcomeCmd (msg , nil )
51
+ case cmd == "!echowelcome" :
52
+ r .logger .Debugf ("!echowelcome: %s,%s" , msg .Channel , msg .UserID )
53
+ r .handleEchoWelcomeCmd (msg )
35
54
default :
36
55
return false
37
56
}
57
+
38
58
return true
39
59
}
40
60
61
+ func (r * Router ) isAdmin (msg * config.Message ) bool {
62
+ admins , _ := r .GetStringSlice ("Admins" )
63
+
64
+ for _ , ID := range admins {
65
+ if msg .UserID == ID {
66
+ return true
67
+ }
68
+ }
69
+ return false
70
+ }
71
+
72
+ func addTextFromCaptions (msg * config.Message ) {
73
+ for _ , f := range msg .Extra ["file" ] {
74
+ fi := f .(config.FileInfo )
75
+
76
+ msg .Text += fi .Comment
77
+ }
78
+ }
79
+
41
80
func (r * Router ) replyCmd (msg * config.Message , str string ) {
42
81
srcBridge := r .getBridge (msg .Account )
43
82
@@ -71,8 +110,20 @@ func (r *Router) replyDM(msg *config.Message, str string) {
71
110
srcBridge .Send (reply )
72
111
}
73
112
74
- func (r * Router ) handleOptOutCmd (msg * config.Message , newStaus OptOutStatus ) {
75
- err := r .setOptOutStatus (msg .UserID , newStaus )
113
+ func (r * Router ) sendDM (msg * config.Message , dmChannel string ) {
114
+ srcBridge := r .getBridge (msg .Account )
115
+
116
+ msg .Channel = dmChannel
117
+ msg .Username = ""
118
+ msg .UserID = ""
119
+ msg .ID = ""
120
+ msg .Event = ""
121
+
122
+ srcBridge .Send (* msg )
123
+ }
124
+
125
+ func (r * Router ) handleOptOutCmd (msg * config.Message , newStatus OptOutStatus ) {
126
+ err := r .setOptOutStatus (msg .UserID , newStatus )
76
127
77
128
reply := "Successfully set message relay preferences."
78
129
if err != nil {
@@ -81,3 +132,40 @@ func (r *Router) handleOptOutCmd(msg *config.Message, newStaus OptOutStatus) {
81
132
82
133
r .replyCmd (msg , reply )
83
134
}
135
+
136
+ func (r * Router ) handleWelcomeCmd (msg * config.Message , welcomeMsg * config.Message ) {
137
+
138
+ if welcomeMsg != nil {
139
+ welcomeMsg .Text = strings .Replace (welcomeMsg .Text , "!setwelcome " , "" , 1 )
140
+
141
+ for i , f := range welcomeMsg .Extra ["file" ] {
142
+ fi := f .(config.FileInfo )
143
+ fi .Comment = strings .Replace (fi .Comment , "!setwelcome " , "" , 1 )
144
+
145
+ welcomeMsg .Extra ["file" ][i ] = fi
146
+ }
147
+ }
148
+
149
+ err := r .setWelcomeMessage (msg .Channel , welcomeMsg )
150
+
151
+ reply := "Successfully set welcome message for channel."
152
+ if welcomeMsg == nil {
153
+ reply = "Successfully removed welcome message for channel."
154
+ }
155
+ if err != nil {
156
+ reply = "Error setting channel welcome message, try again later or contact the moderators."
157
+ }
158
+
159
+ r .replyCmd (msg , reply )
160
+ }
161
+
162
+ func (r * Router ) handleEchoWelcomeCmd (msg * config.Message ) {
163
+ msg .Event = config .EventWelcomeMsg
164
+
165
+ if r .getWelcomeMessage (msg .Channel ) == nil {
166
+ r .replyCmd (msg , "No welcome message configured, set with !setwelcome" )
167
+ return
168
+ }
169
+
170
+ r .handleEventWelcome (msg )
171
+ }
0 commit comments