mumble: Implement sending of EventJoinLeave both to and from Mumble (Closes #1435)
This commit is contained in:
@@ -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,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user