Example #1
0
        public void SendWelcome(IUser networkUser, string channel, IIrcClient client)
        {
            var welcomeOverride = this.GetOverride(channel);
            var applyOverride   = false;

            if (welcomeOverride != null)
            {
                applyOverride = this.DoesOverrideApply(networkUser, welcomeOverride);
            }


            if (applyOverride)
            {
                this.logger.WarnFormat("Detected applicable override, firing alternate welcome");

                if (welcomeOverride.Message != null)
                {
                    var welcomeMessage = this.responder.Respond(
                        welcomeOverride.Message,
                        channel,
                        new[] { networkUser.Nickname, channel });

                    foreach (var message in welcomeMessage)
                    {
                        client.SendMessage(channel, message.CompileMessage());
                    }
                }
            }
            else
            {
                // Either no override defined, or override not matching.
                this.logger.InfoFormat("Welcoming {0} into {1}...", networkUser, channel);

                if (welcomeOverride != null && welcomeOverride.ExemptNonMatching && client.Channels[channel].Users[client.Nickname].Operator)
                {
                    var modeTarget = $"*!*@{networkUser.Hostname}";

                    lock (this.appliedExemptions)
                    {
                        if (!this.appliedExemptions.ContainsKey(channel))
                        {
                            this.appliedExemptions.Add(channel, new List <ExemptListEntry>());
                        }

                        this.appliedExemptions[channel]
                        .Add(new ExemptListEntry {
                            User = networkUser, Exemption = modeTarget
                        });
                    }

                    client.Mode(channel, "+e " + modeTarget);

                    var notificationTarget = this.GetCrossChannelNotificationTarget(channel);
                    if (notificationTarget != null)
                    {
                        client.SendMessage(
                            notificationTarget,
                            $"Auto-exempting {networkUser.Nickname}. Please alert ops if there are issues. (Ops:  /mode {channel} -e {modeTarget}  )");
                    }
                }

                var welcomeMessage = this.responder.Respond(
                    "channelservices.welcomer.welcome",
                    channel,
                    new object[] { networkUser.Nickname, channel });

                foreach (var message in welcomeMessage)
                {
                    client.SendMessage(channel, message.CompileMessage());
                }
            }

            WelcomerActivations.WithLabels(channel).Inc();
        }