aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorla-ninpre <leobrekalini@gmail.com>2022-10-17 14:22:41 +0300
committerla-ninpre <leobrekalini@gmail.com>2022-10-17 14:22:41 +0300
commit83c268887bdb324b9c81b1b2182543813a222cf9 (patch)
treee2f6bb0e86d483e745c4782dd35fbd0b9f9d13bc
parentb0ffd95fd9fe7efe119f86b5ece2898fcfd8a940 (diff)
downloadtelebonk-83c268887bdb324b9c81b1b2182543813a222cf9.tar.gz
telebonk-83c268887bdb324b9c81b1b2182543813a222cf9.zip
merge HonkAction into Honk
it probably shouldn't be separate. also it makes easier to ignore honks that were ignored before that.
-rw-r--r--main.go56
1 files changed, 29 insertions, 27 deletions
diff --git a/main.go b/main.go
index 203f6a6..69fe272 100644
--- a/main.go
+++ b/main.go
@@ -66,10 +66,20 @@ type Honk struct {
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 @@ func (h *Honk) Check() error {
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 @@ func (h *Honk) Check() error {
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 @@ func NewMess(parseMode string) *Mess {
}
// 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 @@ func NewMessFromHonk(honk *Honk, action honkAction) []*Mess {
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 @@ func NewMessFromHonk(honk *Honk, action honkAction) []*Mess {
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 @@ func main() {
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 {