From b24e1bafa180870646bec6b42450d3077b3facd2 Mon Sep 17 00:00:00 2001 From: Wim Date: Sun, 22 Nov 2020 22:21:02 +0100 Subject: [PATCH] Add support for irc to irc notice (irc). Fixes #754 (#1305) --- bridge/config/config.go | 1 + bridge/irc/handlers.go | 14 +++++++++++++- bridge/irc/irc.go | 11 ++++++++--- gateway/gateway.go | 5 +++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/bridge/config/config.go b/bridge/config/config.go index 7f8d3a4a..7dbbc80b 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -26,6 +26,7 @@ const ( EventAPIConnected = "api_connected" EventUserTyping = "user_typing" EventGetChannelMembers = "get_channel_members" + EventNoticeIRC = "notice_irc" ) type Message struct { diff --git a/bridge/irc/handlers.go b/bridge/irc/handlers.go index 9089c9a9..aaaf42fb 100644 --- a/bridge/irc/handlers.go +++ b/bridge/irc/handlers.go @@ -170,7 +170,14 @@ func (b *Birc) handlePrivMsg(client *girc.Client, event girc.Event) { if b.skipPrivMsg(event) { return } - rmsg := config.Message{Username: event.Source.Name, Channel: strings.ToLower(event.Params[0]), Account: b.Account, UserID: event.Source.Ident + "@" + event.Source.Host} + + rmsg := config.Message{ + Username: event.Source.Name, + Channel: strings.ToLower(event.Params[0]), + Account: b.Account, + UserID: event.Source.Ident + "@" + event.Source.Host, + } + b.Log.Debugf("== Receiving PRIVMSG: %s %s %#v", event.Source.Name, event.Last(), event) // set action event @@ -178,6 +185,11 @@ func (b *Birc) handlePrivMsg(client *girc.Client, event girc.Event) { rmsg.Event = config.EventUserAction } + // set NOTICE event + if event.Command == "NOTICE" { + rmsg.Event = config.EventNoticeIRC + } + // strip action, we made an event if it was an action rmsg.Text += event.StripAction() diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go index 4be15b51..8470a1c3 100644 --- a/bridge/irc/irc.go +++ b/bridge/irc/irc.go @@ -212,9 +212,14 @@ func (b *Birc) doSend() { colorCode := checksum%14 + 2 // quick fix - prevent white or black color codes username = fmt.Sprintf("\x03%02d%s\x0F", colorCode, msg.Username) } - if msg.Event == config.EventUserAction { + + switch msg.Event { + case config.EventUserAction: b.i.Cmd.Action(msg.Channel, username+msg.Text) - } else { + case config.EventNoticeIRC: + b.Log.Debugf("Sending notice to channel %s", msg.Channel) + b.i.Cmd.Notice(msg.Channel, username+msg.Text) + default: b.Log.Debugf("Sending to channel %s", msg.Channel) b.i.Cmd.Message(msg.Channel, username+msg.Text) } @@ -291,7 +296,7 @@ func (b *Birc) skipPrivMsg(event girc.Event) bool { b.Nick = b.i.GetNick() // freenode doesn't send 001 as first reply - if event.Command == "NOTICE" { + if event.Command == "NOTICE" && len(event.Params) != 2 { return true } // don't forward queries to the bot diff --git a/gateway/gateway.go b/gateway/gateway.go index c1440c05..1508ced2 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -430,6 +430,11 @@ func (gw *Gateway) SendMessage( } } + // Only send irc notices to irc + if msg.Event == config.EventNoticeIRC && dest.Protocol != "irc" { + return "", nil + } + // Too noisy to log like other events debugSendMessage := "" if msg.Event != config.EventUserTyping {