all repos — telebonk @ 2b44af422ca279ae06c5cd051d07c75d87d2d1b3

reposter from honk to telegram

fix a bug where honk doesn't get ignored

also tweak log messages.
la-ninpre leobrekalini@gmail.com
Mon, 17 Oct 2022 18:46:58 +0300
commit

2b44af422ca279ae06c5cd051d07c75d87d2d1b3

parent

0d5906ba5db5237375240909ef5f55f5f1efa305

1 files changed, 36 insertions(+), 18 deletions(-)

jump to
M main.gomain.go

@@ -68,14 +68,16 @@ Donks []*Donk // a slice of attachments to a post

MessID int // telegram message_id ReplyToID int // telegram message_id of a message to reply to - Action HonkAction + + Action HonkAction } // A HonkAction tells what to do with the saved honk. type HonkAction int const ( - HonkIgnore HonkAction = iota + HonkNotSet HonkAction = iota + HonkIgnore HonkSend HonkEdit )

@@ -96,10 +98,8 @@ // - it is of unsupported type (not a regular honk, reply or bonk)

// - it contains a `#notg` tag. // - it is empty func (h *Honk) Check() error { - log.Print("checking honk #", h.ID) // info - if h.Date.Before(now) { - return fmt.Errorf("honk #%d is old", h.ID) - } + log.Print("check: checking honk #", h.ID) // info + switch h.What { case "honked", "bonked": break

@@ -125,27 +125,46 @@ }

return nil } +// Decide sets the Action of a Honk. +// +// It sets HonkIgnore to those honks that are: 1) old; 2) already sent and not edits. func (h *Honk) Decide() { - hi, ok := honkMap[h.XID] + oldhonk, ok := honkMap[h.XID] if ok { - if hi.MessID == 0 || hi.Date.Equal(h.Date) { - h.save(hi.MessID) + if oldhonk.MessID == 0 || h.Date.Equal(oldhonk.Date) { h.Action = HonkIgnore + h.save(oldhonk.MessID) + return } + log.Print("decide: honk #", h.XID, " is to be edited") h.Action = HonkEdit + h.MessID = oldhonk.MessID + return } + if h.Date.Before(now) { + h.Action = HonkIgnore + h.save(0) + return + } + log.Print("decide: honk #", h.ID, " is to be sent") h.Action = HonkSend } -// save records a Honk to a honkMap +// save records a Honk to the honkMap func (h *Honk) save(messID int) { h.MessID = messID honkMap[h.XID] = h } -// forget removes a Honk from a honkMap +// forget unchecks a Honk from the honkMap func (h *Honk) forget() { - delete(honkMap, h.XID) + oldhonk, ok := honkMap[h.XID] + if !ok { + return + } + oldhonk.MessID = 0 + oldhonk.ReplyToID = 0 + honkMap[oldhonk.XID] = oldhonk } // A Mess holds data for a message to be sent to Telegram.

@@ -415,7 +434,7 @@ log.Fatal("config:", err) // fail

} config.TgApiURL = strings.TrimRight(config.TgApiURL, "/") if err := checkTgAPI(); err != nil { - log.Fatal(err) // fail + log.Fatal("tgAPI:", err) // fail } }

@@ -437,7 +456,6 @@ }

time.Sleep(5 * time.Second) continue } - HonkLoop: for _, honk := range honks { honk.Decide()

@@ -446,7 +464,7 @@ case HonkIgnore:

continue case HonkSend, HonkEdit: if err := honk.Check(); err != nil { - log.Print(err) // error + log.Print("honk check:", err) // error continue } }

@@ -454,15 +472,15 @@ messes := NewMessFromHonk(honk)

// messes[0] is a honk or a donk to be sent resp, err := messes[0].Send() if err != nil { - log.Print(err) // error - honk.forget() // retry + log.Print("mess send", err) // error + honk.forget() // retry continue } // remember only the first mess' response honk.save(resp.Result.MessageID) for _, mess := range messes[1:] { if _, err := mess.Send(); err != nil { - log.Print(err) // error + log.Print("mess send", err) // error continue HonkLoop } }