From cc9a10ac206570604bd384632dbe43ca5307ed00 Mon Sep 17 00:00:00 2001 From: Cori Hudson Date: Sat, 24 Aug 2019 12:11:00 -0400 Subject: [PATCH] move handlers to handlers.go, clean up unused config options --- bridge/config/config.go | 3 +- bridge/keybase/handlers.go | 55 +++++++++++++++++++++++++ bridge/keybase/keybase.go | 83 +++----------------------------------- 3 files changed, 61 insertions(+), 80 deletions(-) create mode 100644 bridge/keybase/handlers.go diff --git a/bridge/config/config.go b/bridge/config/config.go index 4d5ac32e..cf6872a0 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -87,7 +87,7 @@ type Protocol struct { IgnoreMessages string // all protocols Jid string // xmpp Label string // all protocols - Login string // mattermost, matrix, keybase + Login string // mattermost, matrix MediaDownloadBlackList []string MediaDownloadPath string // Basically MediaServerUpload, but instead of uploading it, just write it to a file on the same server. MediaDownloadSize int // all protocols @@ -145,7 +145,6 @@ type Protocol struct { VerboseJoinPart bool // IRC WebhookBindAddress string // mattermost, slack WebhookURL string // mattermost, slack - PaperKey string // keybase } type ChannelOptions struct { diff --git a/bridge/keybase/handlers.go b/bridge/keybase/handlers.go new file mode 100644 index 00000000..1f7791fd --- /dev/null +++ b/bridge/keybase/handlers.go @@ -0,0 +1,55 @@ +package bkeybase + +import ( + "strconv" + + "github.com/42wim/matterbridge/bridge/config" + "github.com/keybase/go-keybase-chat-bot/kbchat" +) + +func (b *Bkeybase) handleKeybase() { + sub, err := b.kbc.ListenForNewTextMessages() + if err != nil { + b.Log.Error("Error listening: %s", err.Error()) + } + + go func() { + for { + msg, err := sub.Read() + if err != nil { + b.Log.Error("failed to read message: %s", err.Error()) + } + + if msg.Message.Content.Type != "text" { + continue + } + + if msg.Message.Sender.Username == b.kbc.GetUsername() { + continue + } + + b.handleMessage(msg.Message) + + } + }() +} + +func (b *Bkeybase) handleMessage(msg kbchat.Message) { + b.Log.Debugf("== Receiving event: %#v", msg) + if msg.Sender.Username != b.kbc.GetUsername() { + + // TODO download avatar + + // Create our message + rmsg := config.Message{Username: msg.Sender.Username, Text: msg.Content.Text.Body, UserID: msg.Sender.Uid, Channel: msg.Channel.TopicName, ID: strconv.Itoa(msg.MsgID), Account: b.Account} + + // Text must be a string + if msg.Content.Type != "text" { + b.Log.Errorf("message is not text") + return + } + + b.Log.Debugf("<= Sending message from %s on %s to gateway", msg.Sender.Username, msg.Channel.Name) + b.Remote <- rmsg + } +} diff --git a/bridge/keybase/keybase.go b/bridge/keybase/keybase.go index 825dce39..cfe13e89 100644 --- a/bridge/keybase/keybase.go +++ b/bridge/keybase/keybase.go @@ -1,4 +1,4 @@ -package bmatrix +package bkeybase import ( "strconv" @@ -16,7 +16,7 @@ type Bkeybase struct { *bridge.Config } -func New(cfg *bridge.Config) bridge.Bridger { // idk what this does +func New(cfg *bridge.Config) bridge.Bridger { b := &Bkeybase{Config: cfg} b.team = b.Config.GetString("Team") return b @@ -25,6 +25,8 @@ func New(cfg *bridge.Config) bridge.Bridger { // idk what this does func (b *Bkeybase) Connect() error { var err error b.Log.Infof("Connecting %s", b.GetString("Team")) + + // use default keybase location (`keybase`) b.kbc, err = kbchat.Start(kbchat.RunOptions{}) if err != nil { return err @@ -40,9 +42,7 @@ func (b *Bkeybase) Disconnect() error { } func (b *Bkeybase) JoinChannel(channel config.ChannelInfo) error { - b.Lock() b.channel = channel.Name - b.Unlock() return nil } @@ -63,15 +63,7 @@ func (b *Bkeybase) Send(msg config.Message) (string, error) { // Edit message if we have an ID // kbchat lib does not support message editing yet - // Use notices to send join/leave events - // if msg.Event == config.EventJoinLeave { - // resp, err := b.mc.SendNotice(channel, msg.Username+msg.Text) - // if err != nil { - // return "", err - // } - // return resp.EventID, err - // } - + // Send regular message body := msg.Username + ": " + msg.Text resp, err := b.kbc.SendMessageByTeamName(b.team, body, &b.channel) if err != nil { @@ -80,68 +72,3 @@ func (b *Bkeybase) Send(msg config.Message) (string, error) { return strconv.Itoa(resp.Result.MsgID), err } - -func (b *Bkeybase) handleKeybase() { - sub, err := b.kbc.ListenForNewTextMessages() - if err != nil { - b.Log.Error("Error listening: %s", err.Error()) - } - // syncer.OnEventType("m.room.redaction", b.handleEvent) - // syncer.OnEventType("m.room.message", b.handleEvent) - go func() { - for { - msg, err := sub.Read() - if err != nil { - b.Log.Error("failed to read message: %s", err.Error()) - } - - if msg.Message.Content.Type != "text" { - continue - } - - if msg.Message.Sender.Username == b.kbc.GetUsername() { - continue - } - - b.handleEvent(msg.Message) - - } - }() -} - -func (b *Bkeybase) handleEvent(msg kbchat.Message) { - b.Log.Debugf("== Receiving event: %#v", msg) - if msg.Sender.Username != b.kbc.GetUsername() { - - // TODO download avatar - - // Create our message - rmsg := config.Message{Username: msg.Sender.Username, Text: msg.Content.Text.Body, UserID: msg.Sender.Uid, Channel: msg.Channel.TopicName, ID: strconv.Itoa(msg.MsgID), Account: b.Account} - - // Text must be a string - if msg.Content.Type != "text" { - b.Log.Errorf("message is not text") - return - } - - // Delete event TODO - // if ev.Type == "m.room.redaction" { - // rmsg.Event = config.EventMsgDelete - // rmsg.ID = ev.Redacts - // rmsg.Text = config.EventMsgDelete - // b.Remote <- rmsg - // return - // } - - // Do we have a /me action - // if ev.Content["msgtype"].(string) == "m.emote" { - // rmsg.Event = config.EventUserAction - // } - - // Do we have attachments - // doesn't matter because we can't handle it yet - - b.Log.Debugf("<= Sending message from %s on %s to gateway", msg.Sender.Username, msg.Channel.Name) - b.Remote <- rmsg - } -}