예제 #1
0
        private async Task <string> GetFounderStringAsync(EventId id, string founder)
        {
            var founderName = await GetFullNationNameAsync(founder, id);

            var founderUrl    = $"https://www.nationstates.net/nation={BaseApiService.ToID(founder)}";
            var founderString = $"[{founderName}]({founderUrl})";

            return(founderString);
        }
예제 #2
0
        public async Task GetBasicStats(params string[] args)
        {
            var id = LogEventIdProvider.GetEventIdByType(LoggingEvent.GetRegionStats);

            try
            {
                string regionName = string.Join(" ", args);
                _logger.LogInformation(id, LogMessageBuilder.Build(id, $"BasicRegionStats for {regionName} requested."));
                XmlDocument regionStats = await dataService.GetRegionStatsAsync(regionName, id);

                if (regionStats != null)
                {
                    var name       = regionStats.GetElementsByTagName("NAME")[0].InnerText;
                    var numnations = regionStats.GetElementsByTagName("NUMNATIONS")[0].InnerText;
                    var wadelegate = regionStats.GetElementsByTagName("DELEGATE")[0].InnerText;
                    var founder    = regionStats.GetElementsByTagName("FOUNDER")[0].InnerText;
                    var founded    = regionStats.GetElementsByTagName("FOUNDED")[0].InnerText;
                    var flagUrl    = regionStats.GetElementsByTagName("FLAG")[0].InnerText;
                    var power      = regionStats.GetElementsByTagName("POWER")[0].InnerText;
                    var tags       = regionStats.GetElementsByTagName("TAGS")[0].ChildNodes;
                    var tagList    = "";
                    for (int i = 0; i < tags.Count; i++)
                    {
                        tagList += BaseApiService.FromID(tags.Item(i).InnerText) + ", ";
                    }
                    tagList = tagList.Remove(tagList.Length - 2);
                    var regionUrl = $"https://www.nationstates.net/region={BaseApiService.ToID(regionName)}";



                    var builder = new EmbedBuilder();
                    builder.WithThumbnailUrl(flagUrl);
                    builder.WithTitle($"BasicStats for Region");
                    builder.WithDescription($"**[{name}]({regionUrl})** {Environment.NewLine}" +
                                            $"[{numnations} nations]({regionUrl}/page=list_nations) | {founded} | Power: {power}");
                    builder.AddField("Founder", $"[{await GetFullNationName(founder, id)}](https://www.nationstates.net/nation={BaseApiService.ToID(founder)})");
                    builder.AddField("Delegate", await GetDelegateNationString(wadelegate, id));
                    builder.WithFooter($"NationStatesApiBot {AppSettings.VERSION} by drehtisch");
                    builder.WithColor(new Color(_rnd.Next(0, 256), _rnd.Next(0, 256), _rnd.Next(0, 256)));
                    await ReplyAsync(embed : builder.Build());
                }
                else
                {
                    var builder = new EmbedBuilder();
                    builder.WithTitle($"Something went wrong.");
                    builder.WithDescription("Probably no such region.");
                    await ReplyAsync(embed : builder.Build());
                }
            }
            catch (Exception ex)
            {
                _logger.LogCritical(id, ex, LogMessageBuilder.Build(id, "A critical error occured."));
                await ReplyAsync("Something went wrong. Sorry :(");
            }
        }
