Exemple #1
0
        public bool IsCuckPresent(string channel)
        {
            Cuck cuck    = GetCuck(channel);
            bool present = cuck != null;

            _log.Debug($"IsCuckPresent({channel}) -> returned {present}");
            return(present);
        }
Exemple #2
0
        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
                });
            }
        }