Implement sending of EventJoinLeave both to and from Mumble (#1915)
* mumble: Implement sending of EventJoinLeave both to and from Mumble (Closes #1435) * mumble: Break handleUserChange into two functions
This commit is contained in:
		@@ -78,19 +78,75 @@ func (b *Bmumble) handleConnect(event *gumble.ConnectEvent) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *Bmumble) handleUserChange(event *gumble.UserChangeEvent) {
 | 
			
		||||
	// Only care about changes to self
 | 
			
		||||
	if event.User != event.Client.Self {
 | 
			
		||||
func (b *Bmumble) handleJoinLeave(event *gumble.UserChangeEvent) {
 | 
			
		||||
	// Ignore events happening before setup is done
 | 
			
		||||
	if b.Channel == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// Someone attempted to move the user out of the configured channel; attempt to join back
 | 
			
		||||
	if b.Channel != nil {
 | 
			
		||||
	if b.GetBool("nosendjoinpart") {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	b.Log.Debugf("Received gumble user change event: %+v", event)
 | 
			
		||||
 | 
			
		||||
	text := ""
 | 
			
		||||
	switch {
 | 
			
		||||
	case event.Type&gumble.UserChangeKicked > 0:
 | 
			
		||||
		text = " was kicked"
 | 
			
		||||
	case event.Type&gumble.UserChangeBanned > 0:
 | 
			
		||||
		text = " was banned"
 | 
			
		||||
	case event.Type&gumble.UserChangeDisconnected > 0:
 | 
			
		||||
		if event.User.Channel != nil && event.User.Channel.ID == *b.Channel {
 | 
			
		||||
			text = " left"
 | 
			
		||||
		}
 | 
			
		||||
	case event.Type&gumble.UserChangeConnected > 0:
 | 
			
		||||
		if event.User.Channel != nil && event.User.Channel.ID == *b.Channel {
 | 
			
		||||
			text = " joined"
 | 
			
		||||
		}
 | 
			
		||||
	case event.Type&gumble.UserChangeChannel > 0:
 | 
			
		||||
		// Treat Mumble channel changes the same as connects/disconnects; as far as matterbridge is concerned, they are identical
 | 
			
		||||
		if event.User.Channel != nil && event.User.Channel.ID == *b.Channel {
 | 
			
		||||
			text = " joined"
 | 
			
		||||
		} else {
 | 
			
		||||
			text = " left"
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if text != "" {
 | 
			
		||||
		b.Remote <- config.Message{
 | 
			
		||||
			Username: "system",
 | 
			
		||||
			Text:     event.User.Name + text,
 | 
			
		||||
			Channel:  strconv.FormatUint(uint64(*b.Channel), 10),
 | 
			
		||||
			Account:  b.Account,
 | 
			
		||||
			Event:    config.EventJoinLeave,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *Bmumble) handleUserModified(event *gumble.UserChangeEvent) {
 | 
			
		||||
	// Ignore events happening before setup is done
 | 
			
		||||
	if b.Channel == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if event.Type&gumble.UserChangeChannel > 0 {
 | 
			
		||||
		// Someone attempted to move the user out of the configured channel; attempt to join back
 | 
			
		||||
		if err := b.doJoin(event.Client, *b.Channel); err != nil {
 | 
			
		||||
			b.Log.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *Bmumble) handleUserChange(event *gumble.UserChangeEvent) {
 | 
			
		||||
	// The UserChangeEvent is used for both the gumble client itself as well as other clients
 | 
			
		||||
	if event.User != event.Client.Self {
 | 
			
		||||
		// other users
 | 
			
		||||
		b.handleJoinLeave(event)
 | 
			
		||||
	} else {
 | 
			
		||||
		// gumble user
 | 
			
		||||
		b.handleUserModified(event)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (b *Bmumble) handleDisconnect(event *gumble.DisconnectEvent) {
 | 
			
		||||
	b.connected <- *event
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -93,7 +93,7 @@ func (b *Bmumble) JoinChannel(channel config.ChannelInfo) error {
 | 
			
		||||
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 {
 | 
			
		||||
	if msg.Event != "" && msg.Event != config.EventUserAction && msg.Event != config.EventJoinLeave {
 | 
			
		||||
		return "", nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -188,7 +188,7 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -198,7 +198,7 @@ ShowJoinPart=false
 | 
			
		||||
VerboseJoinPart=false
 | 
			
		||||
 | 
			
		||||
#Do not send joins/parts to other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
NoSendJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -325,7 +325,7 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -492,12 +492,12 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
#Do not send joins/parts to other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
NoSendJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -579,7 +579,7 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -687,7 +687,7 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -826,12 +826,12 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
#Do not send joins/parts to other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
NoSendJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -1138,7 +1138,7 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -1275,7 +1275,7 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -1387,7 +1387,7 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -1484,7 +1484,7 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
@@ -1572,6 +1572,15 @@ SkipTLSVerify=false
 | 
			
		||||
#Default "<clipped message>"
 | 
			
		||||
MessageClipped="<clipped message>"
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
#Do not send joins/parts to other bridges
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
NoSendJoinPart=false
 | 
			
		||||
 | 
			
		||||
###################################################################
 | 
			
		||||
#VK
 | 
			
		||||
###################################################################
 | 
			
		||||
@@ -1684,7 +1693,7 @@ Label=""
 | 
			
		||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
 | 
			
		||||
 | 
			
		||||
#Enable to show users joins/parts from other bridges
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, slack, discord
 | 
			
		||||
#Currently works for messages from the following bridges: irc, mattermost, mumble, slack, discord
 | 
			
		||||
#OPTIONAL (default false)
 | 
			
		||||
ShowJoinPart=false
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user