forked from jshiffer/matterbridge
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:
parent
6d5a3dff22
commit
6da9d567dc
@ -78,19 +78,75 @@ func (b *Bmumble) handleConnect(event *gumble.ConnectEvent) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bmumble) handleUserChange(event *gumble.UserChangeEvent) {
|
func (b *Bmumble) handleJoinLeave(event *gumble.UserChangeEvent) {
|
||||||
// Only care about changes to self
|
// Ignore events happening before setup is done
|
||||||
if event.User != event.Client.Self {
|
if b.Channel == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Someone attempted to move the user out of the configured channel; attempt to join back
|
if b.GetBool("nosendjoinpart") {
|
||||||
if b.Channel != nil {
|
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 {
|
if err := b.doJoin(event.Client, *b.Channel); err != nil {
|
||||||
b.Log.Error(err)
|
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) {
|
func (b *Bmumble) handleDisconnect(event *gumble.DisconnectEvent) {
|
||||||
b.connected <- *event
|
b.connected <- *event
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ func (b *Bmumble) JoinChannel(channel config.ChannelInfo) error {
|
|||||||
func (b *Bmumble) Send(msg config.Message) (string, error) {
|
func (b *Bmumble) Send(msg config.Message) (string, error) {
|
||||||
// Only process text messages
|
// Only process text messages
|
||||||
b.Log.Debugf("=> Received local message %#v", msg)
|
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
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ ShowJoinPart=false
|
|||||||
VerboseJoinPart=false
|
VerboseJoinPart=false
|
||||||
|
|
||||||
#Do not send joins/parts to other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
NoSendJoinPart=false
|
NoSendJoinPart=false
|
||||||
|
|
||||||
@ -325,7 +325,7 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
@ -492,12 +492,12 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
#Do not send joins/parts to other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
NoSendJoinPart=false
|
NoSendJoinPart=false
|
||||||
|
|
||||||
@ -579,7 +579,7 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
@ -687,7 +687,7 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
@ -826,12 +826,12 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
#Do not send joins/parts to other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
NoSendJoinPart=false
|
NoSendJoinPart=false
|
||||||
|
|
||||||
@ -1138,7 +1138,7 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
@ -1275,7 +1275,7 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
@ -1387,7 +1387,7 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
@ -1484,7 +1484,7 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
@ -1572,6 +1572,15 @@ SkipTLSVerify=false
|
|||||||
#Default "<clipped message>"
|
#Default "<clipped message>"
|
||||||
MessageClipped="<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
|
#VK
|
||||||
###################################################################
|
###################################################################
|
||||||
@ -1684,7 +1693,7 @@ Label=""
|
|||||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||||
|
|
||||||
#Enable to show users joins/parts from other bridges
|
#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)
|
#OPTIONAL (default false)
|
||||||
ShowJoinPart=false
|
ShowJoinPart=false
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user