예제 #3
0
        private async Task <string> GetDelegateNationString(string name, EventId eventId)
        {
            XmlDocument nationStats = await dataService.GetDelegateString(name, eventId);

            var fullName       = nationStats.GetElementsByTagName("FULLNAME")[0].InnerText;
            var influence      = nationStats.GetElementsByTagName("INFLUENCE")[0].InnerText;
            var census         = nationStats.GetElementsByTagName("CENSUS")[0].ChildNodes;
            var influenceValue = census[0].ChildNodes[0].InnerText;
            var endorsements   = census[1].ChildNodes[0].InnerText;

            return($"[{fullName}](https://www.nationstates.net/nation={BaseApiService.ToID(name)}) | {endorsements} endorsements | {influenceValue} influence ({influence})");
        }
        public async Task GetBasicStatsAsync(params string[] args)
        {
            var id = LogEventIdProvider.GetEventIdByType(LoggingEvent.GetNationStats);

            try
            {
                string nationName = string.Join(" ", args);
                _logger.LogInformation(id, LogMessageBuilder.Build(id, $"BasicNationStats for {nationName} requested."));
                XmlDocument nationStats = await _apiDataService.GetNationStatsAsync(nationName, id);

                if (nationStats != null)
                {
                    var demonymplural = nationStats.GetElementsByTagName("DEMONYM2PLURAL")[0].InnerText;
                    var category      = nationStats.GetElementsByTagName("CATEGORY")[0].InnerText;
                    var flagUrl       = nationStats.GetElementsByTagName("FLAG")[0].InnerText;
                    var fullname      = nationStats.GetElementsByTagName("FULLNAME")[0].InnerText;
                    var population    = nationStats.GetElementsByTagName("POPULATION")[0].InnerText;
                    var region        = nationStats.GetElementsByTagName("REGION")[0].InnerText;
                    var founded       = nationStats.GetElementsByTagName("FOUNDED")[0].InnerText;
                    var lastActivity  = nationStats.GetElementsByTagName("LASTACTIVITY")[0].InnerText;
                    var Influence     = nationStats.GetElementsByTagName("INFLUENCE")[0].InnerText;
                    var wa            = nationStats.GetElementsByTagName("UNSTATUS")[0].InnerText;

                    var freedom      = nationStats.GetElementsByTagName("FREEDOM")[0].ChildNodes;
                    var civilStr     = freedom[0].InnerText;
                    var economyStr   = freedom[1].InnerText;
                    var politicalStr = freedom[2].InnerText;

                    var census           = nationStats.GetElementsByTagName("CENSUS")[0].ChildNodes;
                    var civilRights      = census[0].ChildNodes[0].InnerText;
                    var economy          = census[1].ChildNodes[0].InnerText;
                    var politicalFreedom = census[2].ChildNodes[0].InnerText;
                    var influenceValue   = census[3].ChildNodes[0].InnerText;
                    var endorsementCount = census[4].ChildNodes[0].InnerText;
                    var residency        = census[5].ChildNodes[0].InnerText;
                    var residencyDbl     = Convert.ToDouble(residency, _locale);
                    var residencyYears   = (int)(residencyDbl / 365.242199);

                    var populationdbl = Convert.ToDouble(population);

                    var nationUrl = $"https://www.nationstates.net/nation={BaseApiService.ToID(nationName)}";
                    var regionUrl = $"https://www.nationstates.net/region={BaseApiService.ToID(region)}";

                    var builder = new EmbedBuilder();
                    builder.WithThumbnailUrl(flagUrl);
                    builder.WithTitle($"BasicStats for Nation");
                    builder.WithDescription($"**[{fullname}]({nationUrl})** {Environment.NewLine}" +
                                            $"{(populationdbl / 1000.0 < 1 ? populationdbl : populationdbl / 1000.0).ToString(_locale)} {(populationdbl / 1000.0 < 1 ? "million" : "billion")} {demonymplural} | " +
                                            $"Founded {founded} | " +
                                            $"Last active {lastActivity}");
                    builder.AddField("Region",
                                     $"[{region}]({regionUrl}) ", true);
                    int residencyDays = (int)(residencyDbl % 365.242199);
                    builder.AddField("Residency", $"Resident for " +
                                     $"{(residencyYears < 1 ? "" : $"{residencyYears} year" + $"{(residencyYears > 1 ? "s" : "")}")} " +
                                     $"{residencyDays} { (residencyDays != 1 ? $"days" : "day")}", true
                                     );
                    builder.AddField(category, $"C: {civilStr} ({civilRights}) | E: {economyStr} ({economy}) | P: {politicalStr} ({politicalFreedom})");
                    var waVoteString = "";
                    if (wa == "WA Member")
                    {
                        var gaVote = nationStats.GetElementsByTagName("GAVOTE")[0].InnerText;
                        var scVote = nationStats.GetElementsByTagName("SCVOTE")[0].InnerText;
                        if (!string.IsNullOrWhiteSpace(gaVote))
                        {
                            waVoteString += $"GA Vote: {gaVote} | ";
                        }
                        if (!string.IsNullOrWhiteSpace(scVote))
                        {
                            waVoteString += $"SC Vote: {scVote} | ";
                        }
                    }
                    builder.AddField(wa, $"{waVoteString} {endorsementCount} endorsements | {influenceValue} Influence ({Influence})", true);
                    builder.WithFooter(DiscordBotService.FooterString);
                    builder.WithColor(new Color(_rnd.Next(0, 256), _rnd.Next(0, 256), _rnd.Next(0, 256)));
                    await ReplyAsync(embed : builder.Build());
                }
                else
                {
                    var builder = new EmbedBuilder();
                    builder.WithTitle($"Something went wrong.");
                    builder.WithDescription("Probably no such nation.");
                    await ReplyAsync(embed : builder.Build());
                }
            }
예제 #5
0
        public async Task GetBasicStatsAsync(params string[] args)
        {
            var id = LogEventIdProvider.GetEventIdByType(LoggingEvent.GetRegionStats);

            try
            {
                string regionName = string.Join(" ", args);
                if (string.IsNullOrWhiteSpace(regionName))
                {
                    regionName = _defaultRegionName;
                }
                var mention = false;
                if (DumpDataService.IsUpdating)
                {
                    await ReplyAsync("Currently updating region information. This may take a few minutes. You will be pinged once the information is available.");

                    mention = true;
                }
                _logger.LogInformation(id, LogMessageBuilder.Build(id, $"BasicRegionStats for {regionName} requested."));
                XmlDocument regionStats = await _dataService.GetRegionStatsAsync(regionName, id);

                var region = await _dumpDataService.GetRegionAsync(BaseApiService.ToID(regionName));

                if (regionStats != null && region != null)
                {
                    var name                 = regionStats.GetElementsByTagName("NAME").Item(0)?.InnerText;
                    var numnations           = regionStats.GetElementsByTagName("NUMNATIONS").Item(0)?.InnerText;
                    var wadelegate           = regionStats.GetElementsByTagName("DELEGATE").Item(0)?.InnerText;
                    var founder              = region.FOUNDER;
                    var founded              = regionStats.GetElementsByTagName("FOUNDED").Item(0)?.InnerText;
                    var flagUrl              = region.FLAG;
                    var power                = regionStats.GetElementsByTagName("POWER").Item(0)?.InnerText;
                    var waNationCount        = region.WANATIONS.Count();
                    var endoCount            = region.WANATIONS.Sum(n => n.ENDORSEMENTS.Count);
                    var census               = regionStats.GetElementsByTagName("CENSUS").Item(0)?.ChildNodes;
                    var regionalAvgInfluence = census.Item(0)?.ChildNodes.Item(0)?.InnerText;

                    var regionUrl = $"https://www.nationstates.net/region={BaseApiService.ToID(regionName)}";
                    var builder   = new EmbedBuilder
                    {
                        ThumbnailUrl = flagUrl,
                        Title        = name,
                        Url          = regionUrl
                    };
                    if (!string.IsNullOrWhiteSpace(founder) && founder != "0")
                    {
                        string founderString = await GetFounderStringAsync(id, founder);

                        builder.AddField("Founder", $"{founderString}", true);
                    }
                    if (!string.IsNullOrWhiteSpace(founded) && founded != "0")
                    {
                        builder.AddField("Founded", $"{founded}", true);
                    }
                    builder.AddField("Nations", $"[{numnations}]({regionUrl}/page=list_nations)", true);
                    if (!string.IsNullOrWhiteSpace(regionalAvgInfluence) && double.TryParse(regionalAvgInfluence, NumberStyles.Number, _locale, out double avgInfluenceValue) && int.TryParse(numnations, out int numnationsValue))
                    {
                        var powerValue       = avgInfluenceValue * numnationsValue;
                        var powerValueString = powerValue > 1000 ? (powerValue / 1000.0).ToString("0.000", _locale) + "k" : powerValue.ToString(_locale);
                        builder.AddField("Regional Power", $"{power} | {powerValueString} Points", true);
                    }
                    else
                    {
                        builder.AddField("Regional Power", $"{power}", true);
                    }
                    var endoCountString = endoCount > 1000 ? (endoCount / 1000.0).ToString("0.000", _locale) + "k" : endoCount.ToString(_locale);
                    builder.AddField("World Assembly*", $"{waNationCount} member{(waNationCount > 1 ? "s" : string.Empty)} | {endoCountString} endos", true);
                    if (!string.IsNullOrWhiteSpace(wadelegate) && wadelegate != "0")
                    {
                        var delegatetuple = await GetDelegateNationStringAsync(wadelegate, id);

                        builder.AddField($"WA Delegate", $"[{delegatetuple.Item1}](https://www.nationstates.net/nation={BaseApiService.ToID(wadelegate)}) | {delegatetuple.Item2}");
                    }
                    builder.WithFooter(DiscordBotService.FooterString);
                    builder.WithColor(new Color(_rnd.Next(0, 256), _rnd.Next(0, 256), _rnd.Next(0, 256)));
                    builder.AddField("Datasource", "API, * Dump", true);
                    builder.AddField("As of", "Just now, * " + DateTime.UtcNow.Subtract(DumpDataService.LastDumpUpdateTimeUtc).ToString("h'h 'm'm 's's'") + " ago", true);
                    builder.AddField("Next Update in", "On demand, * " + DumpDataService.NextDumpDataUpdate.ToString("h'h 'm'm 's's'"), true);
                    await ReplyAsync(embed : builder.Build());
                }
                else
                {
                    var builder = new EmbedBuilder();
                    builder.WithTitle($"Something went wrong.");
                    builder.WithDescription("No API or No Dump data received. Probably no such region.");
                    await ReplyAsync(embed : builder.Build());
                }
                if (mention)
                {
                    await ReplyAsync($"{Context.User.Mention}");
                }
            }
            catch (Exception ex)
            {
                _logger.LogCritical(id, ex, LogMessageBuilder.Build(id, "A critical error occured."));
                await ReplyAsync("Something went wrong. Sorry :(");
            }
        }