Пример #1
0
func (s *t) seen(conn *irc.Connection, msg *irc.Message) {
	if msg.Command != "PRIVMSG" {
		return
	}

	fs := flag.NewFlagSet("seen", flag.ContinueOnError)
	fs.Usage = func() {
		conn.Privmsg(*msg.Target(), "usage: seen <nick>")
	}

	parts := msg.Split()
	if fs.Parse(parts[1:]) != nil {
		return
	}

	if fs.NArg() == 0 {
		fs.Usage()
		return
	}

	target := fs.Arg(0)
	stmt, err := s.db.Prepare(
		fmt.Sprintf("SELECT datetime, message FROM %s WHERE nick LIKE ? ORDER BY datetime desc LIMIT 1", tableName))
	defer stmt.Finalize()
	if err != nil {
		log.Printf("seen.seen(): sql error: %s", err)
		return
	}

	stmt.Exec(target)
	found := stmt.Next()
	if found {
		var datetime int64
		var rawmessage string
		stmt.Scan(&datetime, &rawmessage)
		t := time.SecondsToLocalTime(datetime)
		str := t.Format(time.UnixDate)
		conn.Privmsg(*msg.Target(), str+": "+rawmessage)
	} else {
		conn.Privmsg(*msg.Target(), "I haven't seen "+target)
	}
}
Пример #2
0
func (s *t) lastUrl(conn *irc.Connection, msg *irc.Message) {
	if msg.Command != "PRIVMSG" {
		return
	}

	var nFlag int
	var contextFlag string
	var fromFlag string
	var contains string = ""

	fs := flag.NewFlagSet("urls", flag.ContinueOnError)
	fs.IntVar(&nFlag, "n", 1, "number of results")
	fs.StringVar(&fromFlag, "from", "", "sender's nick contains string")
	fs.StringVar(&contextFlag, "context", "", "context of the message")
	fs.Usage = func() {
		conn.Privmsg(*msg.Target(), "usage: url [-from=<nick>] [-n=<number to display>] [-context=<string>] [<substring>]")
	}

	parts := msg.Split()
	if fs.Parse(parts[1:]) != nil {
		return
	}

	if fs.NArg() > 0 {
		contains = fs.Arg(0)
	}

	query := fmt.Sprintf(
		"SELECT url FROM %s WHERE nick LIKE ? AND url LIKE ? AND rawmessage LIKE ? ORDER BY datetime DESC LIMIT ?", tableName)
	stmt, err := s.db.Prepare(query)
	defer stmt.Finalize()
	if err != nil {
		conn.Privmsg(*msg.Target(), "sql error")
		return
	}

	stmt.Exec("%"+fromFlag+"%",
		"%"+contains+"%",
		"%"+contextFlag+"%",
		nFlag)
	more := stmt.Next()
	var output string

	if !more {
		output = "no URL matches those criterias"
	}

	left := maxResponses
	for more && left > 0 {
		var url string

		stmt.Scan(&url)
		output += url + "   "

		more = stmt.Next()
		left--
	}

	conn.Privmsg(*msg.Target(), output)

}