private async Task ProcessAdd(List <string> args) { if (args.Count == 1) { var name = args[0]; var plog = await _plogDbContext.Plogs.Where(p => p.Name.ToLower() == name.ToLower()).FirstOrDefaultAsync(); if (plog == null) { var character = await _bladeAndSoulService.GetBladeAndSoulCharacter(name); if (character == null || character.Clan.ToLower() != "ploggystyle") { _response = $"{name} is not in Ploggystyle."; } else { plog = new ClanMember { RealName = character.AccountName, Name = name, Active = true, Class = character.Class, Created = DateTime.UtcNow, ImageUrl = character.ProfileImageUrl }; _plogDbContext.Add(plog); await _plogDbContext.SaveChangesAsync(); _response = $"{name} has been added to the clan."; } } else { _response = "This plog already exists!"; if (plog.DiscordId.HasValue && plog.DiscordId.Value != _event.Message.Author.Id) { _response += $" <@{plog.DiscordId}> has claimed this character."; } } } else { _response = "Incorrect command format: !plog add [name]"; } await _messageService.SendMessage(_event.Message.ChannelId, new OutgoingMessage { Content = _response }); }
public async Task <CharacterInformation> ForEachPlog_GetInformation(ClanMember plog) { var start = DateTime.UtcNow; var tasks = new Task[] { _bladeAndSoulService.GetBladeAndSoulCharacter(plog.Name), _bladeAndSoulService.GetBladeAndSoulCharacterAbilities(plog.Name), _bladeAndSoulService.GetBladeAndSoulItemsAsync(plog.Name) }; await Task.WhenAll(tasks); var character = ((Task <BladeAndSoulCharacter>)tasks[0]).Result; var stats = ((Task <AbilitiesResult>)tasks[1]).Result; var items = ((Task <BladeAndSoulItems>)tasks[2]).Result; if (character == null || stats == null || items == null) { // Try again later? return(null); } var isInClan = "Ploggystyle".Equals(character.Clan, StringComparison.OrdinalIgnoreCase); if (!isInClan && plog.Active) { await _webhookService.ExecuteInactivePlogWebhook($"{plog.Name} ({plog.RealName})"); plog.Active = false; return(new CharacterInformation { Plog = plog }); } if (!plog.Active) { // Don't process return(null); } var end = DateTime.UtcNow; await _loggingService.LogAsync($"Processing time for {plog.Name}: {(end - start).TotalMilliseconds}"); return(new CharacterInformation { Plog = plog, Character = character, AbilitiesResult = stats, Items = items }); }