public bool IsCuckPresent(string channel) { Cuck cuck = GetCuck(channel); bool present = cuck != null; _log.Debug($"IsCuckPresent({channel}) -> returned {present}"); return(present); }
public void ProcessMessage(object sender, IrcEventArgs eventArgs) { if (eventArgs.Data.Message == null) { return; } string nick = eventArgs.Data.From.Split('!')[0]; string channel = eventArgs.Data.Channel; if (eventArgs.Data.Message[0] == CommandPrefix && !_config.IgnoreList.Contains(nick)) { string message = eventArgs.Data.Message.TrimStart(CommandPrefix); if (message.ToLower().StartsWith("cucks")) // Not ToLowering before this because case does matter for looking up user stats { List <string> args = message.Split(' ').ToList(); if (args.Count > 1) { string requestedNick = args[1]; CuckHuntConfigModel.CuckConfig.CuckStat stat = GetCuckStat(requestedNick, channel); if (stat == null) { _client.SendMessage(SendType.Message, channel, $"Requested nick '{requestedNick}' has no stats."); } else { _client.SendMessage(SendType.Message, channel, $"{stat.GetEmOutCount} cucks removed, {stat.KilledCount} cucks deported and {stat.HelicopterCount} taken for a helicopter ride by {stat.Nick}"); } } else { string getOutMessage = "Cucks Removed:"; List <CuckHuntConfigModel.CuckConfig.CuckStat> channelStats = (from stat in _config.Stats where stat.Channel == channel select stat).ToList(); channelStats.Sort((x, y) => y.GetEmOutCount.CompareTo(x.GetEmOutCount)); int i = 0; foreach (CuckHuntConfigModel.CuckConfig.CuckStat stat in channelStats) { if (i == 10) { break; } getOutMessage += $" {stat.Nick.Insert(stat.Nick.Length / 2, "\u2063").Insert(1, "\u2063")}: {stat.GetEmOutCount};"; i++; } i = 0; string deportedMessage = "Cucks Deported:"; channelStats.Sort((x, y) => y.KilledCount.CompareTo(x.KilledCount)); foreach (CuckHuntConfigModel.CuckConfig.CuckStat stat in channelStats) { if (i == 10) { break; } deportedMessage += $" {stat.Nick.Insert(stat.Nick.Length / 2, "\u2063").Insert(1, "\u2063")}: {stat.KilledCount};"; i++; } i = 0; string helicopterMessage = "Cucks Helicopter'd:"; channelStats.Sort((x, y) => y.HelicopterCount.CompareTo(x.HelicopterCount)); foreach (CuckHuntConfigModel.CuckConfig.CuckStat stat in channelStats) { if (i == 10) { break; } helicopterMessage += $" {stat.Nick.Insert(stat.Nick.Length / 2, "\u2063").Insert(1, "\u2063")}: {stat.HelicopterCount};"; i++; } _client.SendMessage(SendType.Message, channel, getOutMessage); _client.SendMessage(SendType.Message, channel, deportedMessage); _client.SendMessage(SendType.Message, channel, helicopterMessage); } } message = message.ToLower(); // Case doesn't matter at this point if (message.StartsWith("deport") || message.StartsWith("getout") || message.StartsWith("helicopter")) { bool kill = message.StartsWith("deport"); bool helicopter = message.StartsWith("helicopter"); Cuck currentCuck = GetCuck(channel); if (currentCuck == null && !_config.CuckPresentExempt.Contains(nick)) { if (_lastDeportedCuck == null) { _client.SendMessage(SendType.Message, channel, "What? There are no cucks around!"); } else { _client.SendMessage(SendType.Message, channel, $"What? There are no cucks around! A cuck was last removed {(DateTimeOffset.UtcNow - _lastDeportedCuck).Value.TotalSeconds} seconds ago"); } return; } TimeSpan timeElapsed; if (currentCuck != null) { timeElapsed = DateTime.Now - currentCuck.Appeared; RemoveCuck(channel); } else if (_config.CuckPresentExempt.Contains(nick)) { timeElapsed = new TimeSpan(1); } else { _backtraceClient.Attributes.Add("Nick", nick); _backtraceClient.Send("currentCuck was null, user was not cuck exempt yet somehow we got this far."); throw new Exception("currentCuck was null, user was not cuck exempt yet somehow we got this far."); } ReloadConfig(); CuckHuntConfigModel.CuckConfig.CuckStat cuckStat = GetCuckStat(nick, channel) ?? new CuckHuntConfigModel.CuckConfig.CuckStat { Channel = channel, GetEmOutCount = 0, KilledCount = 0, Nick = nick, HelicopterCount = 0 }; if (kill) { SetScore(nick, channel, null, cuckStat.KilledCount + 1, createIfNotExists: true); cuckStat = GetCuckStat(nick, channel); if (_config.AssumeMaleGender) { _client.SendMessage(SendType.Message, channel, $"{nick} deported the cuck in {(int)timeElapsed.TotalSeconds}.{timeElapsed.Milliseconds} seconds! He has deported {cuckStat.KilledCount} cucks within {cuckStat.Channel}"); } else { _client.SendMessage(SendType.Message, channel, $"{nick} deported the cuck in {(int)timeElapsed.TotalSeconds}.{timeElapsed.Milliseconds} seconds! They have deported {cuckStat.KilledCount} cucks within {cuckStat.Channel}"); } } else if (helicopter) { SetScore(nick, channel, null, helicopters: cuckStat.HelicopterCount + 1, createIfNotExists: true); cuckStat = GetCuckStat(nick, channel); if (_config.AssumeMaleGender) { _client.SendMessage(SendType.Message, channel, $"{nick} took the cuck for a helicopter ride in {(int)timeElapsed.TotalSeconds}.{timeElapsed.Milliseconds} seconds! He has helicopter'd {cuckStat.HelicopterCount} cucks within {cuckStat.Channel}"); } else { _client.SendMessage(SendType.Message, channel, $"{nick} took the cuck for a helicopter ride in {(int)timeElapsed.TotalSeconds}.{timeElapsed.Milliseconds} seconds! They have helicopter'd {cuckStat.HelicopterCount} cucks within {cuckStat.Channel}"); } } else { SetScore(nick, channel, cuckStat.GetEmOutCount + 1, createIfNotExists: true); cuckStat = GetCuckStat(nick, channel); if (_config.AssumeMaleGender) { _client.SendMessage(SendType.Message, channel, $"{nick} got rid of the cuck in {(int)timeElapsed.TotalSeconds}.{timeElapsed.Milliseconds} seconds! He has gotten rid of {cuckStat.GetEmOutCount} cucks within {cuckStat.Channel}"); } else { _client.SendMessage(SendType.Message, channel, $"{nick} got rid of the cuck in {(int)timeElapsed.TotalSeconds}.{timeElapsed.Milliseconds} seconds! They have gotten rid of {cuckStat.GetEmOutCount} cucks within {cuckStat.Channel}"); } } if (_config.PunishAdmins) { if (LastAdminWhoSpawnedCuck == nick) { _client.SendMessage(SendType.Message, channel, $"{nick} is cheating scum, 10 points will be removed from his scores."); SetScore(nick, channel, cuckStat.GetEmOutCount - 10, cuckStat.KilledCount - 10, cuckStat.HelicopterCount - 10); } LastAdminWhoSpawnedCuck = string.Empty; } _log.Info($"{nick} removed a cuck in {timeElapsed.TotalMilliseconds} ms ({(int)timeElapsed.TotalSeconds}s) kill={kill}, helicopter={helicopter}. cuckStat.KilledCount={cuckStat.KilledCount}, cuckStat.HelicopterCount={cuckStat.HelicopterCount}, cuckStat.GetEmOutCount={cuckStat.GetEmOutCount}"); if (currentCuck != null) { if (!currentCuck.ManuallyCreated) { CreateThread(channel); } } // Early return is necessary so cuckhunt commands don't count as "channel activity" // tfw I f****d it up and the activity feature never worked return; } } if (LastActivity.ContainsKey(channel)) { LastActivity[channel].LastMessage = DateTime.Now; } else { LastActivity.Add(channel, new ActivityTime { LastCuckSpawn = DateTime.MinValue, LastMessage = DateTime.Now }); } }