func (h AddHandler) Handle(tw twistream.Status, tl *twistream.Timeline) error { botname := config.V.Twitter.Bot.ScreenName user, err := models.FindUserByIdStr(DB(), tw.User.IdStr) if err != nil { return err } d := words.Parse(tw.Text).Remove("@"+botname).Remove("/add", "/a") user.TODOs = append(user.TODOs, d.Words...) user.Update(DB()) txt := words.New(d.Words...). Prepend("@" + tw.User.ScreenName). Append("追加しました"). Join(" ") return tl.Tweet(twistream.Status{ Text: txt, InReplyToScreenName: tw.User.ScreenName, InReplyToStatusId: tw.Id, }) }
func (h RememberMeHandler) Handle(tw twistream.Status, tl *twistream.Timeline) error { user, err := models.FindUserByIdStr(DB(), tw.User.IdStr) log.Println(user, err) if err == nil { txt := words.New("いや、もう知ってますよ...").Prepend("@" + tw.User.ScreenName).Join() return tl.Tweet(twistream.Status{ Text: txt, InReplyToScreenName: tw.User.ScreenName, InReplyToStatusId: tw.Id, }) } err = models.SaveNewUser(DB(), models.NewUserFromTwistreamStatus(tw)) if err != nil { return err } txt := words.New("よろしくおねがいしまーす! 今日も1日がんばるぞい!").Prepend("@" + tw.User.ScreenName).Join() return tl.Tweet(twistream.Status{ Text: txt, InReplyToScreenName: tw.User.ScreenName, InReplyToStatusId: tw.Id, }) }
func (h OnErrorHandler) HandleError(err error, tw twistream.Status, tl *twistream.Timeline) error { // botname := config.V.Twitter.Bot.ScreenName txt := words.Parse("エラー、よく聞き取れませんでした: "). Prepend("@otiai10"). Append(err.Error()). Join(" ") return tl.Tweet(twistream.Status{ Text: txt, InReplyToScreenName: tw.User.ScreenName, InReplyToStatusId: tw.Id, }) return err }
func Listen(timeline *twistream.Timeline) { ch := timeline.Listen() for { select { case tw := <-ch: err := matchesAndHandles(tw, timeline) if err != nil { h := handlers.OnErrorHandler{} h.HandleError(err, tw, timeline) } } } }
func (h EchoHandler) Handle(tw twistream.Status, tl *twistream.Timeline) error { botname := config.V.Twitter.Bot.ScreenName txt := words.Parse(tw.Text). Remove("@" + botname). Remove("/echo"). Prepend("@" + tw.User.ScreenName). Append("って何?"). Join(" ") err := tl.Tweet(twistream.Status{ Text: txt, InReplyToScreenName: tw.User.ScreenName, InReplyToStatusId: tw.Id, }) log.Println(txt, err) return err }
func (h ListHandler) Handle(tw twistream.Status, tl *twistream.Timeline) error { user, err := models.FindUserByIdStr(DB(), tw.User.IdStr) if err != nil { return err } botname := config.V.Twitter.Bot.ScreenName txt := words.New(user.TODOs...). Remove("@"+botname).Remove("/add", "/a"). Prepend("@" + tw.User.ScreenName). Append("いちらんです"). Join(" ") return tl.Tweet(twistream.Status{ Text: txt, InReplyToScreenName: tw.User.ScreenName, InReplyToStatusId: tw.Id, }) }
func (h HelloHandler) Handle(tw twistream.Status, tl *twistream.Timeline) error { user, err := models.FindUserByIdStr(DB(), tw.User.IdStr) log.Println(user, err) if err == nil { txt := words.New("hello! hello!").Prepend("@" + tw.User.ScreenName).Join() return tl.Tweet(twistream.Status{ Text: txt, InReplyToScreenName: tw.User.ScreenName, InReplyToStatusId: tw.Id, }) } txt := words.New("誰すか?").Prepend("@" + tw.User.ScreenName).Join() return tl.Tweet(twistream.Status{ Text: txt, InReplyToScreenName: tw.User.ScreenName, InReplyToStatusId: tw.Id, }) }