public virtual bool CanMessage(PlayerMobile user, string text, bool message = true) { if (!Available) { if (message) { InternalMessage(user, "The channel '{0}' is currently unavailable.", Name); } return false; } if (!IsUser(user) && user.AccessLevel < AccessLevel.Counselor) { if (message) { InternalMessage(user, "You are not in the channel '{0}'", Name); } return false; } if (user.AccessLevel < Access) { if (message) { InternalMessage(user, "You do not have sufficient access to speak in the channel '{0}'", Name); } return false; } if (IsUser(user) && user.AccessLevel < AccessLevel.Counselor && Users[user] > DateTime.Now) { if (message) { InternalMessage(user, "Spam detected, message blocked."); } return false; } if ( !NameVerification.Validate( text, 0, Int32.MaxValue, true, true, false, Int32.MaxValue, ProfanityProtection.Exceptions, ProfanityProtection.Disallowed, ProfanityProtection.StartDisallowed)) { switch (ProfanityAction) { case ProfanityAction.None: return true; case ProfanityAction.Criminal: user.Criminal = true; return true; case ProfanityAction.CriminalAction: user.CriminalAction(true); return true; case ProfanityAction.Disallow: return false; case ProfanityAction.Disconnect: Kick(user, false, message); return false; case ProfanityAction.Other: return OnProfanityDetected(user, text, message); } } return true; }