aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorla-ninpre <leobrekalini@gmail.com>2022-10-17 18:46:58 +0300
committerla-ninpre <leobrekalini@gmail.com>2022-10-17 18:54:35 +0300
commit2b44af422ca279ae06c5cd051d07c75d87d2d1b3 (patch)
tree929e5230f50ab1fa799893b7bca656dd205d62a9
parent0d5906ba5db5237375240909ef5f55f5f1efa305 (diff)
downloadtelebonk-2b44af422ca279ae06c5cd051d07c75d87d2d1b3.tar.gz
telebonk-2b44af422ca279ae06c5cd051d07c75d87d2d1b3.zip
fix a bug where honk doesn't get ignored
also tweak log messages.
-rw-r--r--main.go54
1 files changed, 36 insertions, 18 deletions
diff --git a/main.go b/main.go
index 965ff69..07a9689 100644
--- a/main.go
+++ b/main.go
@@ -68,14 +68,16 @@ type Honk struct {
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 @@ type Donk struct {
// - 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 @@ func (h *Honk) Check() error {
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 @@ func init() {
}
config.TgApiURL = strings.TrimRight(config.TgApiURL, "/")
if err := checkTgAPI(); err != nil {
- log.Fatal(err) // fail
+ log.Fatal("tgAPI:", err) // fail
}
}
@@ -437,7 +456,6 @@ func main() {
time.Sleep(5 * time.Second)
continue
}
-
HonkLoop:
for _, honk := range honks {
honk.Decide()
@@ -446,7 +464,7 @@ func main() {
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 @@ func main() {
// 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
}
}