Пример #1
0
        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"))));
 }