merge HonkAction into Honk it probably shouldn't be separate. also it makes easier to ignore honks that were ignored before that.
la-ninpre leobrekalini@gmail.com
Mon, 17 Oct 2022 14:22:41 +0300
1 files changed,
29 insertions(+),
27 deletions(-)
jump to
M
main.go
→
main.go
@@ -66,10 +66,20 @@ Noise string // contents of a post
Onts []string // a slice of tags in a post 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 + MessID int // telegram message_id + ReplyToID int // telegram message_id of a message to reply to + Action HonkAction } +// A HonkAction tells what to do with the saved honk. +type HonkAction int + +const ( + HonkIgnore HonkAction = iota + HonkSend + HonkEdit +) + // A Donk stores metadata for media files. type Donk struct { URL string@@ -98,7 +108,7 @@ hi, ok := honkMap[h.RID]
if !ok { return fmt.Errorf("cannot reply to nonexisting telebonk") } - h.replyToID = hi.messID + h.ReplyToID = hi.MessID default: return fmt.Errorf("unsupported honk type: %s", h.What) }@@ -115,21 +125,21 @@ }
return nil } -func (h *Honk) Decide() honkAction { +func (h *Honk) Decide() { hi, ok := honkMap[h.XID] if ok { - if hi.messID == 0 || hi.Date.Equal(h.Date) { - h.save(hi.messID) - return honkIgnore + if hi.MessID == 0 || hi.Date.Equal(h.Date) { + h.save(hi.MessID) + h.Action = HonkIgnore } - return honkEdit + h.Action = HonkEdit } - return honkSend + h.Action = HonkSend } // save records a Honk to a honkMap func (h *Honk) save(messID int) { - h.messID = messID + h.MessID = messID honkMap[h.XID] = h }@@ -138,14 +148,6 @@ func (h *Honk) forget() {
delete(honkMap, h.XID) } -type honkAction int - -const ( - honkIgnore honkAction = iota - honkSend - honkEdit -) - // A Mess holds data for a message to be sent to Telegram. type Mess struct { Text string `json:"text"`@@ -182,7 +184,7 @@ }
} // NewMessFromHonk creates a slice of Mess objects from existing Honk. -func NewMessFromHonk(honk *Honk, action honkAction) []*Mess { +func NewMessFromHonk(honk *Honk) []*Mess { // donks should be sent as a separate messages, so need to create all of 'em // cap(messes) = 1 for honk + 1 for each donk var messes = make([]*Mess, 0, 1+len(honk.Donks))@@ -205,10 +207,10 @@ if honk.Noise == emptyNoise {
messes = messes[1:] // just donks } - if action == honkEdit { + if honk.Action == HonkEdit { // TODO: implement editing documents and photos messes[0].kind = messEdit - messes[0].MessageID = honk.messID + messes[0].MessageID = honk.MessID messes = messes[:1] // don't donk if editing }@@ -220,7 +222,7 @@ switch honk.What {
case "honked": break case "honked back": - messes[0].ReplyToMessageID = honk.replyToID + messes[0].ReplyToMessageID = honk.ReplyToID case "bonked": oonker := fmt.Sprintf("<a href=\"%s\">%s</a>:", honk.Oonker, honk.Oondle) noise = oonker + "\n" + noise@@ -417,17 +419,17 @@ }
HonkLoop: for _, honk := range honks { - action := honk.Decide() - switch action { - case honkIgnore: + honk.Decide() + switch honk.Action { + case HonkIgnore: continue - case honkSend, honkEdit: + case HonkSend, HonkEdit: if err := honk.Check(); err != nil { log.Print(err) // error continue } } - messes := NewMessFromHonk(honk, action) + messes := NewMessFromHonk(honk) // messes[0] is a honk or a donk to be sent resp, err := messes[0].Send() if err != nil {