mumble: Implement sending of EventJoinLeave both to and from Mumble (Closes #1435)

This commit is contained in:
s3lph
2022-11-06 18:22:57 +01:00
parent 0c83946983
commit 64f2b9b027
3 changed files with 64 additions and 19 deletions

View File

@@ -79,15 +79,51 @@ 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 {
// 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 {
// UserChangeEvent is used for both the gumble client itself as well as other clients
if event.User == event.Client.Self {
// 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)
}
} else {
if b.GetBool("nosendjoinpart") {
return
}
b.Log.Debugf("Received gumble user change event: %+v", event)
text := ""
if event.Type & gumble.UserChangeKicked > 0 {
text = " was kicked"
} else if event.Type & gumble.UserChangeBanned > 0 {
text = " was banned"
} else if event.Type & gumble.UserChangeDisconnected > 0 {
if event.User.Channel != nil && event.User.Channel.ID == *b.Channel {
text = " left"
}
} else if event.Type & gumble.UserChangeConnected > 0 {
if event.User.Channel != nil && event.User.Channel.ID == *b.Channel {
text = " joined"
}
} else if 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,
}
}
}
}

View File

@@ -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
}