fix extra star-space prefix on system messages breaking heuristic action detection
This commit is contained in:
parent
bafc724b8a
commit
2668a6abbd
12
NTFServer.go
12
NTFServer.go
@ -290,12 +290,15 @@ func (this *NTFServer) HandleHubMessage(msg upstreamMessage) {
|
|||||||
case libnmdc.EVENT_SYSTEM_MESSAGE_FROM_CONN, libnmdc.EVENT_SYSTEM_MESSAGE_FROM_HUB:
|
case libnmdc.EVENT_SYSTEM_MESSAGE_FROM_CONN, libnmdc.EVENT_SYSTEM_MESSAGE_FROM_HUB:
|
||||||
// This includes "want to register your nick?" and chat-catchup messages
|
// This includes "want to register your nick?" and chat-catchup messages
|
||||||
// But it also includes /me messages
|
// But it also includes /me messages
|
||||||
// Hard to tell them apart - heuristic detection by matching the first space-separated word against known online users
|
|
||||||
|
|
||||||
|
// First, remove system characters from the front (star, space)
|
||||||
|
systemMessage := strings.TrimLeft(msg.evt.Message, `* `)
|
||||||
|
|
||||||
|
// Heuristic detect action messages if the first space-separated word is a known online user
|
||||||
isActionMessage := false
|
isActionMessage := false
|
||||||
|
|
||||||
if conn, ok := this.conns[msg.hubNick]; ok {
|
if conn, ok := this.conns[msg.hubNick]; ok {
|
||||||
firstWord := strings.SplitN(msg.evt.Message, ` `, 2)[0]
|
firstWord := strings.SplitN(systemMessage, ` `, 2)[0]
|
||||||
_ = conn.Users(func(umap *map[string]libnmdc.UserInfo) error {
|
_ = conn.Users(func(umap *map[string]libnmdc.UserInfo) error {
|
||||||
for knownHubNick, _ := range *umap {
|
for knownHubNick, _ := range *umap {
|
||||||
if knownHubNick == firstWord {
|
if knownHubNick == firstWord {
|
||||||
@ -311,18 +314,19 @@ func (this *NTFServer) HandleHubMessage(msg upstreamMessage) {
|
|||||||
// Treat it as a full post
|
// Treat it as a full post
|
||||||
|
|
||||||
// Coalesce from multiple connections
|
// Coalesce from multiple connections
|
||||||
if this.Coalesce("*", msg.evt.Message) {
|
if this.Coalesce("*", systemMessage) {
|
||||||
return // ignore - we heard this message already recently
|
return // ignore - we heard this message already recently
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display the message
|
// Display the message
|
||||||
htmlMsg := "<i>* " + html.EscapeString(msg.evt.Message) + "</i>"
|
htmlMsg := "<i>* " + html.EscapeString(systemMessage) + "</i>"
|
||||||
err := this.GroupChatSayHTML(htmlMsg)
|
err := this.GroupChatSayHTML(htmlMsg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Delivering action message to group chat: %s", err.Error())
|
log.Printf("Delivering action message to group chat: %s", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
// Not an action message, just clerical notices
|
||||||
// Don't mirror them into telegram
|
// Don't mirror them into telegram
|
||||||
log.Printf("Hub(%s): * %s", msg.hubNick, msg.evt.Message)
|
log.Printf("Hub(%s): * %s", msg.hubNick, msg.evt.Message)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user