protected override void OnRun(CommandDetails details) { TimeSpan timeDiff = DateTime.Now - lastRehash; if (timeDiff <= TimeSpan.FromSeconds(5)) { IRC.Instance.Send(details.Channel, "{0}: Cannot rehash yet", details.Sender.Nickname); return; } lastRehash = DateTime.Now; try { Settings.Load(); } catch (Exception ex) { IRC.Instance.Send(details.Channel, "{0}: Unable to load settings. Error has been logged", details.Sender.Nickname); Log.WriteError("RehashCommand", "Unable to rehash settings: {0}", ex.Message); return; } if (!Settings.Validate()) { IRC.Instance.Send(details.Channel, "{0}: Settings did not validate. Error has been logged", details.Sender.Nickname); return; } IRC.Instance.Send(details.Channel, "{0}: Rehashed", details.Sender.Nickname); // rejoin any channels we may have edited IRC.Instance.Join(Settings.Current.IRCChannels.Select(chan => chan.Channel).ToArray()); }
protected override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: UGC ID argument required", details.Sender.Nickname); return; } ulong ugcId; if (!ulong.TryParse(details.Args[0], out ugcId)) { IRC.Instance.Send(details.Channel, "{0}: Invalid UGC ID", details.Sender.Nickname); return; } if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, "{0}: Unable to request UGC info: not connected to Steam!", details.Sender.Nickname); return; } var jobId = Steam.Instance.Cloud.RequestUGCDetails(ugcId); AddRequest(details, new Request { JobID = jobId, UGC = ugcId }); }
protected override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: SteamID argument required", details.Sender.Nickname); return; } var inputId = details.Args[0]; SteamID steamId; if (!SteamUtils.TryDeduceSteamID(inputId, out steamId)) { IRC.Instance.Send(details.Channel, "{0}: Unable to deduce SteamID from given input", details.Sender.Nickname); return; } if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, details.Sender.Nickname + ": Unable to request steam level: not connected to Steam!"); return; } JobID job = Steam.Instance.Levels.RequestLevels(new SteamID[] { steamId }); AddRequest(details, new Request { Job = job, SteamID = steamId }); }
protected override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: AppID argument required", details.Sender.Nickname); return; } uint appId; if (!uint.TryParse(details.Args[0], out appId)) { IRC.Instance.Send(details.Channel, "{0}: Invalid AppID", details.Sender.Nickname); return; } if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, details.Sender.Nickname + ": Unable to request app name: not connected to Steam!"); return; } // send off a product request as well so we get something to cache for later Steam.Instance.Apps.PICSGetProductInfo(appId, null, false, false); var jobId = Steam.Instance.Apps.GetAppInfo(appId); AddRequest(details, new Request { JobID = jobId, AppID = appId }); }
protected override void OnRun(CommandDetails details) { if (!Settings.Current.IsWebEnabled) { IRC.Instance.Send(details.Channel, "{0}: Web support is disabled", details.Sender.Nickname); return; } if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: AppID argument required", details.Sender.Nickname); return; } uint appId; if (!uint.TryParse(details.Args[0], out appId)) { IRC.Instance.Send(details.Channel, "{0}: Invalid AppID", details.Sender.Nickname); return; } if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, details.Sender.Nickname + ": Unable to request app name: not connected to Steam!"); return; } var jobId = Steam.Instance.Apps.PICSGetProductInfo(appId, null, false, false); AddRequest(details, new Request { JobID = jobId, AppID = appId }); }
protected override void OnRun(CommandDetails details) { var commands = IRC.Instance.CommandManager.RegisteredCommands; if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: Available commands: {1}", details.Sender.Nickname, string.Join(", ", commands.Select(c => c.Triggers.First()))); return; } var cmd = details.Args[0]; var foundCommands = commands .Where(c => c.Triggers.Any(t => t.IndexOf(cmd, StringComparison.OrdinalIgnoreCase) != -1)) .ToList(); if (foundCommands.Count == 0) { IRC.Instance.Send(details.Channel, "{0}: Unable to find command with text '{1}'", details.Sender.Nickname, cmd); } else if (foundCommands.Count == 1) { IRC.Instance.Send(details.Channel, "{0}: {1}", details.Sender.Nickname, foundCommands[0].HelpText); } else { IRC.Instance.Send(details.Channel, "{0}: Found multiple commands: {1}", details.Sender.Nickname, string.Join(", ", foundCommands.Select(c => c.Triggers.First()))); } }
protected override void OnRun(CommandDetails details) { if (details.Args.Length < 2) { IRC.Instance.Send(details.Channel, "{0}: Usage !findacc <query> <type>", details.Sender.Nickname); return; } if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, "{0}: Unable to request account info: not connected to Steam!", details.Sender.Nickname); return; } string accOrEmail = details.Args[0]; string typeStr = details.Args[1]; SteamAccount.ERequestAccountData type; if (!Enum.TryParse(typeStr, out type)) { IRC.Instance.Send(details.Channel, "{0}: Invalid type, should be one of: {1}", details.Sender.Nickname, string.Join(", ", Enum.GetNames(typeof(SteamAccount.ERequestAccountData)))); return; } var jobId = Steam.Instance.Account.RequestAccountData(accOrEmail, type); AddRequest(details, new Request { JobID = jobId }); }
protected override void OnRun( CommandDetails details ) { TimeSpan timeDiff = DateTime.Now - lastRehash; if ( timeDiff <= TimeSpan.FromSeconds( 5 ) ) { IRC.Instance.Send( details.Channel, "{0}: Cannot rehash yet", details.Sender.Nickname ); return; } lastRehash = DateTime.Now; try { Settings.Load(); } catch ( Exception ex ) { IRC.Instance.Send( details.Channel, "{0}: Unable to load settings. Error has been logged", details.Sender.Nickname ); Log.WriteError( "RehashCommand", "Unable to rehash settings: {0}", ex.Message ); return; } if ( !Settings.Validate() ) { IRC.Instance.Send( details.Channel, "{0}: Settings did not validate. Error has been logged", details.Sender.Nickname ); return; } IRC.Instance.Send( details.Channel, "{0}: Rehashed", details.Sender.Nickname ); // rejoin any channels we may have edited IRC.Instance.Join( Settings.Current.IRCChannels.Select( chan => chan.Channel ).ToArray() ); }
protected override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: SteamID argument required", details.Sender.Nickname); return; } var inputId = details.Args[0]; SteamID steamId; if (!SteamUtils.TryDeduceSteamID(inputId, out steamId)) { IRC.Instance.Send(details.Channel, "{0}: Unable to deduce SteamID from given input", details.Sender.Nickname); return; } if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, "{0}: Unable to request profile info: not connected to Steam!", details.Sender.Nickname); return; } if (steamId.IsIndividualAccount) { var jobId = Steam.Instance.Friends.RequestProfileInfo(steamId); AddRequest(details, new Request { JobID = jobId, SteamID = steamId }); } else { IRC.Instance.Send(details.Channel, "{0}: Unable to request profile info: Not an individual account!", details.Sender.Nickname); } }
protected override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: SteamID argument required", details.Sender.Nickname); return; } var inputId = details.Args[0]; SteamID steamId; if (!SteamUtils.TryDeduceSteamID(inputId, out steamId)) { IRC.Instance.Send(details.Channel, "{0}: Unable to deduce SteamID from given input", details.Sender.Nickname); return; } IRC.Instance.Send(details.Channel, "{0}: {1}", details.Sender.Nickname, SteamUtils.ExpandSteamID(steamId)); if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, details.Sender.Nickname + ": Unable to request persona info: not connected to Steam!"); return; } if (steamId.IsIndividualAccount || steamId.IsClanAccount) { AddRequest(details, new Request { SteamID = steamId }); Steam.Instance.Friends.RequestFriendInfo(steamId, ( EClientPersonaStateFlag )short.MaxValue); } }
protected override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: filter argument required", details.Sender.Nickname); return; } if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, "{0}: Unable to request server count: not connected to Steam!", details.Sender.Nickname); return; } var query = new SteamMasterServer.QueryDetails { Region = ERegionCode.World, }; query.Filter = string.Join(" ", details.Args); var jobId = Steam.Instance.MasterServer.ServerQuery(query); AddRequest(details, new Request { JobID = jobId }); }
protected override void OnRun( CommandDetails details ) { var commands = IRC.Instance.CommandManager.RegisteredCommands; if ( details.Args.Length == 0 ) { IRC.Instance.Send( details.Channel, "{0}: Available commands: {1}", details.Sender.Nickname, string.Join( ", ", commands.Select( c => c.Triggers.First() ) ) ); return; } var cmd = details.Args[ 0 ]; var foundCommands = commands .Where( c => c.Triggers.Any( t => t.IndexOf( cmd, StringComparison.OrdinalIgnoreCase ) != -1 ) ) .ToList(); if ( foundCommands.Count == 0 ) { IRC.Instance.Send( details.Channel, "{0}: Unable to find command with text '{1}'", details.Sender.Nickname, cmd ); } else if ( foundCommands.Count == 1 ) { IRC.Instance.Send( details.Channel, "{0}: {1}", details.Sender.Nickname, foundCommands[ 0 ].HelpText ); } else { IRC.Instance.Send( details.Channel, "{0}: Found multiple commands: {1}", details.Sender.Nickname, string.Join( ", ", foundCommands.Select( c => c.Triggers.First() ) ) ); } }
protected override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: Published File ID argument required", details.Sender.Nickname); return; } ulong pubFileId; if (!ulong.TryParse(details.Args[0], out pubFileId)) { IRC.Instance.Send(details.Channel, "{0}: Invalid Published File ID", details.Sender.Nickname); return; } if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, "{0}: Unable to request published file info: not connected to Steam!", details.Sender.Nickname); return; } var jobId = ugcHandler.RequestUGC(pubFileId, OnUGC); AddRequest(details, new Request { JobID = jobId, PubFileID = pubFileId }); }
protected override void OnRun(CommandDetails details) { TimeSpan timeToMainEvent = MainEvent - DateTime.UtcNow; IRC.Instance.Send(details.Channel, "{0}: TI7 Main Event: {1}", details.Sender.Nickname, GetTime(timeToMainEvent) ); }
protected override void OnRun( CommandDetails details ) { var rand = new Random(); string quote = Settings.Current.BrunoQuotes[ rand.Next( Settings.Current.BrunoQuotes.Count ) ]; IRC.Instance.Send( details.Channel, "\"{0}\" - Bruno", quote ); }
protected override void OnRun(CommandDetails details) { var rand = new Random(); string quote = Settings.Current.BrunoQuotes[rand.Next(Settings.Current.BrunoQuotes.Count)]; IRC.Instance.Send(details.Channel, "\"{0}\" - Bruno", quote); }
protected override void OnRun( CommandDetails details ) { TimeSpan timeToWildCard = WildCard - DateTime.UtcNow; TimeSpan timeToGroupStages = GroupStages - DateTime.UtcNow; TimeSpan timeToMainEvent = MainEvent - DateTime.UtcNow; IRC.Instance.Send( details.Channel, "{0}: TI3 Wild Card: {1} | Group Stages: {2} | Main Event: {3}", details.Sender.Nickname, GetTime( timeToWildCard ), GetTime( timeToGroupStages ), GetTime( timeToMainEvent ) ); }
protected override void OnRun( CommandDetails details ) { TimeSpan timeToRegionalQuals = RegionalQualifiers - DateTime.UtcNow; TimeSpan timeToPlayoffs = Playoffs - DateTime.UtcNow; TimeSpan timeToMainEvent = MainEvent - DateTime.UtcNow; IRC.Instance.Send( details.Channel, "{0}: TI4 Regional Qualifiers: {1} | Playoffs: {2} | Main Event: {3}", details.Sender.Nickname, GetTime( timeToRegionalQuals ), GetTime( timeToPlayoffs ), GetTime( timeToMainEvent ) ); }
protected override void OnRun(CommandDetails details) { TimeSpan timeToRegionalQuals = RegionalQualifiers - DateTime.UtcNow; TimeSpan timeToPlayoffs = Playoffs - DateTime.UtcNow; TimeSpan timeToMainEvent = MainEvent - DateTime.UtcNow; IRC.Instance.Send(details.Channel, "{0}: TI4 Regional Qualifiers: {1} | Playoffs: {2} | Main Event: {3}", details.Sender.Nickname, GetTime(timeToRegionalQuals), GetTime(timeToPlayoffs), GetTime(timeToMainEvent)); }
protected override void OnRun(CommandDetails details) { TimeSpan timeToWildCard = WildCard - DateTime.UtcNow; TimeSpan timeToGroupStages = GroupStages - DateTime.UtcNow; TimeSpan timeToMainEvent = MainEvent - DateTime.UtcNow; IRC.Instance.Send(details.Channel, "{0}: TI3 Wild Card: {1} | Group Stages: {2} | Main Event: {3}", details.Sender.Nickname, GetTime(timeToWildCard), GetTime(timeToGroupStages), GetTime(timeToMainEvent)); }
void RunForEnum <TEnum>(string inputValue, CommandDetails details) where TEnum : struct { string enumName = typeof(TEnum) .GetDottedTypeName() .Replace("SteamKit2.", ""); // chop off the root namespace TEnum enumValue; if (Enum.TryParse <TEnum>(inputValue, out enumValue)) { IRC.Instance.Send(details.Channel, "{0}: {1} ({2:D}) = {3}", details.Sender.Nickname, enumName, enumValue, ExpandEnumFlags(enumValue)); } else { bool includeDeprecated = false; if (details.Args.Length > 2 && details.Args[2].Equals("deprecated", StringComparison.InvariantCultureIgnoreCase)) { includeDeprecated = true; } var enumValues = Enum.GetValues(typeof(TEnum)).Cast <TEnum>(); if (!includeDeprecated) { enumValues = enumValues.Except(enumValues.Where(x => typeof(TEnum).GetMember(x.ToString())[0].GetCustomAttributes(typeof(ObsoleteAttribute), inherit: false).Any())); } if (!string.IsNullOrEmpty(inputValue)) { enumValues = enumValues.Where(x => x.ToString().IndexOf(inputValue, StringComparison.InvariantCultureIgnoreCase) >= 0); } int matchingCount = enumValues.Count(); bool truncated = false; if (matchingCount == 0) { IRC.Instance.Send(details.Channel, "{0}: No matches found.", details.Sender.Nickname); return; } else if (matchingCount > 10) { truncated = true; enumValues = enumValues.Take(10); } var formatted = string.Join(", ", enumValues.Select(@enum => string.Format("{0} ({1})", @enum.ToString(), Enum.Format(typeof(TEnum), @enum, "D")))); if (truncated) { formatted = string.Format("{0}, and {1} more...", formatted, matchingCount - 10); } IRC.Instance.Send(details.Channel, "{0}: {1} = {2}", details.Sender.Nickname, enumName, formatted); } }
protected override void OnRun(CommandDetails details) { using (var webClient = new WebClient()) { var req = new Request(); AddRequest(details, req); webClient.DownloadStringCompleted += OnDownloadStringCompleted; webClient.DownloadStringAsync(new Uri(TICKER), req); } }
protected override void OnRun(CommandDetails details) { using (var webClient = new WebClient()) { var req = new Request(); AddRequest(details, req); var uri = new Uri("http://comeonandsl.am/data/slams.js"); webClient.DownloadStringCompleted += OnDownloadCompleted; webClient.DownloadStringAsync(uri, req); } }
protected override void OnRun(CommandDetails details) { using (var webClient = new RedirectWebClient()) { var req = new Request(); AddRequest(details, req); var uri = new Uri("http://fenne.cc/"); webClient.RedirectDownloadStringCompleted += OnDownloadCompleted; webClient.DownloadStringAsync(uri, req); } }
protected override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: GameID argument required", details.Sender.Nickname); return; } ulong gameId; if (!ulong.TryParse(details.Args[0], out gameId)) { // lets search by name if we're not a gameid string appName = string.Join(" ", details.Args); uint appId; if (!Steam.Instance.AppInfo.FindApp(appName, out appId, gamesOnly: true)) { IRC.Instance.Send(details.Channel, "{0}: Invalid GameID or unknown app name", details.Sender.Nickname); return; } gameId = appId; } GameID realGameID = gameId; if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, "{0}: Unable to request player counts for {1}: not connected to Steam!", details.Sender.Nickname, GetAppName(realGameID.AppID)); return; } if (realGameID.AppID == 0) { // send this request as a package info request Steam.Instance.Apps.PICSGetProductInfo(null, realGameID.AppID, false, false); } else { // send off a product request as well so we get something to cache for later Steam.Instance.Apps.PICSGetProductInfo(realGameID.AppID, null, false, false); } var jobId = Steam.Instance.UserStats.GetNumberOfCurrentPlayers(gameId); AddRequest(details, new Request { JobID = jobId, GameID = gameId }); }
protected override void OnRun(CommandDetails details) { if (details.Trigger != "!enum") { // if the user didn't use !enum, then it was one of the shortcut commands // so we'll rerun the trigger with the enum as the first argument string enumName = details.Trigger.Substring(1); string[] oldArgs = details.Args; details.Trigger = "!enum"; details.Args = new string[oldArgs.Length + 1]; // new args = enumName + old args details.Args[0] = enumName; Array.Copy(oldArgs, 0, details.Args, 1, oldArgs.Length); OnRun(details); return; } if (details.Args.Length < 1) { IRC.Instance.Send(details.Channel, "{0}: enum name argument required", details.Sender.Nickname); return; } string enumType = details.Args[0]; string inputEnum = details.Args.Length > 1 ? details.Args[1] : null; var matchingEnumType = typeof(CMClient).Assembly.GetTypes() .Where(x => x.IsEnum) .Where(x => x.Namespace.StartsWith("SteamKit2")) // some inner namespaces have enums that have matching names, but we (most likely) want to match against the root enums // so we order by having the root enums first .OrderByDescending(x => x.Namespace == "SteamKit2") // we want to match against name matches, or partial fullname matches .Where(x => x.Name.Equals(enumType, StringComparison.InvariantCultureIgnoreCase) || x.GetDottedTypeName().IndexOf(enumType, StringComparison.OrdinalIgnoreCase) != -1) .FirstOrDefault(); if (matchingEnumType == null) { IRC.Instance.Send(details.Channel, "{0}: No such enum type.", details.Sender.Nickname); return; } GetType().GetMethod("RunForEnum", BindingFlags.Instance | BindingFlags.NonPublic) .MakeGenericMethod(matchingEnumType) .Invoke(this, new object[] { inputEnum, details }); }
protected override void OnRun(CommandDetails details) { if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, "{0}: Unable to request tf2 war stats: not connected to Steam!", details.Sender.Nickname); return; } var request = new ClientGCMsgProtobuf <CGCMsgGC_SpyVsEngyWar_RequestGlobalStats>((uint)ETFGCMsg.k_EMsgGC_SpyVsEngyWar_RequestGlobalStats); Steam.Instance.GameCoordinator.Send(request, 440); AddRequest(details, new Request()); }
protected override void OnRun(CommandDetails details) { if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, "{0}: Unable to request dota matchmaking stats: not connected to Steam!", details.Sender.Nickname); return; } var request = new ClientGCMsgProtobuf <CMsgDOTAMatchmakingStatsRequest>((uint)EDOTAGCMsg.k_EMsgGCMatchmakingStatsRequest); Steam.Instance.GameCoordinator.Send(request, APPID); // the GC doesn't consider this a job, so we have no source jobid AddRequest(details, new Request()); }
protected async override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: AppID argument required", details.Sender.Nickname); return; } uint appId; if (!uint.TryParse(details.Args[0], out appId)) { // lets search by name if we're not a gameid string appName = string.Join(" ", details.Args); if (!Steam.Instance.AppInfo.FindApp(appName, out appId, gamesOnly: true)) { IRC.Instance.Send(details.Channel, "{0}: Invalid GameID or unknown app name", details.Sender.Nickname); return; } } if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, "{0}: Unable to request player counts for {1}: not connected to Steam!", details.Sender.Nickname, GetAppName(appId)); return; } if (appId == 0) { // send this request as a package info request var _ = Steam.Instance.Apps.PICSGetProductInfo(null, appId, false, false); } else { // send off a product request as well so we get something to cache for later var _ = Steam.Instance.Apps.PICSGetProductInfo(appId, null, false, false); } var result = await playerCountHandler.RequestPlayerCountWeb(appId); // var result = await playerCountHandler.RequestPlayerCount( appId ); OnNumPlayers(result, new Request { AppID = appId, Channel = details.Channel, Requester = details.Sender }); }
protected override void OnRun(CommandDetails details) { var pony = details.Args .FirstOrDefault() ?? ""; using (var webClient = new WebClient()) { var req = new Request(); AddRequest(details, req); var uri = new Uri(string.Format("https://areweponyyet.com/?chatty=1&pony={0}", Uri.EscapeDataString(pony))); webClient.DownloadStringCompleted += OnDownloadCompleted; webClient.DownloadStringAsync(uri, req); } }
protected override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: GameID argument required", details.Sender.Nickname); return; } ulong gameId; if (!ulong.TryParse(details.Args[0], out gameId)) { IRC.Instance.Send(details.Channel, "{0}: Invalid GameID", details.Sender.Nickname); return; } IRC.Instance.Send(details.Channel, "{0}: {1}", details.Sender.Nickname, SteamUtils.ExpandGameID(gameId)); }
protected override void OnRun( CommandDetails details ) { if ( details.Args.Length == 0 ) { IRC.Instance.Send( details.Channel, "{0}: EResult argument required", details.Sender.Nickname ); return; } string inputEResult = details.Args[ 0 ]; int eResult; if ( !int.TryParse( inputEResult, out eResult ) ) { IRC.Instance.Send( details.Channel, "{0}: Invalid EResult value", details.Sender.Nickname ); return; } IRC.Instance.Send( details.Channel, "{0}: {1}", details.Sender.Nickname, ( EResult )eResult ); }
protected override void OnRun(CommandDetails details) { bool isAMBug = string.Equals(details.Trigger, "!bug", StringComparison.OrdinalIgnoreCase); if (isAMBug) { if (IRC.Instance.IsUserOnChannel(details.Channel, "yakbot")) { return; // glory to the yak } } if (details.Args.Length < 1) { IRC.Instance.Send(details.Channel, "{0}: {1}", details.Sender.Nickname, HelpText); return; } string bugOrAlias = string.Join(" ", details.Args); bugOrAlias = HttpUtility.UrlEncode(bugOrAlias); using (var webClient = new WebClient()) { var req = new Request(); AddRequest(details, req); webClient.DownloadStringCompleted += OnDownloadCompleted; req.Url = "https://bugzilla.mozilla.org/show_bug.cgi?id={0}"; if (isAMBug) { req.Url = "https://bugs.alliedmods.net/show_bug.cgi?id={0}"; } req.Url = string.Format(req.Url, bugOrAlias); webClient.DownloadStringAsync(new Uri(req.Url), req); } }
protected override void OnRun( CommandDetails details ) { if ( details.Args.Length == 0 ) { IRC.Instance.Send( details.Channel, "{0}: SteamID argument required", details.Sender.Nickname ); return; } var inputGid = details.Args[ 0 ]; ulong ulGid; if ( !ulong.TryParse( inputGid, out ulGid ) ) { IRC.Instance.Send( details.Channel, "{0}: Invalid GID", details.Sender.Nickname ); return; } GlobalID gid = ulGid; IRC.Instance.Send( details.Channel, "{0}: {1}", details.Sender.Nickname, SteamUtils.ExpandGID( gid ) ); }
protected override void OnRun(CommandDetails details) { if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: GID argument required", details.Sender.Nickname); return; } var inputGid = details.Args[0]; ulong ulGid; if (!ulong.TryParse(inputGid, out ulGid)) { IRC.Instance.Send(details.Channel, "{0}: Invalid GID", details.Sender.Nickname); return; } GlobalID gid = ulGid; IRC.Instance.Send(details.Channel, "{0}: {1}", details.Sender.Nickname, SteamUtils.ExpandGID(gid)); }
protected override void OnRun(CommandDetails details) { if (!Steam.Instance.Connected) { IRC.Instance.Send(details.Channel, "{0}: Unable to request dota custom game player information: not connected to Steam!", details.Sender.Nickname); return; } if (details.Args.Length == 0) { IRC.Instance.Send(details.Channel, "{0}: Game ID argument required", details.Sender.Nickname); return; } ulong gameId; if (!ulong.TryParse(details.Args[0], out gameId)) { string pubFileName = string.Join(" ", details.Args); if (!ugcHandler.FindUGC(pubFileName, out gameId, appId: APPID)) { IRC.Instance.Send(details.Channel, "{0}: Invalid Game ID or unknown UGC name", details.Sender.Nickname); return; } } var request = new ClientGCMsgProtobuf <CMsgClientToGCCustomGamePlayerCountRequest>((uint)EDOTAGCMsg.k_EMsgClientToGCCustomGamePlayerCountRequest); request.Body.custom_game_id = gameId; request.SourceJobID = Steam.Instance.Client.GetNextJobID(); Steam.Instance.GameCoordinator.Send(request, APPID); AddRequest(details, new Request { Job = request.SourceJobID }); }
protected override void OnRun( CommandDetails details ) { TimeSpan timeToQualifiers = Qualifiers - DateTime.UtcNow; TimeSpan timeToMainEvent = MainEvent - DateTime.UtcNow; IRC.Instance.Send( details.Channel, "{0}: TI5 Qualifiers: {1} | Main Event: {2}", details.Sender.Nickname, GetTime( timeToQualifiers ), GetTime( timeToMainEvent ) ); }
protected abstract void OnRun( CommandDetails details );
internal void DoRun( CommandDetails details ) { OnRun( details ); }
protected override void OnRun( CommandDetails details ) { if ( !Settings.Current.IsAdmin( details.Sender ) ) return; if ( details.Args.Length < 2 ) { IRC.Instance.Send( details.Channel, "{0}: {1}", details.Sender.Nickname, HelpText ); return; } string mode = details.Args[ 0 ]; string option = details.Args[ 1 ]; string value = string.Join( " ", details.Args.Skip( 2 ) ); string[] scalarModes = { "get", "set" }; string[] listModes = { "add", "remove", "Clear" }; if ( scalarModes.Contains( mode, StringComparer.OrdinalIgnoreCase ) ) { // scalar operation if ( mode.Equals( "get", StringComparison.OrdinalIgnoreCase ) ) { try { string configValue = GetConfigValue( option ); IRC.Instance.Send( details.Channel, "{0}: {1}: {2}", details.Sender.Nickname, option, configValue ); } catch ( InvalidOperationException ex ) { IRC.Instance.Send( details.Channel, "{0}: Unable to get value: {1}", details.Sender.Nickname, ex.Message ); } } else // set { if ( details.Args.Length < 3 ) { IRC.Instance.Send( details.Channel, "{0}: Missing required value for config field", details.Sender.Nickname ); return; } try { SetScalarConfigValue( option, value ); IRC.Instance.Send( details.Channel, "{0}: Set!", details.Sender.Nickname ); } catch ( InvalidOperationException ex ) { IRC.Instance.Send( details.Channel, "{0}: Unable to set value: {1}", details.Sender.Nickname, ex.Message ); } } } else if ( listModes.Contains( mode, StringComparer.OrdinalIgnoreCase ) ) { // list operation if ( mode.Equals( "add", StringComparison.OrdinalIgnoreCase ) ) { if ( details.Args.Length < 3 ) { IRC.Instance.Send( details.Channel, "{0}: Missing required value for config field", details.Sender.Nickname ); return; } try { AddListConfigValue( option, value ); IRC.Instance.Send( details.Channel, "{0}: Added!", details.Sender.Nickname ); } catch ( InvalidOperationException ex ) { IRC.Instance.Send( details.Channel, "{0}: Unable to add list value: {1}", details.Sender.Nickname, ex.Message ); } } else if ( mode.Equals( "remove", StringComparison.OrdinalIgnoreCase ) ) { if ( details.Args.Length < 3 ) { IRC.Instance.Send( details.Channel, "{0}: Missing required value for config field", details.Sender.Nickname ); return; } try { RemoveListConfigValue( option, value ); IRC.Instance.Send( details.Channel, "{0}: Removed!", details.Sender.Nickname ); } catch ( InvalidOperationException ex ) { IRC.Instance.Send( details.Channel, "{0}: Unable to remove list value: {1}", details.Sender.Nickname, ex.Message ); } } else // clear { try { ClearListConfigValue( option ); IRC.Instance.Send( details.Channel, "{0}: Cleared!", details.Sender.Nickname ); } catch ( InvalidOperationException ex ) { IRC.Instance.Send( details.Channel, "{0}: Unable to clear config: {1}", details.Sender.Nickname, ex.Message ); } } } else { IRC.Instance.Send( details.Channel, "{0}: Invalid mode, should be one of: set, set, add, remove, clear", details.Sender.Nickname ); return; } if ( !Settings.Validate() ) { IRC.Instance.Send( details.Channel, "{0}: Settings did not validate. Error has been logged", details.Sender.Nickname ); return; } try { Settings.Save(); } catch ( Exception ex ) { IRC.Instance.Send( details.Channel, "{0}: Unable to save settings. Error has been logged.", details.Sender.Nickname ); Log.WriteError( "ConfigCommand", "Unable to save settings: {0}", ex.Message ); return; } }
protected override void OnRun(CommandDetails details) { if (details.Args.Length < 4) { IRC.Instance.Send(details.Channel, "{0}: Usage: !makesid <universe> <type> <instance> <id>", details.Sender.Nickname); return; } string univ = details.Args[0]; string type = details.Args[1]; string instance = details.Args[2]; string id = details.Args[3]; EUniverse eUniv; if (!Enum.TryParse(univ, true, out eUniv)) { IRC.Instance.Send(details.Channel, "{0}: Invalid universe, should be one of: {1}", details.Sender.Nickname, string.Join(", ", Enum.GetNames(typeof(EUniverse))) ); return; } EAccountType eType; if (!Enum.TryParse(type, true, out eType)) { IRC.Instance.Send(details.Channel, "{0}: Invalid account type, should be one of: {1}", details.Sender.Nickname, string.Join(", ", Enum.GetNames(typeof(EAccountType))) ); return; } uint uiInstance = 0; switch (instance.ToLower()) { case "desktop": uiInstance = SteamID.DesktopInstance; break; case "console": uiInstance = SteamID.ConsoleInstance; break; case "web": uiInstance = SteamID.WebInstance; break; case "all": uiInstance = SteamID.AllInstances; break; default: SteamID.ChatInstanceFlags instanceFlags; if (Enum.TryParse(instance, true, out instanceFlags)) { uiInstance = ( uint )instanceFlags; break; } if (!uint.TryParse(instance, out uiInstance)) { IRC.Instance.Send(details.Channel, "{0}: Invalid instance! (desktop, console, web, all, clan, lobby, mmslobby, #)", details.Sender.Nickname); return; } break; } uint accountId; if (!uint.TryParse(id, out accountId)) { SteamID steamId; if (!SteamUtils.TryDeduceSteamID(id, out steamId)) { IRC.Instance.Send(details.Channel, "{0}: Invalid (or undeducible) account id!", details.Sender.Nickname); return; } accountId = steamId.AccountID; } SteamID steamID = new SteamID(accountId, uiInstance, eUniv, eType); var sidCommand = IRC.Instance.CommandManager.RegisteredCommands .SingleOrDefault(c => c is SIDCommand); if (sidCommand != null) { // loading up on the dirty hacks details.Args = new string[] { steamID.ConvertToUInt64().ToString() }; sidCommand.DoRun(details); } else { IRC.Instance.Send(details.Channel, "{0}: An internal error has occurred", details.Sender.Nickname); Log.WriteError("MakeSIDCommand", "Unable to find SIDCommand!"); } }
protected override void OnRun( CommandDetails details ) { if ( details.Args.Length < 4 ) { IRC.Instance.Send( details.Channel, "{0}: Usage: !makesid <universe> <type> <instance> <id>", details.Sender.Nickname ); return; } string univ = details.Args[ 0 ]; string type = details.Args[ 1 ]; string instance = details.Args[ 2 ]; string id = details.Args[ 3 ]; EUniverse eUniv; if ( !Enum.TryParse( univ, true, out eUniv ) ) { IRC.Instance.Send( details.Channel, "{0}: Invalid universe, should be one of: {1}", details.Sender.Nickname, string.Join( ", ", Enum.GetNames( typeof( EUniverse ) ) ) ); return; } EAccountType eType; if ( !Enum.TryParse( type, true, out eType ) ) { IRC.Instance.Send( details.Channel, "{0}: Invalid account type, should be one of: {1}", details.Sender.Nickname, string.Join( ", ", Enum.GetNames( typeof( EAccountType ) ) ) ); return; } uint uiInstance = 0; switch ( instance.ToLower() ) { case "desktop": uiInstance = SteamID.DesktopInstance; break; case "console": uiInstance = SteamID.ConsoleInstance; break; case "web": uiInstance = SteamID.WebInstance; break; case "all": uiInstance = SteamID.AllInstances; break; default: SteamID.ChatInstanceFlags instanceFlags; if ( Enum.TryParse( instance, true, out instanceFlags ) ) { uiInstance = ( uint )instanceFlags; break; } if ( !uint.TryParse( instance, out uiInstance ) ) { IRC.Instance.Send( details.Channel, "{0}: Invalid instance! (desktop, console, web, all, clan, lobby, mmslobby, #)", details.Sender.Nickname ); return; } break; } uint accountId; if ( !uint.TryParse( id, out accountId ) ) { SteamID steamId; if ( !SteamUtils.TryDeduceSteamID( id, out steamId ) ) { IRC.Instance.Send( details.Channel, "{0}: Invalid (or undeducible) account id!", details.Sender.Nickname ); return; } accountId = steamId.AccountID; } SteamID steamID = new SteamID( accountId, uiInstance, eUniv, eType ); var sidCommand = IRC.Instance.CommandManager.RegisteredCommands .SingleOrDefault( c => c is SIDCommand ); if ( sidCommand != null ) { // loading up on the dirty hacks details.Args = new string[] { steamID.ConvertToUInt64().ToString() }; sidCommand.DoRun( details ); } else { IRC.Instance.Send( details.Channel, "{0}: An internal error has occurred", details.Sender.Nickname ); Log.WriteError( "MakeSIDCommand", "Unable to find SIDCommand!" ); } }