From 62234560e59929ddde351750434a00d926d09288 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 9 Jul 2015 18:07:09 +0200 Subject: Simiplify --- main.go | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index ad4f8a8..65be185 100644 --- a/main.go +++ b/main.go @@ -8,7 +8,8 @@ import ( "strings" "time" - tdr "dim13.org/theo" + "dim13.org/rss" + "dim13.org/theo" irc "github.com/fluffle/goirc/client" ) @@ -18,6 +19,11 @@ var ( name = flag.String("name", "mincom", "Bots Name") ) +const ( + lor = `https://www.linux.org.ru/section-rss.jsp?section=1` + undeadly = `http://undeadly.org/cgi?action=rss` +) + type Commander interface { irc.Handler fmt.Stringer @@ -55,35 +61,37 @@ func (_ Last) Handle(conn *irc.Conn, line *irc.Line) { func (v Theo) String() string { return string(v) } func (_ Theo) Handle(conn *irc.Conn, line *irc.Line) { - conn.Privmsg(line.Target(), tdr.Theo()) + conn.Privmsg(line.Target(), theo.Theo()) } func (v News) String() string { return string(v) } func (_ News) Handle(conn *irc.Conn, line *irc.Line) { - n, err := FetchNews(lor) + news, err := rss.Fetch(lor) if err != nil { conn.Privmsg(line.Target(), err.Error()) return } if line.Public() { - n = n[:3] + news.Channel.Items = news.Channel.Items[:3] } - for _, s := range n { + for n, i := range news.Channel.Items { + s := fmt.Sprintf("%2d. %v", n+1, i.Title) conn.Privmsg(line.Target(), s) } } func (v BSD) String() string { return string(v) } func (_ BSD) Handle(conn *irc.Conn, line *irc.Line) { - n, err := FetchNews(undeadly) + news, err := rss.Fetch(undeadly) if err != nil { conn.Privmsg(line.Target(), err.Error()) return } if line.Public() { - n = n[:3] + news.Channel.Items = news.Channel.Items[:3] } - for _, s := range n { + for n, i := range news.Channel.Items { + s := fmt.Sprintf("%2d. %v", n+1, i.Title) conn.Privmsg(line.Target(), s) } } @@ -98,27 +106,26 @@ func (_ Help) Handle(conn *irc.Conn, line *irc.Line) { func privmsg(conn *irc.Conn, line *irc.Line) { log.Println(line) - txt := line.Text() + f := strings.Fields(line.Text()) + if line.Public() && line.Nick != conn.Me().Nick { buffer.Value = line buffer = buffer.Next() } + // lookup command - if f := strings.Fields(txt); len(f) > 0 { + if len(f) > 0 { if c, ok := commands[f[0]]; ok { c.Handle(conn, line) } } + // extract single link and fetch title - if strings.Contains(txt, "http") { - if i := strings.Index(txt, "http"); i >= 0 { - txt = txt[i:] - } - if i := strings.IndexAny(txt, " ,"); i > 0 { - txt = txt[:i] - } - if t, err := FetchTitle(txt); err == nil { - conn.Privmsg(line.Target(), t) + for _, v := range f { + if strings.HasPrefix(v, "http") { + if t, err := FetchTitle(v); err == nil { + conn.Privmsg(line.Target(), t) + } } } } -- cgit v1.2.3