Skip to content

Commit 96c1a67

Browse files
authored
Allow tengo to drop messages using msgDrop (42wim#1272)
1 parent 103d30e commit 96c1a67

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

gateway/gateway.go

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package gateway
22

33
import (
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
}

matterbridge.toml.sample

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1726,7 +1726,9 @@ InMessage="example.tengo"
17261726
#outAccount, outProtocol, outChannel, outGateway, outEvent
17271727
#
17281728
#read-write:
1729-
#msgText, msgUsername
1729+
#msgText, msgUsername, msgDrop
1730+
#
1731+
#msgDrop is a bool which is default false, when set true this message will be dropped
17301732
#
17311733
#The script is reloaded on every message, so you can modify the script on the fly.
17321734
#

0 commit comments

Comments
 (0)