Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit 96c1a67feb946dee16f1c370ea1d35528736c15d Author: Wim <wim@42.be> Date: Wed Oct 21 21:57:14 2020 +0000 Allow tengo to drop messages using msgDrop (#1272) diff --git a/gateway/gateway.go b/gateway/gateway.go index 7a5ca8c..6a46ecf 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -16 +17 @@  package gateway    import ( + "fmt"   "io/ioutil"   "os"   "regexp" @@ -4308 +4319 @@ func (gw *Gateway) SendMessage(   }     // Too noisy to log like other events + debugSendMessage := ""   if msg.Event != config.EventUserTyping { - gw.logger.Debugf("=> Sending %#v from %s (%s) to %s (%s)", msg, msg.Account, rmsg.Channel, dest.Account, channel.Name) + debugSendMessage = fmt.Sprintf("=> Sending %#v from %s (%s) to %s (%s)", msg, msg.Account, rmsg.Channel, dest.Account, channel.Name)   }     msg.Channel = channel.Name @@ -45611 +45819 @@ func (gw *Gateway) SendMessage(   msg.ParentID = "msg-parent-not-found"   }   - err := gw.modifyOutMessageTengo(rmsg, &msg, dest) + drop, err := gw.modifyOutMessageTengo(rmsg, &msg, dest)   if err != nil {   gw.logger.Errorf("modifySendMessageTengo: %s", err)   }   + if drop { + gw.logger.Debugf("=> Tengo dropping %#v from %s (%s) to %s (%s)", msg, msg.Account, rmsg.Channel, dest.Account, channel.Name) + return "", nil + } + + if debugSendMessage != "" { + gw.logger.Debug(debugSendMessage) + }   // if we are using mattermost plugin account, send messages to MattermostPlugin channel   // that can be picked up by the mattermost matterbridge plugin   if dest.Account == "mattermost.plugin" { @@ -57722 +58728 @@ func (gw *Gateway) modifyUsernameTengo(msg *config.Message, br *bridge.Bridge) (   return c.Get("result").String(), nil  }   -func (gw *Gateway) modifyOutMessageTengo(origmsg *config.Message, msg *config.Message, br *bridge.Bridge) error { +func (gw *Gateway) modifyOutMessageTengo(origmsg *config.Message, msg *config.Message, br *bridge.Bridge) (bool, error) {   filename := gw.BridgeValues().Tengo.OutMessage - var res []byte - var err error + var ( + res []byte + err error + drop bool + ) +   if filename == "" {   res, err = internal.Asset("tengo/outmessage.tengo")   if err != nil { - return err + return drop, err   }   } else {   res, err = ioutil.ReadFile(filename)   if err != nil { - return err + return drop, err   }   } +   s := tengo.NewScript(res) +   s.SetImports(stdlib.GetModuleMap(stdlib.AllModuleNames()...))   _ = s.Add("inAccount", origmsg.Account)   _ = s.Add("inProtocol", origmsg.Protocol) @@ -60614 +62219 @@ func (gw *Gateway) modifyOutMessageTengo(origmsg *config.Message, msg *config.Me   _ = s.Add("outEvent", msg.Event)   _ = s.Add("msgText", msg.Text)   _ = s.Add("msgUsername", msg.Username) + _ = s.Add("msgDrop", drop)   c, err := s.Compile()   if err != nil { - return err + return drop, err   } +   if err := c.Run(); err != nil { - return err + return drop, err   } + + drop = c.Get("msgDrop").Bool()   msg.Text = c.Get("msgText").String()   msg.Username = c.Get("msgUsername").String() - return nil + + return drop, nil  } diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index aab2f48..92e0e7c 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -17267 +17269 @@ InMessage="example.tengo"  #outAccount, outProtocol, outChannel, outGateway, outEvent  #  #read-write: -#msgText, msgUsername +#msgText, msgUsername, msgDrop +# +#msgDrop is a bool which is default false, when set true this message will be dropped  #  #The script is reloaded on every message, so you can modify the script on the fly.  #