diff options
| author | Hubert Hirtz <hubert@hirtzfr.eu> | 2020-06-23 12:13:09 +0200 |
|---|---|---|
| committer | Hubert Hirtz <hubert@hirtzfr.eu> | 2020-06-23 12:13:09 +0200 |
| commit | 426652597584210e2123e107bbfc49bc6752a70f (patch) | |
| tree | 761ce45761afb0b15ae17e04506113fbe5a9dc40 /irc/states.go | |
| parent | Use nick/realname from config (diff) | |
Display typing indicators
Diffstat (limited to '')
| -rw-r--r-- | irc/states.go | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/irc/states.go b/irc/states.go index 6363ae8..24a667e 100644 --- a/irc/states.go +++ b/irc/states.go @@ -611,6 +611,7 @@ func (s *Session) handle(msg Message) (ev Event, err error) { continue } + // TODO UserQuitEvent ev = UserPartEvent{ ChannelEvent: ChannelEvent{Channel: c.Name}, UserEvent: UserEvent{Nick: nick}, @@ -644,6 +645,48 @@ func (s *Session) handle(msg Message) (ev Event, err error) { } case "PRIVMSG": ev = s.privmsgToEvent(msg) + case "TAGMSG": + nick, _, _ := FullMask(msg.Prefix) + target := strings.ToLower(msg.Params[0]) + + if strings.ToLower(nick) == s.lNick { + // TAGMSG from self + break + } + + typing := 0 + if t, ok := msg.Tags["+typing"]; ok { + if t == "active" { + typing = 1 + } else if t == "paused" { + typing = 2 + } else if t == "done" { + typing = 3 + } + } else { + break + } + + t, ok := msg.Time() + if !ok { + t = time.Now() + } + if target == s.lNick { + // TAGMSG to self + ev = QueryTypingEvent{ + UserEvent: UserEvent{Nick: nick}, + State: typing, + Time: t, + } + } else if _, ok := s.channels[target]; ok { + // TAGMSG to channel + ev = ChannelTypingEvent{ + UserEvent: UserEvent{Nick: nick}, + ChannelEvent: ChannelEvent{Channel: msg.Params[0]}, + State: typing, + Time: t, + } + } case "BATCH": batchStart := msg.Params[0][0] == '+' id := msg.Params[0][1:] @@ -676,12 +719,13 @@ func (s *Session) privmsgToEvent(msg Message) (ev Event) { nick, _, _ := FullMask(msg.Prefix) target := strings.ToLower(msg.Params[0]) + t, ok := msg.Time() + if !ok { + t = time.Now() + } + if target == s.lNick { // PRIVMSG to self - t, ok := msg.Time() - if !ok { - t = time.Now() - } ev = QueryMessageEvent{ UserEvent: UserEvent{Nick: nick}, Content: msg.Params[1], @@ -689,10 +733,6 @@ func (s *Session) privmsgToEvent(msg Message) (ev Event) { } } else if _, ok := s.channels[target]; ok { // PRIVMSG to channel - t, ok := msg.Time() - if !ok { - t = time.Now() - } ev = ChannelMessageEvent{ UserEvent: UserEvent{Nick: nick}, ChannelEvent: ChannelEvent{Channel: msg.Params[0]}, |
