/// <summary> /// Executes the specified command. /// </summary> /// <param name="c">The cmd args.</param> /// <returns> /// <c>true</c> if the command was successfully executed, otherwise returns <c>false</c>. /// </returns> public bool Exec(Cmd c) { var sb = new StringBuilder(); foreach (var player in _sst.ServerInfo.CurrentPlayers) { if (player.Value.Team == Team.Blue) { sb.Append(string.Format("\u000311{0}\u00030, ", player.Key)); } if (player.Value.Team == Team.Red) { sb.Append(string.Format("\u000304{0}\u00030, ", player.Key)); } if (player.Value.Team == Team.Spec) { sb.Append(string.Format("\u000314{0}\u00030, ", player.Key)); } if (player.Value.Team == Team.None) { sb.Append(string.Format("\u00030{0}\u00030, ", player.Key)); } } _irc.SendIrcMessage(_irc.IrcSettings.ircChannel, string.Format("\u0003[\u0002{0}\u0002 players currently on server] {1}", _sst.ServerInfo.CurrentPlayers.Count, sb.ToString().TrimEnd(',', ' '))); return(true); }
/// <summary> /// Executes the specified command. /// </summary> /// <param name="c">The cmd args.</param> /// <returns> /// <c>true</c> if the command was successfully executed, otherwise returns <c>false</c>. /// </returns> public bool Exec(Cmd c) { if (_sst.ServerInfo.CurrentPlayers.Count == 0) { _irc.SendIrcMessage(_irc.IrcSettings.ircChannel, "My server has no players at this time."); } else { var sb = new StringBuilder(); foreach (var player in _sst.ServerInfo.CurrentPlayers) { sb.Append(string.Format("\u0003\u0002{0}\u0002 ({1}), ", player.Key, _usersDb.GetUserLevel(player.Key))); } _irc.SendIrcMessage(_irc.IrcSettings.ircChannel, string.Format("\u0003My server's current players have the following access levels: {0}", sb.ToString().TrimEnd(',', ' '))); } return(true); }
/// <summary> /// Executes the specified command asynchronously. /// </summary> /// <param name="c">The cmd args.</param> /// <returns> /// <c>true</c> if the command was successfully executed, otherwise returns <c>false</c>. /// </returns> public async Task <bool> ExecAsync(Cmd c) { var serverDetails = await GetServerDetails(_sst.ServerInfo.CurrentServerId); if (serverDetails == null) { _irc.SendIrcMessage(_irc.IrcSettings.ircChannel, "\u0003\u0002[ERROR]\u0002 Unable to retrieve server information."); Log.Write(string.Format( "Could not retrieve server information when trying to process QL server status requested by IRC user {0}.", c.FromUser), _logClassType, _logPrefix); return(false); } var gametype = (QlGameTypes)serverDetails.game_type; _irc.SendIrcMessage(_irc.IrcSettings.ircChannel, Helpers.IsQuakeLiveTeamGame(gametype) ? FormatTeamGameStatusMessage(serverDetails) : FormatNonTeamGameStatusMessage(serverDetails)); return(true); }
/// <summary> /// Executes the specified command asynchronously. /// </summary> /// <param name="c">The cmd args.</param> /// <returns> /// <c>true</c> if the command was successfully executed, otherwise returns <c>false</c>. /// </returns> public async Task <bool> ExecAsync(Cmd c) { if (!Helpers.KeyExists(c.Args[1], _cmdList)) { _irc.SendIrcNotice(c.FromUser, "\u0002[ERROR]\u0002 That is not valid command."); Log.Write(string.Format("{0} attempted to use IRC to QL interface but specified non-existent SST command ({1}) Ignoring.", c.FromUser, c.Args[1]), _logClassType, _logPrefix); return(false); } if (!_cmdList[c.Args[1]].IsIrcAccessAllowed) { _irc.SendIrcNotice(c.FromUser, "\u0002[ERROR]\u0002 That command can only be accessed from in-game."); Log.Write(string.Format( "{0} attempted to use IRC to QL interface but specified SST command ({1}) that can only be issued from in-game Ignoring.", c.FromUser, c.Args[1]), _logClassType, _logPrefix); return(false); } // See if the c passed here meets the actual IBotCommand's MinArgs if ((c.Args.Length) < _cmdList[c.Args[1]].IrcMinArgs) { _irc.SendIrcNotice(c.FromUser, ReplaceQlColorsWithIrcColors(_cmdList[c.Args[1]].GetArgLengthErrorMessage(c))); Log.Write(string.Format( "{0} attempted to use IRC to QL interface but specified too few parameters for SST command ({1}) Ignoring.", c.FromUser, c.Args[1]), _logClassType, _logPrefix); return(false); } var success = await _cmdList[c.Args[1]].ExecAsync(c); if (success) { // Some commands send multiple lines; IRC messages cannot contain \r, \n, etc. if (_cmdList[c.Args[1]].StatusMessage.Contains(Environment.NewLine)) { SendSplitMessage(c, _cmdList[c.Args[1]].StatusMessage.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries), true); } else { _irc.SendIrcMessage(_irc.IrcSettings.ircChannel, ReplaceQlColorsWithIrcColors(_cmdList[c.Args[1]].StatusMessage)); } Log.Write(string.Format("Successfully executed {0}'s {1} command using IRC to QL interface", c.FromUser, c.Args[1]), _logClassType, _logPrefix); } else { if (_cmdList[c.Args[1]].StatusMessage.Contains(Environment.NewLine)) { SendSplitMessage(c, _cmdList[c.Args[1]].StatusMessage.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries), false); } else { _irc.SendIrcNotice(c.FromUser, ReplaceQlColorsWithIrcColors(_cmdList[c.Args[1]].StatusMessage)); } Log.Write(string.Format("Unsuccessfully execution of {0}'s {1} command using IRC to QL interface", c.FromUser, c.Args[1]), _logClassType, _logPrefix); } return(true); }
/// <summary> /// Executes the specified command asynchronously. /// </summary> /// <param name="c">The cmd args.</param> public async Task <bool> ExecAsync(Cmd c) { if (!c.Args[1].Equals("start") && !c.Args[1].Equals("stop") && !c.Args[1].Equals("reset") && !c.Args[1].Equals("status")) { DisplayArgLengthError(c); return(false); } var qlw = new QlWindowUtils(); if (!qlw.QuakeLiveConsoleWindowExists()) { _irc.SendIrcNotice(c.FromUser, "[ERROR] A running instance of Quake Live could not be found."); Log.Write(string.Format( "{0} attempted to use {1} command but a running instance of Quake Live could not be found. Ignoring.", c.FromUser, c.CmdName), _logClassType, _logPrefix); return(false); } if (c.Args[1].Equals("start")) { if (_sst.IsMonitoringServer) { _irc.SendIrcNotice(c.FromUser, "[ERROR] Your QL server is already being monitored."); Log.Write(string.Format( "{0} attempted to start server monitoring but server is already being monitored. Ignoring.", c.FromUser), _logClassType, _logPrefix); return(false); } _irc.SendIrcMessage(_irc.IrcSettings.ircChannel, "\u0002[SUCCESS]\u0002 Attempting to start QL server monitoring."); await _sst.BeginMonitoring(); // Give it time to complete initilization, then show status. await Task.Delay(11000); ShowMonitorStatus(); } else if (c.Args[1].Equals("stop")) { if (!_sst.IsMonitoringServer) { _irc.SendIrcNotice(c.FromUser, "[ERROR] No QL server is currently being monitored."); Log.Write(string.Format( "{0} attempted to stop server monitoring but server is not currently being monitored. Ignoring.", c.FromUser), _logClassType, _logPrefix); return(false); } _sst.StopMonitoring(); _irc.SendIrcMessage(_irc.IrcSettings.ircChannel, "\u0002[SUCCESS]\u0002 Stopped monitoring your QL server."); } else if (c.Args[1].Equals("reset")) { if (_sst.IsMonitoringServer) { Log.Write(string.Format( "{0} reset server monitoring for actively monitored server; now stopping server monitoring.", c.FromUser), _logClassType, _logPrefix); _irc.SendIrcMessage(_irc.IrcSettings.ircChannel, "\u0002[SUCCESS]\u0002 Your QL server was being monitored; now stopping this monitoring."); _sst.StopMonitoring(); } else { Log.Write(string.Format( "{0} reset server monitoring for non-actively monitored server; now starting server monitoring.", c.FromUser), _logClassType, _logPrefix); _irc.SendIrcMessage(_irc.IrcSettings.ircChannel, "\u0002[SUCCESS]\u0002 Your QL server was not being monitored; now starting monitoring."); await _sst.BeginMonitoring(); } } else if (c.Args[1].Equals("status")) { ShowMonitorStatus(); } return(true); }