Skip to content

Commit

Permalink
feat: add group support
Browse files Browse the repository at this point in the history
  • Loading branch information
alufers committed Jul 19, 2022
1 parent 611bea3 commit ab7d598
Show file tree
Hide file tree
Showing 8 changed files with 14 additions and 9 deletions.
3 changes: 3 additions & 0 deletions paczkobot/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"strings"

tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"github.com/spf13/viper"
)

type CommandDefArgument struct {
Expand Down Expand Up @@ -55,6 +56,8 @@ func (a *CommandArguments) GetOrAskForArgument(name string, suggestionsArr ...ma

func CommandMatches(cmd Command, userInput string) bool {
usersCmd := strings.Split(userInput, " ")[0]
// strip bot suffix on groups
usersCmd = strings.TrimSuffix(usersCmd, "@"+viper.GetString("telegram.username"))
for _, alias := range cmd.Aliases() {
if alias == usersCmd {
return true
Expand Down
4 changes: 2 additions & 2 deletions paczkobot/follow_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ func (f *FollowService) FollowPackage(ctx context.Context, shipmentNumber string
ChatID: chatID,
}

if err := f.App.DB.Where("followed_package_id = ? AND telegram_user_id = ?",
if err := f.App.DB.Where("followed_package_id = ? AND chat_id = ?",
followedPackage.ID,
followedPackageTelegramUser.TelegramUserID,
followedPackageTelegramUser.ChatID,
).FirstOrCreate(followedPackageTelegramUser).Error; err != nil {
return fmt.Errorf("failed to create FollowedPackageTelegramUser: %v", err)
}
Expand Down
1 change: 1 addition & 0 deletions paczkobot/model.enqueued_notification.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ type EnqueuedNotification struct {
FollowedPackageTelegramUserID string
FollowedPackageTelegramUser *FollowedPackageTelegramUser
TelegramUserID int64 // used for querying
ChatID int64
FollowedPackageProviderID string
FollowedPackageProvider *FollowedPackageProvider
}
7 changes: 4 additions & 3 deletions paczkobot/notifications_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,11 @@ func (s *NotificationsService) NotifyProviderStatusChanged(provider providers.Pr
notif := &EnqueuedNotification{
FollowedPackageTelegramUser: u,
TelegramUserID: u.TelegramUserID,
ChatID: u.ChatID,
FollowedPackageProvider: prov,
}
if err := s.app.DB.Save(notif).Error; err != nil {
return fmt.Errorf("failed to enqueue notification for TG user %v, provider %v: %w", u.TelegramUserID, provider.GetName(), err)
return fmt.Errorf("failed to enqueue notification for TG user %v, chat ID %v, provider %v: %w", u.TelegramUserID, u.ChatID, provider.GetName(), err)
}
go func(u *FollowedPackageTelegramUser) {
time.Sleep(time.Second * 30)
Expand All @@ -56,7 +57,7 @@ func (s *NotificationsService) NotifyProviderStatusChanged(provider providers.Pr

func (s *NotificationsService) sendNotificationsForUser(tgUser *FollowedPackageTelegramUser) error {
var notifications []*EnqueuedNotification
if err := s.app.DB.Where("telegram_user_id = ?", tgUser.TelegramUserID).
if err := s.app.DB.Where("chat_id = ?", tgUser.ChatID).
Preload("FollowedPackageProvider").
Preload("FollowedPackageTelegramUser").
Preload("FollowedPackageProvider.FollowedPackage").
Expand Down Expand Up @@ -95,7 +96,7 @@ func (s *NotificationsService) sendNotificationsForUser(tgUser *FollowedPackageT
msg := tgbotapi.NewMessage(notifications[0].FollowedPackageTelegramUser.ChatID, msgContents)
msg.ParseMode = "HTML"
if _, err := s.app.Bot.Send(msg); err != nil {
return fmt.Errorf("failed to send notifications to user %v: %w", tgUser.TelegramUserID, err)
return fmt.Errorf("failed to send notifications to chat %v: %w", tgUser.ChatID, err)
}

return nil
Expand Down
2 changes: 1 addition & 1 deletion paczkobot/packages_command.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func (s *PackagesCommand) Execute(ctx context.Context, args *CommandArguments) e

followedPackages := []FollowedPackageTelegramUser{}

if err := s.App.DB.Where("telegram_user_id = ?", args.FromUserID).
if err := s.App.DB.Where("chat_id = ?", args.ChatID).
Preload("FollowedPackage").
Preload("FollowedPackage.FollowedPackageProviders").
Find(&followedPackages).Error; err != nil {
Expand Down
2 changes: 1 addition & 1 deletion paczkobot/set_name_command.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func (s *SetNameCommand) Execute(ctx context.Context, args *CommandArguments) er
}

for _, tgUser := range followedPackage.FollowedPackageTelegramUsers {
if tgUser.TelegramUserID == args.FromUserID {
if tgUser.ChatID == args.ChatID {
customName, err := args.GetOrAskForArgument("name")
if err != nil {
return err
Expand Down
2 changes: 1 addition & 1 deletion paczkobot/unfollow_all_command.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func (s *UnfollowAllCommand) Execute(ctx context.Context, args *CommandArguments

followedPackages := []*FollowedPackageTelegramUser{}

if err := s.App.DB.Where("telegram_user_id = ?", args.FromUserID).Preload("FollowedPackage").Find(&followedPackages).Error; err != nil {
if err := s.App.DB.Where("chat_id = ?", args.ChatID).Preload("FollowedPackage").Find(&followedPackages).Error; err != nil {
return fmt.Errorf("failed to query DB for packages: %v", err)
}

Expand Down
2 changes: 1 addition & 1 deletion paczkobot/unfollow_command.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (s *UnfollowCommand) Execute(ctx context.Context, args *CommandArguments) e

var currentUser *FollowedPackageTelegramUser
for _, tgUser := range followedPackage.FollowedPackageTelegramUsers {
if tgUser.TelegramUserID == args.update.Message.From.ID {
if tgUser.ChatID == args.update.Message.Chat.ID {
currentUser = tgUser
break
}
Expand Down

0 comments on commit ab7d598

Please sign in to comment.