private async void PubSub_OnSubscriptionsGiftedReceived(object sender, PubSubSubscriptionsGiftEventModel packet)
        {
            UserViewModel gifter = packet.IsAnonymousGiftedSubscription ? new UserViewModel("An Anonymous Gifter") : ChannelSession.Services.User.GetUserByTwitchID(packet.user_id);

            if (gifter == null)
            {
                gifter = new UserViewModel(packet);
            }

            UserViewModel receiver = ChannelSession.Services.User.GetUserByTwitchID(packet.recipient_id);

            if (receiver == null)
            {
                receiver = new UserViewModel(new UserModel()
                {
                    id           = packet.recipient_id,
                    login        = packet.recipient_user_name,
                    display_name = packet.recipient_display_name
                });
            }

            TwitchGiftedSubEventModel giftedSubEvent = new TwitchGiftedSubEventModel(gifter, receiver, packet);

            if (ChannelSession.Settings.TwitchMassGiftedSubsFilterAmount > 0)
            {
                lock (this.newGiftedSubTracker)
                {
                    this.newGiftedSubTracker.Add(giftedSubEvent);
                }

                if (giftedSubProcessorTask == null)
                {
                    giftedSubProcessorTask = Task.Run(BackgroundGiftedSubProcessor);
                }
            }
            else
            {
                await ProcessGiftedSub(giftedSubEvent);
            }
        }
 public TwitchGiftedSubEventModel(UserViewModel gifter, UserViewModel receiver, PubSubSubscriptionsGiftEventModel packet)
 {
     this.Gifter         = gifter;
     this.Receiver       = receiver;
     this.IsAnonymous    = packet.IsAnonymousGiftedSubscription;
     this.MonthsGifted   = packet.IsMultiMonth ? packet.multi_month_duration : 1;
     this.PlanTierNumber = TwitchEventService.GetSubTierNumberFromText(packet.sub_plan);
     this.PlanTier       = TwitchEventService.GetSubTierNameFromText(packet.sub_plan);
     this.PlanName       = !string.IsNullOrEmpty(packet.sub_plan_name) ? packet.sub_plan_name : TwitchEventService.GetSubTierNameFromText(packet.sub_plan);
 }