summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian P <5564491+s3lph@users.noreply.github.com>2022-11-27 00:17:11 +0100
committerGitHub <noreply@github.com>2022-11-27 00:17:11 +0100
commit6da9d567dc9195e9a5211f23a6795a41f56a1bfc (patch)
tree394e52b5a2e6f5c853c642e74774d9719550bb22
parent6d5a3dff2279f9cc1e9a846419c6cae2fe563e8d (diff)
downloadmatterbridge-msglm-6da9d567dc9195e9a5211f23a6795a41f56a1bfc.tar.gz
matterbridge-msglm-6da9d567dc9195e9a5211f23a6795a41f56a1bfc.tar.bz2
matterbridge-msglm-6da9d567dc9195e9a5211f23a6795a41f56a1bfc.zip
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
-rw-r--r--bridge/mumble/handlers.go66
-rw-r--r--bridge/mumble/mumble.go2
-rw-r--r--matterbridge.toml.sample37
3 files changed, 85 insertions, 20 deletions
diff --git a/bridge/mumble/handlers.go b/bridge/mumble/handlers.go
index 40272633..8120159a 100644
--- a/bridge/mumble/handlers.go
+++ b/bridge/mumble/handlers.go
@@ -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
}
diff --git a/bridge/mumble/mumble.go b/bridge/mumble/mumble.go
index 1943bd39..945cf559 100644
--- a/bridge/mumble/mumble.go
+++ b/bridge/mumble/mumble.go
@@ -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
}
diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample
index 20800689..96104501 100644
--- a/matterbridge.toml.sample
+++ b/matterbridge.toml.sample
@@ -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