func (n *Nick) String() string { if act, ok := actionMap[n.Action]; ok { return fmt.Sprintf("I last saw %s on %s (%s ago), %s.", n.Nick, datetime.Format(n.Timestamp), util.TimeSince(n.Timestamp), act(n)) } // No specific message format for the action seen. return fmt.Sprintf("I last saw %s at %s (%s ago).", n.Nick, datetime.Format(n.Timestamp), util.TimeSince(n.Timestamp)) }
func urlScan(ctx *bot.Context) { words := strings.Split(ctx.Text(), " ") n, c := ctx.Storable() for _, w := range words { if util.LooksURLish(w) { if u := uc.GetByUrl(w); u != nil { if u.Nick != bot.Nick(ctx.Nick) && time.Since(u.Timestamp) > 2*time.Hour { ctx.Reply("that URL first mentioned by %s %s ago", u.Nick, util.TimeSince(u.Timestamp)) } continue } u := urls.NewUrl(w, n, c) if len(w) > autoShortenLimit && ctx.Public() { u.Shortened = Encode(w) } if err := uc.Insert(u); err != nil { ctx.ReplyN("Couldn't insert url '%s': %s", w, err) continue } if u.Shortened != "" { ctx.Reply("%s's URL shortened as %s%s%s", ctx.Nick, bot.HttpHost(), shortenPath, u.Shortened) } lastseen[ctx.Target()] = u.Id } } }
func smoke(line *base.Line) { if !smokeRx.MatchString(line.Args[1]) { return } sn := sc.LastSeenDoing(line.Nick, "SMOKE") n, c := line.Storable() if sn != nil { bot.ReplyN(line, "You last went for a smoke %s ago...", util.TimeSince(sn.Timestamp)) sn.Nick, sn.Chan = n, c sn.Timestamp = time.Now() } else { sn = seen.SawNick(n, c, "SMOKE", "") } if _, err := sc.Upsert(sn.Id(), sn); err != nil { bot.Reply(line, "Failed to store smoke data: %v", err) } }
func smoke(ctx *bot.Context) { if !smokeRx.MatchString(ctx.Text()) { return } sn := sc.LastSeenDoing(ctx.Nick, "SMOKE") n, c := ctx.Storable() if sn != nil { ctx.ReplyN("You last went for a smoke %s ago...", util.TimeSince(sn.Timestamp)) sn.Nick, sn.Chan = n, c sn.Timestamp = time.Now() } else { sn = seen.SawNick(n, c, "SMOKE", "") } if _, err := sc.Upsert(sn.Id(), sn); err != nil { ctx.Reply("Failed to store smoke data: %v", err) } }