Esempio n. 1
0
        public async Task IntentionalShutdown()
        {
            if (Context.Message.Author.Id == ulong.Parse(Program.Instance.GetSetting("OWNER_ID")))
            {
                if (!Program.Instance.serverUp)
                {
                    Program.Instance.downIntentionally = true;
                    if (Program.Instance.Client.GetChannel(ulong.Parse(Program.Instance.GetSetting("CHANNEL_ID"))) != null)
                    {
                        SocketTextChannel channel = (SocketTextChannel)Program.Instance.Client.GetChannel(ulong.Parse(Program.Instance.GetSetting("CHANNEL_ID")));
                        if (await channel.GetMessageAsync(ulong.Parse(Program.Instance.GetSetting("MESSAGE_ID"))) != null)
                        {
                            RestUserMessage message = (RestUserMessage)await channel.GetMessageAsync(ulong.Parse(Program.Instance.GetSetting("MESSAGE_ID")));

                            await message.ModifyAsync(msg => msg.Embed = EmbedMaker.PlayerListOffline(Color.Red, Program.Instance.Client, true, Program.Instance.GetSetting("SERVER_NAME")));

                            await Context.Message.Channel.SendMessageAsync("Changed down-message to intentional.");
                        }
                    }
                }
                else
                {
                    await Context.Channel.SendMessageAsync($"The server is still up, if this isn't right, try again in **{Program.Instance.GetSetting("INTERVAL_SEC")} seconds**.");
                }
            }
            else
            {
                await Context.Channel.SendMessageAsync($"Only <@{Program.Instance.GetSetting("OWNER_ID")}> can do this.");
            }
        }
 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"))));
 }