public static async Task Purchase(UserViewModel user, IEnumerable <string> arguments) { if (arguments.Count() == 0) { List <string> items = new List <string>(); foreach (RedemptionStoreProductModel product in ChannelSession.Settings.RedemptionStoreProducts.Values.ToList()) { if (product.IsInfinite || product.CurrentAmount > 0) { items.Add(product.Name); } } await ChannelSession.Services.Chat.SendMessage("Products Available to Purchase: " + string.Join(", ", items), platform : user.Platform); } else { string name = string.Join(" ", arguments); RedemptionStoreProductModel product = ChannelSession.Settings.RedemptionStoreProducts.Values.ToList().FirstOrDefault(p => p.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase)); if (product == null) { if (ChannelSession.Services.Chat != null) { await ChannelSession.Services.Chat.SendMessage(MixItUp.Base.Resources.NoRedemptionStoreProductWithThatName); } return; } if (!product.IsInfinite) { if (product.CurrentAmount <= 0) { if (ChannelSession.Services.Chat != null) { await ChannelSession.Services.Chat.SendMessage(MixItUp.Base.Resources.NoMoreRedemptionStoreProducts); } return; } ThresholdRequirementModel threshold = product.Requirements.Threshold; if (threshold != null && threshold.IsEnabled && threshold.Amount > product.CurrentAmount) { if (ChannelSession.Services.Chat != null) { await ChannelSession.Services.Chat.SendMessage(MixItUp.Base.Resources.NotEnoughRedemptionStoreProducts); } return; } } Result result = await product.Requirements.Validate(new CommandParametersModel(user, arguments)); if (result.Success) { await product.Requirements.Perform(new CommandParametersModel(user, arguments)); foreach (CommandParametersModel u in product.Requirements.GetPerformingUsers(new CommandParametersModel(user, arguments))) { if (!product.IsInfinite) { product.CurrentAmount--; } RedemptionStorePurchaseModel purchase = new RedemptionStorePurchaseModel(product, u.User); ChannelSession.Settings.RedemptionStorePurchases.Add(purchase); if (product.AutoRedeem) { await purchase.Redeem(); } else { purchase.State = RedemptionStorePurchaseRedemptionState.ManualRedeemNeeded; u.SpecialIdentifiers[RedemptionStoreProductModel.ProductNameSpecialIdentifier] = product.Name; CommandModelBase command = ChannelSession.Settings.GetCommand(ChannelSession.Settings.RedemptionStoreManualRedeemNeededCommandID); if (command != null) { await ChannelSession.Services.Command.Queue(command, u); } GlobalEvents.RedemptionStorePurchasesUpdated(); } } } } }
public ThresholdRequirementViewModel(ThresholdRequirementModel requirement) { this.Amount = requirement.Amount; this.TimeSpan = requirement.TimeSpan; this.RunForEachUser = requirement.RunForEachUser; }