public static async Task Redeem(UserViewModel user, IEnumerable <string> arguments) { if (!user.HasPermissionsTo(UserRoleEnum.Mod)) { if (ChannelSession.Services.Chat != null) { await ChannelSession.Services.Chat.SendMessage(MixItUp.Base.Resources.YouDoNotHavePermissions); } return; } string name = string.Join(" ", arguments); RedemptionStorePurchaseModel purchase = null; RedemptionStoreProductModel product = ChannelSession.Settings.RedemptionStoreProducts.Values.ToList().FirstOrDefault(p => p.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase)); if (product != null) { IEnumerable <RedemptionStorePurchaseModel> purchases = ChannelSession.Settings.RedemptionStorePurchases.ToList().Where(p => p.ProductID == product.ID); if (purchases != null && purchases.Count() > 0) { purchase = purchases.OrderBy(p => p.PurchaseDate).FirstOrDefault(); } } else { name = name.Replace("@", ""); UserViewModel purchaseUser = ChannelSession.Services.User.GetActiveUserByUsername(name, user.Platform); if (purchaseUser != null) { IEnumerable <RedemptionStorePurchaseModel> purchases = ChannelSession.Settings.RedemptionStorePurchases.ToList().Where(p => p.UserID == user.ID); if (purchases != null && purchases.Count() > 0) { purchase = purchases.OrderBy(p => p.PurchaseDate).FirstOrDefault(); } } } if (purchase != null) { await purchase.Redeem(); } else { if (ChannelSession.Services.Chat != null) { await ChannelSession.Services.Chat.SendMessage(MixItUp.Base.Resources.NoRedemptionStorePurchasesWithThatName); } } }
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(); } } } } }