diff --git a/bridge/mumble/handlers.go b/bridge/mumble/handlers.go index 1a9a96d0..92f8e870 100644 --- a/bridge/mumble/handlers.go +++ b/bridge/mumble/handlers.go @@ -6,25 +6,22 @@ import ( "layeh.com/gumble/gumbleutil" ) - func (b *Bmumble) handleServerConfig(event *gumble.ServerConfigEvent) { b.serverConfigUpdate <- *event } - func (b *Bmumble) handleTextMessage(event *gumble.TextMessageEvent) { rmsg := config.Message{ - Text: event.TextMessage.Message, - Channel: event.Client.Self.Channel.Name, + Text: event.TextMessage.Message, + Channel: event.Client.Self.Channel.Name, Username: event.TextMessage.Sender.Name, - UserID: event.TextMessage.Sender.Name + "@" + b.Host, - Account: b.Account, + UserID: event.TextMessage.Sender.Name + "@" + b.Host, + Account: b.Account, } b.Log.Debug("<= Remote message is %+v", rmsg) b.Remote <- rmsg } - func (b *Bmumble) handleConnect(event *gumble.ConnectEvent) { // Set the user's "bio"/comment if comment := b.GetString("UserComment"); comment != "" { @@ -38,15 +35,14 @@ func (b *Bmumble) handleConnect(event *gumble.ConnectEvent) { b.doJoin(event.Client, b.Channel) b.Remote <- config.Message{ Username: "system", - Text: "rejoin", - Channel: "", - Account: b.Account, - Event: config.EventRejoinChannels, + Text: "rejoin", + Channel: "", + Account: b.Account, + Event: config.EventRejoinChannels, } } } - func (b *Bmumble) handleUserChange(event *gumble.UserChangeEvent) { // Only care about changes to self if event.User != event.Client.Self { @@ -58,25 +54,23 @@ func (b *Bmumble) handleUserChange(event *gumble.UserChangeEvent) { } } - func (b *Bmumble) handleDisconnect(event *gumble.DisconnectEvent) { b.connected <- *event } - -func (b *Bmumble) makeDebugHandler() (*gumbleutil.Listener) { +func (b *Bmumble) makeDebugHandler() *gumbleutil.Listener { handler := gumbleutil.Listener{ - Connect: func(e *gumble.ConnectEvent) { b.Log.Debugf("Received connect event: %+v", e) }, - Disconnect: func(e *gumble.DisconnectEvent) { b.Log.Debugf("Received disconnect event: %+v", e) }, - TextMessage: func(e *gumble.TextMessageEvent) { b.Log.Debugf("Received textmessage event: %+v", e) }, - UserChange: func(e *gumble.UserChangeEvent) { b.Log.Debugf("Received userchange event: %+v", e) }, - ChannelChange: func(e *gumble.ChannelChangeEvent) { b.Log.Debugf("Received channelchange event: %+v", e) }, - PermissionDenied: func(e *gumble.PermissionDeniedEvent) { b.Log.Debugf("Received permissiondenied event: %+v", e) }, - UserList: func(e *gumble.UserListEvent) { b.Log.Debugf("Received userlist event: %+v", e) }, - ACL: func(e *gumble.ACLEvent) { b.Log.Debugf("Received acl event: %+v", e) }, - BanList: func(e *gumble.BanListEvent) { b.Log.Debugf("Received banlist event: %+v", e) }, - ContextActionChange: func(e *gumble.ContextActionChangeEvent) { b.Log.Debugf("Received contextactionchange event: %+v", e) }, - ServerConfig: func(e *gumble.ServerConfigEvent) { b.Log.Debugf("Received serverconfig event: %+v", e) }, + Connect: func(e *gumble.ConnectEvent) { b.Log.Debugf("Received connect event: %+v", e) }, + Disconnect: func(e *gumble.DisconnectEvent) { b.Log.Debugf("Received disconnect event: %+v", e) }, + TextMessage: func(e *gumble.TextMessageEvent) { b.Log.Debugf("Received textmessage event: %+v", e) }, + UserChange: func(e *gumble.UserChangeEvent) { b.Log.Debugf("Received userchange event: %+v", e) }, + ChannelChange: func(e *gumble.ChannelChangeEvent) { b.Log.Debugf("Received channelchange event: %+v", e) }, + PermissionDenied: func(e *gumble.PermissionDeniedEvent) { b.Log.Debugf("Received permissiondenied event: %+v", e) }, + UserList: func(e *gumble.UserListEvent) { b.Log.Debugf("Received userlist event: %+v", e) }, + ACL: func(e *gumble.ACLEvent) { b.Log.Debugf("Received acl event: %+v", e) }, + BanList: func(e *gumble.BanListEvent) { b.Log.Debugf("Received banlist event: %+v", e) }, + ContextActionChange: func(e *gumble.ContextActionChangeEvent) { b.Log.Debugf("Received contextactionchange event: %+v", e) }, + ServerConfig: func(e *gumble.ServerConfigEvent) { b.Log.Debugf("Received serverconfig event: %+v", e) }, } return &handler } diff --git a/bridge/mumble/mumble.go b/bridge/mumble/mumble.go index ed24bbd0..5fff2219 100644 --- a/bridge/mumble/mumble.go +++ b/bridge/mumble/mumble.go @@ -12,32 +12,30 @@ import ( "github.com/42wim/matterbridge/bridge" "github.com/42wim/matterbridge/bridge/config" "github.com/42wim/matterbridge/bridge/helper" + stripmd "github.com/writeas/go-strip-markdown" "layeh.com/gumble/gumble" "layeh.com/gumble/gumbleutil" - stripmd "github.com/writeas/go-strip-markdown" // We need to import the 'data' package as an implicit dependency. // See: https://godoc.org/github.com/paulrosania/go-charset/charset _ "github.com/paulrosania/go-charset/data" ) - type Bmumble struct { - client *gumble.Client - Nick string - Host string - Channel string - local chan config.Message - running chan error - connected chan gumble.DisconnectEvent - serverConfigUpdate chan gumble.ServerConfigEvent - serverConfig gumble.ServerConfigEvent - tlsConfig tls.Config + client *gumble.Client + Nick string + Host string + Channel string + local chan config.Message + running chan error + connected chan gumble.DisconnectEvent + serverConfigUpdate chan gumble.ServerConfigEvent + serverConfig gumble.ServerConfigEvent + tlsConfig tls.Config *bridge.Config } - func New(cfg *bridge.Config) bridge.Bridger { b := &Bmumble{} b.Config = cfg @@ -49,7 +47,6 @@ func New(cfg *bridge.Config) bridge.Bridger { return b } - func (b *Bmumble) Connect() error { b.Log.Infof("Connecting %s", b.GetString("Server")) host, portstr, err := net.SplitHostPort(b.GetString("Server")) @@ -68,7 +65,7 @@ func (b *Bmumble) Connect() error { if ckey := b.GetString("TLSClientKey"); ckey != "" { cert, err := tls.LoadX509KeyPair(cpath, ckey) if err != nil { - return err + return err } b.tlsConfig.Certificates = []tls.Certificate{cert} } @@ -105,19 +102,17 @@ func (b *Bmumble) JoinChannel(channel config.ChannelInfo) error { return b.doJoin(b.client, channel.Name) } - func (b *Bmumble) Send(msg config.Message) (string, error) { // Only process text messages b.Log.Debugf("=> Received local message %#v", msg) if msg.Event != "" && msg.Event != config.EventUserAction { return "", nil } - + b.local <- msg return "", nil } - func (b *Bmumble) connectLoop() { firstConnect := true for { @@ -162,10 +157,10 @@ func (b *Bmumble) doConnect() error { gumbleConfig := gumble.NewConfig() gumbleConfig.Attach(gumbleutil.Listener{ ServerConfig: b.handleServerConfig, - TextMessage: b.handleTextMessage, - Connect: b.handleConnect, - Disconnect: b.handleDisconnect, - UserChange: b.handleUserChange, + TextMessage: b.handleTextMessage, + Connect: b.handleConnect, + Disconnect: b.handleDisconnect, + UserChange: b.handleUserChange, }) if b.GetInt("DebugLevel") == 0 { gumbleConfig.Attach(b.makeDebugHandler()) @@ -174,7 +169,7 @@ func (b *Bmumble) doConnect() error { if password := b.GetString("Password"); password != "" { gumbleConfig.Password = password } - + client, err := gumble.DialWithDialer(new(net.Dialer), b.GetString("Server"), gumbleConfig, &b.tlsConfig) if err != nil { return err @@ -193,7 +188,6 @@ func (b *Bmumble) doJoin(client *gumble.Client, name string) error { return nil } - func (b *Bmumble) doSend() { // Message sending loop that makes sure server-side // restrictions and client-side message traits don't conflict @@ -209,17 +203,16 @@ func (b *Bmumble) doSend() { } } - func (b *Bmumble) processMessage(msg *config.Message) { b.Log.Debugf("Processing message %s", msg.Text) - + // If HTML is allowed, convert markdown into HTML, otherwise strip markdown - if allowHtml := b.serverConfig.AllowHTML; allowHtml == nil || !*allowHtml { + if allowHtml := b.serverConfig.AllowHTML; allowHtml == nil || !*allowHtml { msg.Text = helper.ParseMarkdown(msg.Text) } else { msg.Text = stripmd.Strip(msg.Text) } - + // If there is a maximum message length, split and truncate the lines var msgLines []string if maxLength := b.serverConfig.MaximumMessageLength; maxLength != nil { @@ -230,7 +223,7 @@ func (b *Bmumble) processMessage(msg *config.Message) { // Send the individual lindes for i := range msgLines { b.Log.Debugf("Sending line: %s", msgLines[i]) - b.client.Self.Channel.Send(msg.Username + msgLines[i], false) + b.client.Self.Channel.Send(msg.Username+msgLines[i], false) } }