From 0fbebfc3f5252ce39b9b624534e21639a8f59fd5 Mon Sep 17 00:00:00 2001 From: Gisle Aune Date: Mon, 25 Jun 2018 20:41:44 +0200 Subject: [PATCH] Added targeting of messages, notices and ctcp actions (untested), added account-tag support --- channel.go | 6 ++++++ client.go | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/channel.go b/channel.go index fa8c71c..5b5a2d1 100644 --- a/channel.go +++ b/channel.go @@ -123,5 +123,11 @@ func (channel *Channel) Handle(event *Event, client *Client) { } } } + case "packet.privmsg", "ctcp.action": + { + if accountTag, ok := event.Tags["account"]; ok && accountTag != "" { + channel.userlist.Patch(event.Nick, list.UserPatch{Account: accountTag}) + } + } } } diff --git a/client.go b/client.go index c6cd894..e7c49a6 100644 --- a/client.go +++ b/client.go @@ -30,6 +30,7 @@ var supportedCaps = []string{ "away-notify", "extended-join", "chghost", + "account-tag", } // ErrNoConnection is returned if you try to do something requiring a connection, @@ -859,6 +860,66 @@ func (client *Client) handleEvent(event *Event) { } } + // Message parsing + case "packet.privmsg", "ctcp.action": + { + // Target the mssage + target := Target(client.status) + spawned := false + targetName := event.Arg(0) + if targetName == client.nick { + target := client.Target("query", targetName) + if target == nil { + query := &Query{user: list.User{ + Nick: event.Nick, + User: event.User, + Host: event.Host, + }} + + client.AddTarget(query) + + spawned = true + + target = query + } + } else { + target = client.Channel(targetName) + if target == nil { + target = client.status + } + } + + target.Handle(event, client) + event.targets = append(event.targets, target) + + if spawned { + // TODO: Message has higher importance // 0:Normal, 1:Important, 2:Highlight + } + } + + case "packet.notice": + { + // Try to target by mentioned channel name + for _, token := range strings.Fields(event.Text) { + if client.isupport.IsChannel(token) { + channel := client.Channel(token) + if channel == nil { + continue + } + + channel.Handle(event, client) + event.targets = append(event.targets, channel) + break + } + } + + // Otherwise, it belongs in the status target + if len(event.targets) == 0 { + client.status.Handle(event, client) + event.targets = append(event.targets, client.status) + } + } + // account-notify case "packet.account": {