Skip to content

Commit

Permalink
mumble: Break handleUserChange into two functions
Browse files Browse the repository at this point in the history
  • Loading branch information
s3lph committed Nov 6, 2022
1 parent 64f2b9b commit af6e353
Showing 1 changed file with 57 additions and 37 deletions.
94 changes: 57 additions & 37 deletions bridge/mumble/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,52 +78,72 @@ func (b *Bmumble) handleConnect(event *gumble.ConnectEvent) {
}
}

func (b *Bmumble) handleUserChange(event *gumble.UserChangeEvent) {
func (b *Bmumble) handleJoinLeave(event *gumble.UserChangeEvent) {
// Ignore events happening before setup is done
if b.Channel == nil {
return
}
// UserChangeEvent is used for both the gumble client itself as well as other clients
if event.User == event.Client.Self {
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 {
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,
}
}
// gumble user
b.handleUserModified(event)
}
}

Expand Down

0 comments on commit af6e353

Please # to comment.