Classify recursive channel messages as public
This commit is contained in:
committed by
Brandon McGinty
parent
d7dcaa8b21
commit
874cbb7818
@@ -230,14 +230,7 @@ func (b *Barnard) Log(s string) {
|
||||
}
|
||||
|
||||
func (b *Barnard) OnTextMessage(e *gumble.TextMessageEvent) {
|
||||
var public = false
|
||||
for _, c := range e.Channels {
|
||||
if c.Name == b.Client.Self.Channel.Name {
|
||||
public = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if public {
|
||||
if b.isPublicTextMessage(e) {
|
||||
sender := "Server"
|
||||
if e.Sender != nil {
|
||||
sender = e.Sender.Name
|
||||
@@ -256,6 +249,28 @@ func (b *Barnard) OnTextMessage(e *gumble.TextMessageEvent) {
|
||||
}
|
||||
}
|
||||
|
||||
// isPublicTextMessage reports whether a message targets the current channel,
|
||||
// either directly or through a recursive channel-tree recipient.
|
||||
func (b *Barnard) isPublicTextMessage(e *gumble.TextMessageEvent) bool {
|
||||
if e == nil || b.Client == nil || b.Client.Self == nil || b.Client.Self.Channel == nil {
|
||||
return false
|
||||
}
|
||||
current := b.Client.Self.Channel
|
||||
for _, channel := range e.Channels {
|
||||
if sameChannel(channel, current) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
for _, root := range e.Trees {
|
||||
for channel := current; channel != nil; channel = channel.Parent {
|
||||
if sameChannel(channel, root) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (b *Barnard) OnUserChange(e *gumble.UserChangeEvent) {
|
||||
notification, hasNotification := b.userChangeNotification(e)
|
||||
if e.User != nil {
|
||||
|
||||
Reference in New Issue
Block a user