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(); }