diff --git a/downstream.go b/downstream.go index 142dad9..5747276 100644 --- a/downstream.go +++ b/downstream.go @@ -2380,7 +2380,7 @@ func (dc *downstreamConn) handleMessageRegistered(ctx context.Context, msg *irc. var target, limitStr string var boundsStr [2]string switch subcommand { - case "AFTER", "BEFORE": + case "AFTER", "BEFORE", "LATEST": if err := parseMessageParams(msg, nil, &target, &boundsStr[0], &limitStr); err != nil { return err } @@ -2399,7 +2399,7 @@ func (dc *downstreamConn) handleMessageRegistered(ctx context.Context, msg *irc. return err } default: - // TODO: support LATEST, AROUND + // TODO: support AROUND return ircError{&irc.Message{ Command: "FAIL", Params: []string{"CHATHISTORY", "INVALID_PARAMS", subcommand, "Unknown command"}, @@ -2429,7 +2429,9 @@ func (dc *downstreamConn) handleMessageRegistered(ctx context.Context, msg *irc. // TODO: support msgid criteria var bounds [2]time.Time bounds[0] = parseChatHistoryBound(boundsStr[0]) - if bounds[0].IsZero() { + if subcommand == "LATEST" && boundsStr[0] == "*" { + bounds[0] = time.Now(); + } else if bounds[0].IsZero() { return ircError{&irc.Message{ Command: "FAIL", Params: []string{"CHATHISTORY", "INVALID_PARAMS", subcommand, boundsStr[0], "Invalid first bound"}, @@ -2458,7 +2460,7 @@ func (dc *downstreamConn) handleMessageRegistered(ctx context.Context, msg *irc. var history []*irc.Message switch subcommand { - case "BEFORE": + case "BEFORE", "LATEST": history, err = store.LoadBeforeTime(ctx, &network.Network, entity, bounds[0], time.Time{}, limit, eventPlayback) case "AFTER": history, err = store.LoadAfterTime(ctx, &network.Network, entity, bounds[0], time.Now(), limit, eventPlayback)