public async Task <object> ParseArguments(string[] args, Message message) { var a = new Arguments(); var optSet = new OptionSet { { "c|chart=", (int?c) => a.Days = c } }; a.Item = await RSUtil.GetItemForDynamic(string.Join(" ", optSet.Parse(args))); // Validating if (a.Days < 31) { throw new ControlledException("Chart must be greater than or equal to 31."); } return(a); }
private async Task AddItem(AddArguments args, Message m) { using (Database db = new Database()) { item item; var message = ""; // Removing item already in the DB for (var i = args.Items.Count() - 1; i >= 0; i--) { string itemReadable = args.Items.ElementAt(i); int temp; // Checking if the string is an int if (int.TryParse(itemReadable, out temp)) { item = await db.items.FindAsync(temp); } else { item = await db.items.FirstOrDefaultAsync(it => it.Name == itemReadable); } // Checking if item is in DB if (item != null) { message += $"**{item.Name}** already exists in the database.\n"; args.Items.Remove(itemReadable); } } var tasks = new Task <item> [args.Items.Count]; // Fetching item data for (var i = 0; i < args.Items.Count; i++) { tasks[i] = RSUtil.GetItemForDynamic(args.Items.ElementAt(i)); } // Waiting for all items to complete await Task.Run(() => { try { Task.WaitAll(tasks); } catch (Exception) { } }); // Adding items foreach (var t in tasks) { // Skipping if task errored if (t.Status != TaskStatus.RanToCompletion) { continue; } item = t.Result; db.items.Add(item); message += $"**{item.Name}** has added to the database.\n"; // Removing completed from array args.Items.Remove(item.Name); args.Items.Remove(item.Id.ToString()); } // Outputting message for those that errors foreach (var s in args.Items) { message += $"**{s}** could not be added to the database.\n"; } // Saving if (await db.SaveChangesAsync() < 0) { message += "There was an error saving the items to the database.\n"; } await m.Channel.SendMessage(message.Substring(0, message.Length - 1)); } }