diff --git a/mspa/main.go b/mspa/main.go index 65a7750..739a4c6 100644 --- a/mspa/main.go +++ b/mspa/main.go @@ -1,11 +1,11 @@ package main import ( - "encoding/xml" - "errors" "flag" "fmt" + "io/ioutil" "net/http" + "strconv" "strings" "time" @@ -23,36 +23,68 @@ var lastPage string var broker *tg.Broker var apichat *tg.APIChat -const mspaRSS = "http://mspaintadventures.com/rss/rss.xml" -const timelayout = "Mon, 2 Jan 2006 15:04:05 -0700" - -type Item struct { - Title string `xml:"title"` - Link string `xml:"link"` - Date string `xml:"pubDate"` -} - -type RSS struct { - Items []Item `xml:"channel>item"` -} +const upd8url = "http://tjb0607.me/upd8/check.js" func process(b *tg.Broker, update tg.APIMessage) { - if update.Chat.ChatID == *chatID && *(update.Text) == "!start" { + if update.Chat.ChatID == *chatID && *(update.Text) == "!starths" { broker = b apichat = update.Chat broker.SendTextMessage(apichat, "Ok! Aspetto updates..", &update.MessageID) } + if update.Chat.ChatID == *chatID && *(update.Text) == "!tesths" { + isok, data := getupd8("showupd8(\"009309\", \"[S] ACT 6 ACT 6 ACT 5\", 12);\r\n") + if isok { + advert(data) + } else { + broker.SendTextMessage(update.Chat, "Test fallito :/", &update.MessageID) + } + } } -func advert(page Item) { - date, _ := time.Parse(timelayout, page.Date) - dateStr := date.Format("15:04:05") - parts := strings.Split(page.Link, "p=") - pagen := strings.Trim(parts[1], "0") - text := "Nuova pagina uscita!\n\n#" + pagen + " - " + dateStr + "\n" + page.Title + "\n\nClicca qui per leggerla" +func advert(upd8 Upd8) { + pageint := strings.TrimLeft(upd8.Page, "0") + text := "Nuova pagina uscita!\n\n#" + pageint + "\n" + upd8.Title + "\n\nClicca qui per leggerla" broker.SendTextMessage(apichat, text, nil) } +type Upd8 struct { + IsUpd8 bool + Page string + Title string + Count int +} + +func getupd8(body string) (isupd8 bool, out Upd8) { + parts := strings.Split(body, "(") + if parts[0] == "shownoupd8" { + isupd8 = false + return + } + isupd8 = true + if len(parts) < 2 { + fmt.Println("Invalid reply from server: " + body) + isupd8 = false + return + } + args := strings.Split(parts[1], ",") + if len(args) < 3 { + fmt.Println("Invalid reply from server: " + body) + isupd8 = false + return + } + out.Page = strings.Trim(args[0], "\" ") + out.Title = strings.Trim(args[1], "\" ") + pagestr := strings.Trim(args[2], " );\r\n") + var err error + out.Count, err = strconv.Atoi(pagestr) + if err != nil { + fmt.Println("Invalid page count: " + pagestr) + isupd8 = false + return + } + return +} + func startPolling(delay int64) { panicFn := func(err error) { broker.SendTextMessage(apichat, "Errore cercando di leggere l'RSS! @HAMCHA LEGGI LA CONSOLE!", nil) @@ -63,24 +95,17 @@ func startPolling(delay int64) { time.Sleep(time.Second) } for { - resp, err := http.Get(mspaRSS) + resp, err := http.Get(upd8url + "?" + strconv.FormatInt(time.Now().Unix(), 10)) if err != nil { panicFn(err) } - var out RSS - err = xml.NewDecoder(resp.Body).Decode(&out) + data, err := ioutil.ReadAll(resp.Body) if err != nil { panicFn(err) } - if len(out.Items) < 1 { - panicFn(errors.New("0 items in the RSS Feed?")) - } - if out.Items[0].Link != lastPage { - fmt.Println("Got new page: " + out.Items[0].Link) - if lastPage != "" { - advert(out.Items[0]) - } - lastPage = out.Items[0].Link + isupd8, upd8data := getupd8(string(data)) + if isupd8 { + advert(upd8data) } time.Sleep(time.Second * time.Duration(delay)) } @@ -88,7 +113,7 @@ func startPolling(delay int64) { func main() { brokerAddr := flag.String("broker", "localhost:7314", "Broker address:port") - delay := flag.Int64("delau", 5*60, "How many seconds between each poll") + delay := flag.Int64("delau", 10, "How many seconds between each poll") chatID = flag.Int("chatid", -68373985, "Telegram Chat ID to count stats for") flag.Parse() lastPage = ""