11package gateway
22
33import (
4+ "fmt"
45 "io/ioutil"
56 "os"
67 "regexp"
@@ -430,8 +431,9 @@ func (gw *Gateway) SendMessage(
430431 }
431432
432433 // Too noisy to log like other events
434+ debugSendMessage := ""
433435 if msg .Event != config .EventUserTyping {
434- gw . logger . Debugf ("=> Sending %#v from %s (%s) to %s (%s)" , msg , msg .Account , rmsg .Channel , dest .Account , channel .Name )
436+ debugSendMessage = fmt . Sprintf ("=> Sending %#v from %s (%s) to %s (%s)" , msg , msg .Account , rmsg .Channel , dest .Account , channel .Name )
435437 }
436438
437439 msg .Channel = channel .Name
@@ -456,11 +458,19 @@ func (gw *Gateway) SendMessage(
456458 msg .ParentID = "msg-parent-not-found"
457459 }
458460
459- err := gw .modifyOutMessageTengo (rmsg , & msg , dest )
461+ drop , err := gw .modifyOutMessageTengo (rmsg , & msg , dest )
460462 if err != nil {
461463 gw .logger .Errorf ("modifySendMessageTengo: %s" , err )
462464 }
463465
466+ if drop {
467+ gw .logger .Debugf ("=> Tengo dropping %#v from %s (%s) to %s (%s)" , msg , msg .Account , rmsg .Channel , dest .Account , channel .Name )
468+ return "" , nil
469+ }
470+
471+ if debugSendMessage != "" {
472+ gw .logger .Debug (debugSendMessage )
473+ }
464474 // if we are using mattermost plugin account, send messages to MattermostPlugin channel
465475 // that can be picked up by the mattermost matterbridge plugin
466476 if dest .Account == "mattermost.plugin" {
@@ -577,22 +587,28 @@ func (gw *Gateway) modifyUsernameTengo(msg *config.Message, br *bridge.Bridge) (
577587 return c .Get ("result" ).String (), nil
578588}
579589
580- func (gw * Gateway ) modifyOutMessageTengo (origmsg * config.Message , msg * config.Message , br * bridge.Bridge ) error {
590+ func (gw * Gateway ) modifyOutMessageTengo (origmsg * config.Message , msg * config.Message , br * bridge.Bridge ) ( bool , error ) {
581591 filename := gw .BridgeValues ().Tengo .OutMessage
582- var res []byte
583- var err error
592+ var (
593+ res []byte
594+ err error
595+ drop bool
596+ )
597+
584598 if filename == "" {
585599 res , err = internal .Asset ("tengo/outmessage.tengo" )
586600 if err != nil {
587- return err
601+ return drop , err
588602 }
589603 } else {
590604 res , err = ioutil .ReadFile (filename )
591605 if err != nil {
592- return err
606+ return drop , err
593607 }
594608 }
609+
595610 s := tengo .NewScript (res )
611+
596612 s .SetImports (stdlib .GetModuleMap (stdlib .AllModuleNames ()... ))
597613 _ = s .Add ("inAccount" , origmsg .Account )
598614 _ = s .Add ("inProtocol" , origmsg .Protocol )
@@ -606,14 +622,19 @@ func (gw *Gateway) modifyOutMessageTengo(origmsg *config.Message, msg *config.Me
606622 _ = s .Add ("outEvent" , msg .Event )
607623 _ = s .Add ("msgText" , msg .Text )
608624 _ = s .Add ("msgUsername" , msg .Username )
625+ _ = s .Add ("msgDrop" , drop )
609626 c , err := s .Compile ()
610627 if err != nil {
611- return err
628+ return drop , err
612629 }
630+
613631 if err := c .Run (); err != nil {
614- return err
632+ return drop , err
615633 }
634+
635+ drop = c .Get ("msgDrop" ).Bool ()
616636 msg .Text = c .Get ("msgText" ).String ()
617637 msg .Username = c .Get ("msgUsername" ).String ()
618- return nil
638+
639+ return drop , nil
619640}
0 commit comments