summaryrefslogtreecommitdiffstats
path: root/gateway/gateway.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-04-08 20:58:21 +0200
committerGitHub <noreply@github.com>2019-04-08 20:58:21 +0200
commit7a24de15e42858e19993b646860988b89a1c24e4 (patch)
treecf4f9baff5c0130ac2fd8d88e99edcc1f6ba49c1 /gateway/gateway.go
parent99d9ea283aa7b79c1f2d2a8c496e52fed64f2573 (diff)
downloadmatterbridge-msglm-7a24de15e42858e19993b646860988b89a1c24e4.tar.gz
matterbridge-msglm-7a24de15e42858e19993b646860988b89a1c24e4.tar.bz2
matterbridge-msglm-7a24de15e42858e19993b646860988b89a1c24e4.zip
Add tengo support to RemoteNickFormat (#793)
This commit add support for using the result of a tengo script in RemoteNickFormat using {TENGO} Also adds a new toml table [tengo] with key RemoteNickFormat and value location of the script. This also moves the TengoModifyMessage from [general] to Message in [tengo] Documentation: RemoteNickFormat allows you to specify the location of a tengo (https://github.com/d5/tengo/) script. The script will have the following global variables: to modify: result to read: channel, bridge, gateway, protocol, nick The result will be set in {TENGO} in the RemoteNickFormat key of every bridge where {TENGO} is specified The script is reloaded on every message, so you can modify the script on the fly. Example script can be found in https://github.com/42wim/matterbridge/tree/master/contrib/remotenickformat.tengo [tengo] RemoteNickFormat="remotenickformat.tengo"
Diffstat (limited to 'gateway/gateway.go')
-rw-r--r--gateway/gateway.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/gateway/gateway.go b/gateway/gateway.go
index e76e1d59..d46f75d6 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -331,6 +331,11 @@ func (gw *Gateway) modifyUsername(msg *config.Message, dest *bridge.Bridge) stri
nick = strings.Replace(nick, "{LABEL}", br.GetString("Label"), -1)
nick = strings.Replace(nick, "{NICK}", msg.Username, -1)
nick = strings.Replace(nick, "{CHANNEL}", msg.Channel, -1)
+ tengoNick, err := gw.modifyUsernameTengo(msg, br)
+ if err != nil {
+ gw.logger.Errorf("modifyUsernameTengo error: %s", err)
+ }
+ nick = strings.Replace(nick, "{TENGO}", tengoNick, -1) //nolint:gocritic
return nick
}
@@ -347,6 +352,9 @@ func (gw *Gateway) modifyMessage(msg *config.Message) {
if err := modifyMessageTengo(gw.BridgeValues().General.TengoModifyMessage, msg); err != nil {
gw.logger.Errorf("TengoModifyMessage failed: %s", err)
}
+ if err := modifyMessageTengo(gw.BridgeValues().Tengo.Message, msg); err != nil {
+ gw.logger.Errorf("Tengo.Message failed: %s", err)
+ }
// replace :emoji: to unicode
msg.Text = emojilib.Replace(msg.Text)
@@ -503,3 +511,36 @@ func modifyMessageTengo(filename string, msg *config.Message) error {
msg.Username = c.Get("msgUsername").String()
return nil
}
+
+func (gw *Gateway) modifyUsernameTengo(msg *config.Message, br *bridge.Bridge) (string, error) {
+ filename := gw.BridgeValues().Tengo.RemoteNickFormat
+ if filename == "" {
+ return "", nil
+ }
+ res, err := ioutil.ReadFile(filename)
+ if err != nil {
+ return "", err
+ }
+ s := script.New(res)
+ s.SetImports(stdlib.GetModuleMap(stdlib.AllModuleNames()...))
+ _ = s.Add("result", "")
+ _ = s.Add("msgText", msg.Text)
+ _ = s.Add("msgUsername", msg.Username)
+ _ = s.Add("nick", msg.Username)
+ _ = s.Add("msgAccount", msg.Account)
+ _ = s.Add("msgChannel", msg.Channel)
+ _ = s.Add("channel", msg.Channel)
+ _ = s.Add("msgProtocol", msg.Protocol)
+ _ = s.Add("remoteAccount", br.Account)
+ _ = s.Add("protocol", br.Protocol)
+ _ = s.Add("bridge", br.Name)
+ _ = s.Add("gateway", gw.Name)
+ c, err := s.Compile()
+ if err != nil {
+ return "", err
+ }
+ if err := c.Run(); err != nil {
+ return "", err
+ }
+ return c.Get("result").String(), nil
+}