public async Task <CurrentServerInfo> GetCSIRooms( string?q, int?version, string?region, string?hideEmpty, string?hideFull, string?hidePassworded, string?hideOfficial, string?hideCustom, string?hideUnranked, string?orderBy, int?page, int?perPage) { JToken queryRoomResponse = await this.QueryRooms(null, null, region, hideEmpty, hideFull, hidePassworded, hideOfficial, hideCustom, hideUnranked, null, 1, 100); RoomObject roomObject = JsonConvert.DeserializeObject <RoomObject>(queryRoomResponse.ToString()); List <Rooms> rooms = new List <Rooms>(); int totalPlayers = 0; foreach (Rooms room in roomObject.Data) { room.Name = FilterRoomNames(room.Name); rooms.Add(room); room.RegionFlag = ConvertRegion(room.Region); totalPlayers += room.AgentCount; } CurrentServerInfo csi = CountRegions(rooms); csi.PlayerCount = totalPlayers; return(csi); }
public async Task CurrentServerInfo(CommandContext ctx) { CurrentServerInfo csi = await this.roomService.GetCSIRooms(null, null, null, null, "false", "false", "false", "false", "false", null, 1, 100); DiscordEmbedBuilder serverEmbed = new DiscordEmbedBuilder { Footer = new DiscordEmbedBuilder.EmbedFooter { IconUrl = DiscordEmoji.FromGuildEmote(ctx.Client, ServerEmojis.Unofficial).Url, }, Color = new DiscordColor(217, 187, 19), Timestamp = DateTime.UtcNow, }; serverEmbed.Url = "https://intruderfps.com/rooms"; int skipRoomCount = 0; if (csi.Rooms.Count > 0) { StringBuilder serverList = new StringBuilder(); int roomCount = 0; foreach (Rooms room in csi.Rooms) { roomCount++; if (roomCount >= 15) { skipRoomCount++; } else { serverList.AppendLine($"{room.ServerIcon} | {room.RegionFlag} | {room.Name} - [{room.AgentCount}/{room.MaxAgents}]"); } } if (skipRoomCount >= 1) { serverList.Append($"<:unofficial:{ServerEmojis.Unofficial}> <:os:{ServerEmojis.Official}> <:passworded:{ServerEmojis.Password}> and **{skipRoomCount}** more servers."); } serverEmbed.Title = "Current Server Information"; serverEmbed.Url = "https://intruderfps.com/rooms"; serverEmbed.AddField($"Server | Region | Name - [Agents]", serverList.ToString(), true); } else { serverEmbed.AddField($"Current Server Information", $"N/A", true); } string extensions = $"{DiscordEmoji.FromGuildEmote(ctx.Client, BrowserEmojis.Chrome)} [**Chrome**](https://chrome.google.com/webstore/detail/intruder-notifications/aoebpknpfcepopfgnbnikaipjeekalim) | " + $"[**Firefox**](https://addons.mozilla.org/en-US/firefox/addon/intruder-notifications/) {DiscordEmoji.FromGuildEmote(ctx.Client, BrowserEmojis.Firefox)}"; serverEmbed.AddField("Browser Extensions", extensions); serverEmbed.Footer.Text = $"SuperbossGames | #current-server-info | Total Agents: {csi.PlayerCount}"; await ctx.RespondAsync(embed : serverEmbed.Build()); }
public async Task Execute() { Log.Information("Looking for available Intruder servers.."); DiscordChannel sbgCSI = await this.dClient.GetChannelAsync(SBGChannels.CurrentServerInfo); CurrentServerInfo csi = await this.roomService.GetCSIRooms(null, null, null, null, "false", "true", "false", "false", "false", null, 1, 100); DiscordEmbedBuilder serverEmbed = new DiscordEmbedBuilder { Footer = new DiscordEmbedBuilder.EmbedFooter { IconUrl = DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Unofficial).Url, }, Color = new DiscordColor(217, 187, 19), Timestamp = DateTime.UtcNow, Title = "Current Server Information", Url = "https://intruderfps.com/rooms", }; int skipRoomCount = 0; if (csi.Rooms.Count > 0) { StringBuilder serverList = new StringBuilder(); int roomCount = 0; foreach (Rooms room in csi.Rooms) { roomCount++; if (roomCount >= 12) { skipRoomCount++; } else { serverList.AppendLine($"{room.ServerIcon} | {room.RegionFlag} | {room.Name} - [{room.AgentCount}/{room.MaxAgents}]"); } } if (skipRoomCount >= 1) { serverList.Append($"<:unofficial:{ServerEmojis.Unofficial}> <:os:{ServerEmojis.Official}> <:passworded:{ServerEmojis.Password}> and **{skipRoomCount}** more."); } serverEmbed.AddField($"Server | Region | Name - [Agents]", serverList.ToString(), true); } else { serverEmbed.AddField( $"Current Server Information", $"Publicly no current servers available.\nUse `.ltp` to join the **Looking to Play** role", true); } #pragma warning disable SA1118 // Parameter should not span multiple lines serverEmbed.AddField( "Statistics", $"{RegionFlagEmojis.US}|{DiscordEmoji.FromGuildEmote(this.dClient, csi.USTOD)}| **{csi.USPlayerCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Players)}| **{csi.USRoomCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Unofficial)}\n" + $"{RegionFlagEmojis.SA}|{DiscordEmoji.FromGuildEmote(this.dClient, csi.SATOD)}| **{csi.SAPlayerCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Players)}| **{csi.SARoomCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Unofficial)}\n" + $"{RegionFlagEmojis.EU}|{DiscordEmoji.FromGuildEmote(this.dClient, csi.EUTOD)}| **{csi.EUPlayerCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Players)}| **{csi.EURoomCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Unofficial)}\n" + $"{RegionFlagEmojis.RU}|{DiscordEmoji.FromGuildEmote(this.dClient, csi.RUTOD)}| **{csi.RUPlayerCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Players)}| **{csi.RURoomCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Unofficial)}\n" + $"{RegionFlagEmojis.JP}|{DiscordEmoji.FromGuildEmote(this.dClient, csi.JPTOD)}| **{csi.JPPlayerCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Players)}| **{csi.JPRoomCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Unofficial)}\n" + $"{RegionFlagEmojis.Asia}|{DiscordEmoji.FromGuildEmote(this.dClient, csi.ASTOD)}| **{csi.AsiaPlayerCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Players)}| **{csi.AsiaRoomCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Unofficial)}\n" + $"{RegionFlagEmojis.AU}|{DiscordEmoji.FromGuildEmote(this.dClient, csi.AUTOD)}| **{csi.AUPlayerCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Players)}| **{csi.AURoomCount}** {DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Unofficial)}\n" + $"Agents: **{csi.PlayerCount}** | Rooms: **{csi.Rooms.Count}**\n", true); #pragma warning restore SA1118 // Parameter should not span multiple lines string extensions = $"{DiscordEmoji.FromGuildEmote(this.dClient, BrowserEmojis.Chrome)} [**Chrome**](https://chrome.google.com/webstore/detail/intruder-notifications/aoebpknpfcepopfgnbnikaipjeekalim) | " + $"[**Firefox**](https://addons.mozilla.org/en-US/firefox/addon/intruder-notifications/) {DiscordEmoji.FromGuildEmote(this.dClient, BrowserEmojis.Firefox)}"; serverEmbed.AddField("Browser Extensions", extensions); serverEmbed.Footer.Text = $"SuperbossGames | #current-server-info"; serverEmbed.Footer.IconUrl = DiscordEmoji.FromGuildEmote(this.dClient, ServerEmojis.Unofficial).Url; serverEmbed.Color = new DiscordColor(217, 187, 19); serverEmbed.Timestamp = DateTime.UtcNow; await this.activityManager.TrySetActivityAsync($"{csi.PlayerCount} agents ", ActivityType.Watching); try { foreach (DiscordMessage msg in await sbgCSI.GetMessagesAsync()) { if (msg.Author.Id == this.dClient.CurrentUser.Id) { await msg.ModifyAsync(embed : serverEmbed.Build()); return; } } } catch (Exception e) { Log.Error(e.InnerException, "Failed to edit or update the Current Server Info."); } Log.Information("Finished looking for Intruder Servers"); }
public async Task <CurrentServerInfo> GetCSIRooms(string?hideEmpty, string?hideFull, string?hidePassworded, string?hideOfficial, string?hideCustom, string?hideUnranked, string?region) { // Send first request JToken queryRoomResponse = await this.QueryRooms(null, null, null, hideEmpty, hideFull, hidePassworded, hideOfficial, hideCustom, hideUnranked, "official%3Adesc", 1, 100); RoomObject roomObject = JsonConvert.DeserializeObject <RoomObject>(queryRoomResponse.ToString()); List <Rooms> rooms = new List <Rooms>(); int totalPlayers = 0; int i = 1; foreach (Rooms room in roomObject.Data) { if (room.Official) { room.ServerIcon = $"<:os:{ServerEmojis.Official}>"; } else { room.ServerIcon = $"<:uo:{ServerEmojis.Unofficial}>"; } if (room.Passworded) { room.ServerIcon = $"<:asd:{ServerEmojis.Password}>"; } room.Name = FilterRoomNames(room.Name); rooms.Add(room); room.RegionFlag = ConvertRegion(room.Region); totalPlayers += room.AgentCount; } // MAKE SURE THE ROOM COUNT IN OUR MODEL MATCHES THE ROOMOBJECT REQUEST while (rooms.Count != roomObject.TotalCount) { i++; // Send another request for moar data queryRoomResponse = await this.QueryRooms(null, null, null, hideEmpty, hideFull, hidePassworded, hideOfficial, hideCustom, hideUnranked, "official%3Adesc", i, 100); // Decode the mainframe overloader roomObject = JsonConvert.DeserializeObject <RoomObject>(queryRoomResponse.ToString()); foreach (Rooms room in roomObject.Data) { if (room.Official) { room.ServerIcon = $"<:os:{ServerEmojis.Official}>"; } else { room.ServerIcon = $"<:uo:{ServerEmojis.Unofficial}>"; } if (room.Passworded) { room.ServerIcon = $"<:asd:{ServerEmojis.Password}>"; } rooms.Add(room); room.RegionFlag = ConvertRegion(room.Region); totalPlayers += room.AgentCount; } } CurrentServerInfo csi = CountRegions(rooms); csi.PlayerCount = totalPlayers; return(csi); }
private static CurrentServerInfo CountRegions(List <Rooms> rooms) { CurrentServerInfo csi = new CurrentServerInfo() { Rooms = rooms, }; foreach (Rooms regionRooms in rooms) { switch (regionRooms.Region) { case "EU": csi.EUPlayerCount += regionRooms.AgentCount; csi.EURoomCount++; break; case "US": csi.USPlayerCount += regionRooms.AgentCount; csi.USRoomCount++; break; case "AU": csi.AUPlayerCount += regionRooms.AgentCount; csi.AURoomCount++; break; case "USW": csi.USPlayerCount += regionRooms.AgentCount; csi.USRoomCount++; break; case "RU": csi.RUPlayerCount += regionRooms.AgentCount; csi.RURoomCount++; break; case "Asia": csi.AsiaPlayerCount += regionRooms.AgentCount; csi.AsiaRoomCount++; break; case "JP": csi.JPPlayerCount += regionRooms.AgentCount; csi.JPRoomCount++; break; case "SA": csi.SAPlayerCount += regionRooms.AgentCount; csi.SARoomCount++; break; case "CAE": csi.CAEPlayerCount += regionRooms.AgentCount; csi.CAERoomCount++; break; case "KR": csi.KRPlayerCount += regionRooms.AgentCount; csi.KRRoomCount++; break; case "IN": csi.INPlayerCount += regionRooms.AgentCount; csi.INRoomCount++; break; } } // US WEST csi.USWTOD = this.CheckTimeOfDay(DateTime.UtcNow.AddHours(-8.0)); csi.CAETOD = CheckTimeOfDay(DateTime.UtcNow.AddHours(-5.0)); csi.USTOD = CheckTimeOfDay(DateTime.UtcNow.AddHours(-5.0)); csi.SATOD = CheckTimeOfDay(DateTime.UtcNow.AddHours(-3.0)); csi.EUTOD = CheckTimeOfDay(DateTime.UtcNow.AddHours(1.0)); csi.RUTOD = CheckTimeOfDay(DateTime.UtcNow.AddHours(3.0)); csi.INTOD = CheckTimeOfDay(DateTime.UtcNow.AddHours(5.5)); csi.ASTOD = CheckTimeOfDay(DateTime.UtcNow.AddHours(8.0)); csi.JPTOD = CheckTimeOfDay(DateTime.UtcNow.AddHours(9.0)); csi.KRTOD = CheckTimeOfDay(DateTime.UtcNow.AddHours(9.0)); csi.AUTOD = CheckTimeOfDay(DateTime.UtcNow.AddHours(11.0)); return(csi); }