public static Embed PlayerList(FPlayerList players, Color Color, DiscordSocketClient Client, string Title) { string temp = String.Empty; if (players.PlayerCount == 0) { temp += "No players online."; } else { temp += "Players:"; } foreach (string player in players.players) { temp += "\n" + player; } EmbedBuilder e = new EmbedBuilder() { Author = new EmbedAuthorBuilder() { Name = Title, IconUrl = Client.CurrentUser.GetAvatarUrl() }, Color = Color, Title = $"Online Players ({players.PlayerCount}/24)", Description = temp, Timestamp = players.timestamp }; return(e.Build()); }
public TimerService(DiscordSocketClient client) { _timer = new Timer(async _ => { bool run = true; if (LastReceivedPlayerlist.Equals(LastSentPlayerList) && LastReceivedPlayerlist.timestamp != new DateTime() && DateTime.Now - LastReceivedPlayerlist.timestamp <= TimeSpan.FromMinutes(2)) { run = false; } if (Program.Instance.Settings["CHANNEL_ID"] == "0" || Program.Instance.Settings["MESSAGE_ID"] == "0") { run = false; } ulong ChannelID = 0; if (!ulong.TryParse(Program.Instance.Settings["CHANNEL_ID"], out ChannelID)) { run = false; } ulong MessageID = 0; if (!ulong.TryParse(Program.Instance.Settings["MESSAGE_ID"], out MessageID)) { run = false; } try { if (run && client.GetChannel(ChannelID) != null) { SocketTextChannel channel = (SocketTextChannel)client.GetChannel(ChannelID); try { await channel.GetMessageAsync(MessageID); } catch (Discord.Net.HttpException) { await Program.Instance.LogMessage(new LogMessage(LogSeverity.Error, "TimerService", "HTML Error when finding message.")); return; } catch (System.Net.Http.HttpRequestException) { await Program.Instance.LogMessage(new LogMessage(LogSeverity.Error, "TimerService", "HTML Error when finding message.")); return; } catch (TaskCanceledException) { await Program.Instance.LogMessage(new LogMessage(LogSeverity.Error, "TimerService", "Task was cancelled when finding message.")); return; } } } catch (Discord.Net.HttpException) { await Program.Instance.LogMessage(new LogMessage(LogSeverity.Error, "TimerService", "HTML Error when finding message.")); return; } catch (System.Net.Http.HttpRequestException) { await Program.Instance.LogMessage(new LogMessage(LogSeverity.Error, "TimerService", "HTML Error when finding message.")); return; } catch (TaskCanceledException) { await Program.Instance.LogMessage(new LogMessage(LogSeverity.Error, "TimerService", "Task was cancelled when finding message.")); return; } try { if (run && client.GetChannel(ChannelID) != null) { SocketTextChannel channel = (SocketTextChannel)client.GetChannel(ChannelID); if (run && await channel.GetMessageAsync(MessageID) != null) { RestUserMessage message = (RestUserMessage)await channel.GetMessageAsync(MessageID); if (LastReceivedPlayerlist._players == null || (DateTime.Now - LastReceivedPlayerlist.timestamp > TimeSpan.FromMinutes(2) && !Program.Instance.downIntentionally) || ((LastReceivedPlayerlist.players.Length == 1 || LastReceivedPlayerlist.players.Length == 2) && LastReceivedPlayerlist.players[0] == "OFFLINE")) { if (LastReceivedPlayerlist._players == null || (LastReceivedPlayerlist.PlayerCount == 2 && LastReceivedPlayerlist.players[0] == "OFFLINE" && LastReceivedPlayerlist.players[1] == "INTENTIONAL")) { await message.ModifyAsync(msg => msg.Embed = EmbedMaker.PlayerListOffline(Discord.Color.Red, client, true, Program.Instance.GetSetting("SERVER_NAME"))); Program.Instance.downIntentionally = true; } else { await message.ModifyAsync(msg => msg.Embed = EmbedMaker.PlayerListOffline(Discord.Color.Red, client, false, Program.Instance.GetSetting("SERVER_NAME"))); Program.Instance.downIntentionally = false; } if (Program.Instance.serverUp) { Program.Instance.serverUp = false; } if (!Program.Instance.serverUp) { await client.SetStatusAsync(UserStatus.Invisible); } LastSentPlayerList = LastReceivedPlayerlist; } else { await message.ModifyAsync(msg => msg.Embed = EmbedMaker.PlayerList(LastReceivedPlayerlist, Discord.Color.DarkGreen, client, Program.Instance.GetSetting("SERVER_NAME"))); await client.SetStatusAsync(UserStatus.Online); LastSentPlayerList = LastReceivedPlayerlist; if (LastReceivedPlayerlist.PlayerCount == 0) { await client.SetGameAsync("with no players online.", type: ActivityType.Playing); } else { await client.SetGameAsync("with " + LastReceivedPlayerlist.PlayerCount + $" player{LastReceivedPlayerlist.PlayerCount.s()} online.", type: ActivityType.Playing); } if (!Program.Instance.serverUp) { Program.Instance.serverUp = true; Program.Instance.downIntentionally = false; } } } } } catch (Discord.Net.HttpException) { await Program.Instance.LogMessage(new LogMessage(LogSeverity.Error, "TimerService", "HTML Error when finding message.")); return; } catch (System.Net.Http.HttpRequestException) { await Program.Instance.LogMessage(new LogMessage(LogSeverity.Error, "TimerService", "HTML Error when finding message.")); return; } catch (TaskCanceledException) { await Program.Instance.LogMessage(new LogMessage(LogSeverity.Error, "TimerService", "Task was cancelled when finding message.")); return; } }, null, TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(double.Parse(Program.Instance.GetSetting("INTERVAL_SEC")))); }