Skip to content

Commit

Permalink
Add reactions support to handlers (#142)
Browse files Browse the repository at this point in the history
* Add reactions support.

* Rename FromUserID(also merged with FromAnonymousChatID) to FromPeer, rename FromChatID to ChatID, rename New(Old)ReactionIn to New(Old)ReactionEmoji.

---------

Co-authored-by: Paul Larsen <[email protected]>
  • Loading branch information
ti-bone and PaulSonOfLars authored Feb 16, 2024
1 parent 30e81e5 commit c18b68e
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 0 deletions.
54 changes: 54 additions & 0 deletions ext/handlers/filters/reaction/reaction.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package reaction

import (
"github.com/PaulSonOfLars/gotgbot/v2"
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers/filters"
)

func All(_ *gotgbot.MessageReactionUpdated) bool {
return true
}

func FromPeer(id int64) filters.Reaction {
return func(mru *gotgbot.MessageReactionUpdated) bool {
if mru.User != nil {
return mru.User.Id == id
}

if mru.ActorChat != nil {
return mru.ActorChat.Id == id
}

return false
}
}

func ChatID(id int64) filters.Reaction {
return func(mru *gotgbot.MessageReactionUpdated) bool {
return mru.Chat.Id == id
}
}

func NewReactionEmoji(reaction string) filters.Reaction {
return func(mru *gotgbot.MessageReactionUpdated) bool {
for _, r := range mru.NewReaction {
if r.MergeReactionType().Emoji == reaction {
return true
}
}

return false
}
}

func OldReactionEmoji(reaction string) filters.Reaction {
return func(mru *gotgbot.MessageReactionUpdated) bool {
for _, r := range mru.OldReaction {
if r.MergeReactionType().Emoji == reaction {
return true
}
}

return false
}
}
1 change: 1 addition & 0 deletions ext/handlers/filters/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ type (
PollAnswer func(pa *gotgbot.PollAnswer) bool
PreCheckoutQuery func(pcq *gotgbot.PreCheckoutQuery) bool
ShippingQuery func(sq *gotgbot.ShippingQuery) bool
Reaction func(mra *gotgbot.MessageReactionUpdated) bool
)
36 changes: 36 additions & 0 deletions ext/handlers/reaction.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package handlers

import (
"fmt"

"github.com/PaulSonOfLars/gotgbot/v2"
"github.com/PaulSonOfLars/gotgbot/v2/ext"
"github.com/PaulSonOfLars/gotgbot/v2/ext/handlers/filters"
)

type Reaction struct {
Filter filters.Reaction
Response Response
}

func NewReaction(f filters.Reaction, r Response) Reaction {
return Reaction{
Filter: f,
Response: r,
}
}

func (r Reaction) CheckUpdate(b *gotgbot.Bot, ctx *ext.Context) bool {
if ctx.MessageReaction == nil {
return false
}
return r.Filter == nil || r.Filter(ctx.MessageReaction)
}

func (r Reaction) HandleUpdate(b *gotgbot.Bot, ctx *ext.Context) error {
return r.Response(b, ctx)
}

func (r Reaction) Name() string {
return fmt.Sprintf("reaction_%p", r.Response)
}

0 comments on commit c18b68e

Please sign in to comment.