Esempio n. 1
0
        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
            });
        }
Esempio n. 2
0
        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
            });
        }