diff --git a/paczkobot/command.go b/paczkobot/command.go index 23300b8..bfa1893 100644 --- a/paczkobot/command.go +++ b/paczkobot/command.go @@ -5,6 +5,7 @@ import ( "strings" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" + "github.com/spf13/viper" ) type CommandDefArgument struct { @@ -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 diff --git a/paczkobot/follow_service.go b/paczkobot/follow_service.go index 9a3e4e6..1df92d9 100644 --- a/paczkobot/follow_service.go +++ b/paczkobot/follow_service.go @@ -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) } diff --git a/paczkobot/model.enqueued_notification.go b/paczkobot/model.enqueued_notification.go index 4dc2343..9e1955c 100644 --- a/paczkobot/model.enqueued_notification.go +++ b/paczkobot/model.enqueued_notification.go @@ -8,6 +8,7 @@ type EnqueuedNotification struct { FollowedPackageTelegramUserID string FollowedPackageTelegramUser *FollowedPackageTelegramUser TelegramUserID int64 // used for querying + ChatID int64 FollowedPackageProviderID string FollowedPackageProvider *FollowedPackageProvider } diff --git a/paczkobot/notifications_service.go b/paczkobot/notifications_service.go index 993da49..ca931bc 100644 --- a/paczkobot/notifications_service.go +++ b/paczkobot/notifications_service.go @@ -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) @@ -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"). @@ -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 diff --git a/paczkobot/packages_command.go b/paczkobot/packages_command.go index 8693216..c53e89c 100644 --- a/paczkobot/packages_command.go +++ b/paczkobot/packages_command.go @@ -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 { diff --git a/paczkobot/set_name_command.go b/paczkobot/set_name_command.go index 6981db4..f86847d 100644 --- a/paczkobot/set_name_command.go +++ b/paczkobot/set_name_command.go @@ -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 diff --git a/paczkobot/unfollow_all_command.go b/paczkobot/unfollow_all_command.go index 3b06a68..728aee9 100644 --- a/paczkobot/unfollow_all_command.go +++ b/paczkobot/unfollow_all_command.go @@ -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) } diff --git a/paczkobot/unfollow_command.go b/paczkobot/unfollow_command.go index 6e1a7d2..26dad1b 100644 --- a/paczkobot/unfollow_command.go +++ b/paczkobot/unfollow_command.go @@ -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 }