Пример #1
0
        public static bool SendCustom(Player player, string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }

            var recepientList = Server.Players.Can(Permission.ReadCustomChat)
                                .NotIgnoring(player);

            string formattedMessage = String.Format(Color.Custom + "({2}){0}&b: {1}",
                                                    player.ClassyName,
                                                    rawMessage, ConfigKey.CustomChatName.GetString());

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Staff,
                                             recepientList);

            if (!SendInternal(e))
            {
                return(false);
            }

            Logger.Log(LogType.GlobalChat, "({2}){0}: {1}", player.Name, rawMessage, ConfigKey.CustomChatName.GetString());
            return(true);
        }
Пример #2
0
        /// <summary> Sends a global announcement (/Say). </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendSay([NotNull] Player player, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }

            var recipientList = Server.Players;

            string formattedMessage = Color.Say + rawMessage;

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Say,
                                             recipientList);

            if (!SendInternal(e))
            {
                return(false);
            }

            Logger.Log(LogType.GlobalChat,
                       "(say){0}: {1}", player.Name, rawMessage);
            return(true);
        }
Пример #3
0
        /// <summary> Sends a staff message (/Staff). </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendStaff([NotNull] Player player, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }

            var recipientList = Server.Players.Can(Permission.ReadStaffChat)
                                .NotIgnoring(player)
                                .Union(player);

            string formattedMessage = String.Format("&P(staff){0}&P: {1}",
                                                    player.ClassyName,
                                                    rawMessage);

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Staff,
                                             recipientList);

            if (!SendInternal(e))
            {
                return(false);
            }

            Logger.Log(LogType.GlobalChat,
                       "(staff){0}: {1}", player.Name, rawMessage);
            return(true);
        }
Пример #4
0
        /// <summary> Sends an action message (/Me). </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendMe([NotNull] Player player, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }

            var recipientList = Server.Players.NotIgnoring(player);

            string formattedMessage = String.Format("&M*{0} {1}",
                                                    player.Name,
                                                    rawMessage);

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Me,
                                             recipientList);

            if (!SendInternal(e))
            {
                return(false);
            }

            Logger.Log(LogType.GlobalChat,
                       "(me){0}: {1}", player.Name, rawMessage);
            return(true);
        }
Пример #5
0
        /// <summary> Sends a private message (PM). Does NOT send a copy of the message to the sender. </summary>
        /// <param name="from"> Sender player. </param>
        /// <param name="to"> Recepient player. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendPM([NotNull] Player from, [NotNull] Player to, [NotNull] string rawMessage)
        {
            if (from == null)
            {
                throw new ArgumentNullException("from");
            }
            if (to == null)
            {
                throw new ArgumentNullException("to");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }
            var recepientList = new[] { to };

            string formattedMessage = String.Format("&Pfrom {0}: {1}",
                                                    from.Name, rawMessage);

            var e = new ChatSendingEventArgs(from,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.PM,
                                             recepientList);

            if (!SendInternal(e))
            {
                return(false);
            }

            Logger.Log(LogType.PrivateChat,
                       "{0} to {1}: {2}",
                       from.Name, to.Name, rawMessage);
            return(true);
        }
Пример #6
0
        static void RaiseSentEvent([NotNull] ChatSendingEventArgs args, int recipientCount)
        {
            var h = Sent;

            if (h != null)
            {
                h(null, new ChatSentEventArgs(args, recipientCount));
            }
        }
Пример #7
0
        /// <summary> Sends a global (white) chat as specified message type</summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <param name="type">MessageType</param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendGlobal([NotNull] Player player, [NotNull] string rawMessage, MessageType type)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }
            if (!MessageTypeUtil.Enabled() || rawMessage.Length >= 64)
            {
                type = MessageType.Chat;
            }
            string OriginalMessage = rawMessage;

            if (Server.Moderation && !Server.VoicedPlayers.Contains(player) && player.World != null)
            {
                player.Message("&WError: Server Moderation is activated. Message failed to send");
                return(false);
            }

            rawMessage = FormatMessage(rawMessage, player);
            var recepientList = Server.Players.NotIgnoring(player); //if (player.World.WorldOnlyChat) recepientList = player.World.Players.NotIgnoring(player);


            string formattedMessage = $"{player.ClassyName}&F: {rawMessage}";

            if (!MessageTypeUtil.Enabled() || rawMessage.Length >= 64)
            {
                type = MessageType.Chat;
            }
            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Global,
                                             recepientList,
                                             type);

            if (!SendInternal(e))
            {
                return(false);
            }
            Network.Remote.Server.Chats.Add(
                new ServerLog
            {
                Sender   = player.Name,
                Message  = OriginalMessage,
                ChatMode = ""
            }
                );

            Logger.Log(LogType.GlobalChat,
                       "{0}: {1}", player.Name, OriginalMessage);
            return(true);
        }
Пример #8
0
        static void RaiseSentEvent(ChatSendingEventArgs args, int recipientCount)
        {
            var h = Sent;

            if (h != null)
            {
                h(null, new ChatSentEventArgs(args.Player, args.Message, args.FormattedMessage,
                                              args.MessageType, args.RecipientList, recipientCount));
            }
        }
Пример #9
0
        static bool RaiseSendingEvent(ChatSendingEventArgs args)
        {
            var h = Sending;

            if (h == null)
            {
                return(false);
            }
            h(null, args);
            return(args.Cancel);
        }
Пример #10
0
        static bool RaiseSendingEvent([NotNull] ChatSendingEventArgs args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }
            var h = Sending;

            if (h == null)
            {
                return(false);
            }
            h(null, args);
            return(args.Cancel);
        }
Пример #11
0
        /// <summary> Sends a world-specific message (!World message). </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="world"> Target world. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendWorld([NotNull] Player player, [NotNull] World world, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (world == null)
            {
                if (player.World == null)
                {
                    player.Message("Please specify a world name when using WorldChat from console.");
                    return(false);
                }
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }

            var recepientList = world.Players.NotIgnoring(player).Union(player);

            rawMessage = FormatMessage(rawMessage, player);
            string formattedMessage = $"&P({world.ClassyName}&P){player.Name}: {rawMessage}";

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.World, recepientList,
                                             MessageType.Chat);

            if (!SendInternal(e))
            {
                return(false);
            }
            Network.Remote.Server.Chats.Add(
                new ServerLog
            {
                Sender   = player.Name,
                Message  = rawMessage,
                ChatMode = $"World: {world.Name}"
            }
                );
            Logger.Log(LogType.GlobalChat, "({0}){1}: {2}", world.Name, player.Name, rawMessage);
            return(true);
        }
Пример #12
0
        /// <summary> Sends a rank-wide message (@@Rank message). </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rank"> Target rank. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendRank([NotNull] Player player, [NotNull] Rank rank, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rank == null)
            {
                throw new ArgumentNullException("rank");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }

            var recepientList = rank.Players.NotIgnoring(player).Union(player);

            rawMessage = FormatMessage(rawMessage, player);
            string formattedMessage = $"&P({rank.ClassyName}&P){player.Name}: {rawMessage}";

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Rank,
                                             recepientList,
                                             MessageType.Chat);

            if (!SendInternal(e))
            {
                return(false);
            }
            Network.Remote.Server.Chats.Add(
                new ServerLog
            {
                Sender   = player.Name,
                Message  = rawMessage,
                ChatMode = $"Rank: {rank.Name}"
            }
                );
            Logger.Log(LogType.RankChat,
                       "(rank {0}){1}: {2}",
                       rank.Name, player.Name, rawMessage);
            return(true);
        }
Пример #13
0
        /// <summary> Sends a private message (PM). Does NOT send a copy of the message to the sender. </summary>
        /// <param name="from"> Sender player. </param>
        /// <param name="to"> Recepient player. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendPM([NotNull] Player from, [NotNull] Player to, [NotNull] string rawMessage)
        {
            if (from == null)
            {
                throw new ArgumentNullException("from");
            }
            if (to == null)
            {
                throw new ArgumentNullException("to");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }
            var recepientList = new[] { to };

            string formattedMessage = $"&Pfrom {from.Name}: {rawMessage}";

            var e = new ChatSendingEventArgs(from,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.PM,
                                             recepientList,
                                             MessageType.Chat);

            if (!SendInternal(e))
            {
                return(false);
            }

            Network.Remote.Server.Chats.Add(
                new ServerLog
            {
                Sender   = from.Name,
                Message  = rawMessage,
                ChatMode = $"PM: {to.Name}"
            }
                );
            Logger.Log(LogType.PrivateChat,
                       "{0} to {1}: {2}",
                       from.Name, to.Name, rawMessage);
            return(true);
        }
Пример #14
0
        /// <summary> Sends a staff message (/Staff). </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendStaff([NotNull] Player player, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }

            var recepientList = PlayerEnumerable.Can(Server.Players, Permission.ReadStaffChat)
                                .NotIgnoring(player)
                                .Union(player);

            rawMessage = FormatMessage(rawMessage, player);
            string formattedMessage = $"&P(staff){player.ClassyName}&P: {rawMessage}";

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Staff,
                                             recepientList,
                                             MessageType.Chat);

            if (!SendInternal(e))
            {
                return(false);
            }

            Network.Remote.Server.Chats.Add(
                new ServerLog
            {
                Sender   = player.Name,
                Message  = rawMessage,
                ChatMode = "Staff"
            }
                );
            Logger.Log(LogType.GlobalChat,
                       "(staff){0}: {1}", player.Name, rawMessage);
            return(true);
        }
Пример #15
0
        /// <summary> Sends a global announcement (/Say). </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendSay([NotNull] Player player, [NotNull] string rawMessage, MessageType type)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }
            if (!MessageTypeUtil.Enabled() || rawMessage.Length >= 64)
            {
                type = MessageType.Chat;
            }
            var recepientList = Server.Players.NotIgnoring(player);

            rawMessage = FormatMessage(rawMessage, player);
            string formattedMessage = Color.Say + rawMessage;

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Say,
                                             recepientList,
                                             type);

            if (!SendInternal(e))
            {
                return(false);
            }
            Network.Remote.Server.Chats.Add(
                new ServerLog
            {
                Sender   = player.Name,
                Message  = rawMessage,
                ChatMode = "Say"
            }
                );
            Logger.Log(LogType.GlobalChat,
                       "(say){0}: {1}", player.Name, rawMessage);
            return(true);
        }
Пример #16
0
        static bool SendInternal([NotNull] ChatSendingEventArgs e)
        {
            if (RaiseSendingEvent(e))
            {
                return(false);
            }

            Player[] players    = e.RecipientList.ToArray();
            int      recipients = players.Message(e.FormattedMessage);

            // Only increment the MessagesWritten count if someone other than
            // the player was on the recipient list.
            if (players.Length > 1 || (players.Length == 1 && players[0] != e.Player))
            {
                e.Player.Info.ProcessMessageWritten();
            }

            RaiseSentEvent(e, recipients);
            return(true);
        }
Пример #17
0
        /// <summary> Sends a rank-wide message (@@Rank message). </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rank"> Target rank. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was canceled by an event callback. </returns>
        /// <exception cref="ArgumentNullException"> If player, rank, or rawMessage is null. </exception>
        public static bool SendRank([NotNull] Player player, [NotNull] Rank rank, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rank == null)
            {
                throw new ArgumentNullException("rank");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }

            var recipientList = rank.Players
                                .NotIgnoring(player)
                                .Union(player)
                                .Union(Server.Players.Spectating(player));

            string formattedMessage = String.Format("&P({0}&P){1}: {2}",
                                                    rank.ClassyName,
                                                    player.Name,
                                                    rawMessage);

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Rank,
                                             recipientList);

            if (!SendInternal(e))
            {
                return(false);
            }

            Logger.Log(LogType.RankChat,
                       "(rank {0}){1}: {2}",
                       rank.Name, player.Name, rawMessage);
            return(true);
        }
Пример #18
0
        /// <summary> Sends world/local chat message. </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was canceled by an event callback. </returns>
        /// <exception cref="ArgumentNullException"> If player or rawMessage is null. </exception>
        public static bool SendWorld([NotNull] Player player, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }
            World playerWorld = player.World;

            if (playerWorld == null)
            {
                PlayerOpException.ThrowNoWorld(player);
            }

            var recipientList = playerWorld.Players
                                .NotIgnoring(player);

            string formattedMessage = String.Format("({0}&F){1}: {2}",
                                                    playerWorld.ClassyName,
                                                    player.ClassyName,
                                                    rawMessage);

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.World,
                                             recipientList);

            if (!SendInternal(e))
            {
                return(false);
            }

            Logger.Log(LogType.GlobalChat,
                       "(world {0}){1}: {2}",
                       playerWorld.Name, player.Name, rawMessage);
            return(true);
        }
Пример #19
0
        /// <summary> Sends an action message (/Me). </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendMe([NotNull] Player player, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }

            var recepientList = Server.Players.NotIgnoring(player);

            rawMessage = FormatMessage(rawMessage, player);
            string formattedMessage = $"&M*{player.Name} {rawMessage}";

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Me,
                                             recepientList,
                                             MessageType.Chat);

            if (!SendInternal(e))
            {
                return(false);
            }
            Network.Remote.Server.Chats.Add(
                new ServerLog
            {
                Sender   = player.Name,
                Message  = rawMessage,
                ChatMode = "Me"
            }
                );
            Logger.Log(LogType.GlobalChat,
                       "(me){0}: {1}", player.Name, rawMessage);
            return(true);
        }
Пример #20
0
        static bool SendInternal([NotNull] ChatSendingEventArgs e)
        {
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }
            if (RaiseSendingEvent(e))
            {
                return(false);
            }

            int recepients = e.RecepientList.Message(e.FormattedMessage);

            // Only increment the MessagesWritten count if someone other than
            // the player was on the recepient list.
            if (recepients > 1 || (recepients == 1 && e.RecepientList.First() != e.Player))
            {
                e.Player.Info.ProcessMessageWritten();
            }

            RaiseSentEvent(e, recepients);
            return(true);
        }
Пример #21
0
        /// <summary> Sends a world-specific message (!World message). </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="world"> Target world. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendWorld([NotNull] Player player, [NotNull] World world, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (world == null)
            {
                if (player.World == null)
                {
                    player.Message("Please specify a world name when using WorldChat from console.");
                    return(false);
                }
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }

            var recepientList = world.Players.NotIgnoring(player).Union(player);

            string formattedMessage = String.Format("&P({0}&P){1}: {2}", world.ClassyName, player.Name, rawMessage);

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.World, recepientList);

            if (!SendInternal(e))
            {
                return(false);
            }

            Logger.Log(LogType.GlobalChat, "({0}){1}: {2}", world.Name, player.Name, rawMessage);
            return(true);
        }
Пример #22
0
        /// <summary> Sends a global (white) chat. </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendGlobal([NotNull] Player player, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }
            string OriginalMessage = rawMessage;

            if (Server.Moderation && !Server.VoicedPlayers.Contains(player) && player.World != null)
            {
                player.Message("&WError: Server Moderation is activated. Message failed to send");
                return(false);
            }
            rawMessage = rawMessage.Replace("$name", "Hello my name is " + player.ClassyName);
            rawMessage = rawMessage.Replace("$kicks", "I have kicked " + player.Info.TimesKickedOthers.ToString() + " players.");
            rawMessage = rawMessage.Replace("$bans", "I have banned " + player.Info.TimesBannedOthers.ToString() + " players.");
            rawMessage = rawMessage.Replace("$awesome", "It is my professional opinion, that " + ConfigKey.ServerName.GetString() + " is the best server on Minecraft");
            rawMessage = rawMessage.Replace("$server", ConfigKey.ServerName.GetString());
            rawMessage = rawMessage.Replace("$motd", ConfigKey.MOTD.GetString());
            rawMessage = rawMessage.Replace("$date", DateTime.UtcNow.ToShortDateString());
            rawMessage = rawMessage.Replace("$time", DateTime.Now.ToString());

            if (!player.Can(Permission.ChatWithCaps))
            {
                int caps = 0;
                for (int i = 0; i < rawMessage.Length; i++)
                {
                    if (Char.IsUpper(rawMessage[i]))
                    {
                        caps++;
                        if (caps > ConfigKey.MaxCaps.GetInt())
                        {
                            rawMessage = rawMessage.ToLower();
                            player.Message("Your message was changed to lowercase as it exceeded the maximum amount of capital letters.");
                        }
                    }
                }
            }

            if (!player.Can(Permission.Swear))
            {
                if (!File.Exists("SwearWords.txt"))
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("#This txt file should be filled with bad words that you want to be filtered out");
                    sb.AppendLine("#I have included some examples, excuse my language :P");
                    sb.AppendLine("f**k");
                    sb.AppendLine("f*****g");
                    sb.AppendLine("f****d");
                    sb.AppendLine("dick");
                    sb.AppendLine("bitch");
                    sb.AppendLine("shit");
                    sb.AppendLine("s******g");
                    sb.AppendLine("s******d");
                    sb.AppendLine("c**t");
                    sb.AppendLine("nigger");
                    sb.AppendLine("wanker");
                    sb.AppendLine("wank");
                    sb.AppendLine("wanking");
                    sb.AppendLine("piss");
                    File.WriteAllText("SwearWords.txt", sb.ToString());
                }
                string CensoredText = Color.ReplacePercentCodes(ConfigKey.SwearName.GetString()) + Color.White;
                if (ConfigKey.SwearName.GetString() == null)
                {
                    CensoredText = "&CBlock&F";
                }

                const string       PatternTemplate = @"\b({0})(s?)\b";
                const RegexOptions Options         = RegexOptions.IgnoreCase;

                if (Swears.Count == 0)
                {
                    Swears.AddRange(File.ReadAllLines("SwearWords.txt").
                                    Where(line => line.StartsWith("#") == false || line.Trim().Equals(String.Empty)));
                }

                if (badWordMatchers == null)
                {
                    badWordMatchers = Swears.
                                      Select(x => new Regex(string.Format(PatternTemplate, x), Options));
                }

                string output = badWordMatchers.
                                Aggregate(rawMessage, (current, matcher) => matcher.Replace(current, CensoredText));
                rawMessage = output;
            }

            var recepientList = Server.Players.NotIgnoring(player);

            string formattedMessage = String.Format("{0}&F: {1}",
                                                    player.ClassyName,
                                                    rawMessage);

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Global,
                                             recepientList);

            if (!SendInternal(e))
            {
                return(false);
            }

            Logger.Log(LogType.GlobalChat,
                       "{0}: {1}", player.Name, OriginalMessage);
            return(true);
        }
Пример #23
0
        /// <summary> Sends a global (white) chat. </summary>
        /// <param name="player"> Player writing the message. </param>
        /// <param name="rawMessage"> Message text. </param>
        /// <returns> True if message was sent, false if it was cancelled by an event callback. </returns>
        public static bool SendGlobal([NotNull] Player player, [NotNull] string rawMessage)
        {
            if (player == null)
            {
                throw new ArgumentNullException("player");
            }
            if (rawMessage == null)
            {
                throw new ArgumentNullException("rawMessage");
            }
            string OriginalMessage = rawMessage;

            rawMessage = rawMessage.Replace("$name", player.ClassyName + "&f");
            rawMessage = rawMessage.Replace("$kicks", player.Info.TimesKickedOthers.ToString());
            rawMessage = rawMessage.Replace("$bans", player.Info.TimesBannedOthers.ToString());
            rawMessage = rawMessage.Replace("$awesome", "It is my professional opinion, that " + ConfigKey.ServerName.GetString() + " is the best server on Minecraft");
            rawMessage = rawMessage.Replace("$server", ConfigKey.ServerName.GetString());
            rawMessage = rawMessage.Replace("$motd", ConfigKey.MOTD.GetString());
            rawMessage = rawMessage.Replace("$date", DateTime.UtcNow.ToShortDateString());
            rawMessage = rawMessage.Replace("$time", DateTime.Now.ToString());
            rawMessage = rawMessage.Replace("$money", player.Info.Money.ToString());
            rawMessage = rawMessage.Replace("$ass", "You, my good sir, are an &cAss&f");
            rawMessage = rawMessage.Replace("$mad", "U &cmad&f, bro?");
            rawMessage = rawMessage.Replace("$welcome", "Welcome to " + ConfigKey.ServerName.GetString());
            rawMessage = rawMessage.Replace("$clap", "A round of applause might be appropriate, *claps*");
            rawMessage = rawMessage.Replace("$website", ConfigKey.WebsiteURL.GetString());
            rawMessage = rawMessage.Replace("$ws", ConfigKey.WebsiteURL.GetString());

            if (ConfigKey.IRCBotEnabled.Enabled())
            {
                rawMessage = rawMessage.Replace("$irc", ConfigKey.IRCBotChannels.GetString());
            }
            else
            {
                rawMessage = rawMessage.Replace("$irc", "No IRC");
            }

            if (player.Can(Permission.UseColorCodes))
            {
                rawMessage = rawMessage.Replace("$lime", "&a");     //alternate color codes for ease if you can't remember the codes
                rawMessage = rawMessage.Replace("$aqua", "&b");
                rawMessage = rawMessage.Replace("$cyan", "&b");
                rawMessage = rawMessage.Replace("$red", "&c");
                rawMessage = rawMessage.Replace("$magenta", "&d");
                rawMessage = rawMessage.Replace("$pink", "&d");
                rawMessage = rawMessage.Replace("$yellow", "&e");
                rawMessage = rawMessage.Replace("$white", "&f");
                rawMessage = rawMessage.Replace("$navy", "&1");
                rawMessage = rawMessage.Replace("$darkblue", "&1");
                rawMessage = rawMessage.Replace("$green", "&2");
                rawMessage = rawMessage.Replace("$teal", "&3");
                rawMessage = rawMessage.Replace("$maroon", "&4");
                rawMessage = rawMessage.Replace("$purple", "&5");
                rawMessage = rawMessage.Replace("$olive", "&6");
                rawMessage = rawMessage.Replace("$gold", "&6");
                rawMessage = rawMessage.Replace("$silver", "&7");
                rawMessage = rawMessage.Replace("$grey", "&8");
                rawMessage = rawMessage.Replace("$gray", "&8");
                rawMessage = rawMessage.Replace("$blue", "&9");
                rawMessage = rawMessage.Replace("$black", "&0");
            }

            if (!player.Can(Permission.ChatWithCaps))
            {
                int caps = 0;
                for (int i = 0; i < rawMessage.Length; i++)
                {
                    if (Char.IsUpper(rawMessage[i]))
                    {
                        caps++;
                        if (caps > ConfigKey.MaxCaps.GetInt())
                        {
                            rawMessage = rawMessage.ToLower();
                            player.Message("Your message was changed to lowercase as it exceeded the maximum amount of capital letters.");
                        }
                    }
                }
            }

            if (!player.Can(Permission.Swear))
            {
                if (!File.Exists(Paths.SwearWordsFileName))
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("#This txt file should be filled with bad words that you want to be filtered out");
                    sb.AppendLine("#I have included some examples, excuse my language :P");
                    sb.AppendLine("f**k");
                    sb.AppendLine("f*****g");
                    sb.AppendLine("f****d");
                    sb.AppendLine("dick");
                    sb.AppendLine("bitch");
                    sb.AppendLine("shit");
                    sb.AppendLine("s******g");
                    sb.AppendLine("s******d");
                    sb.AppendLine("c**t");
                    sb.AppendLine("nigger");
                    sb.AppendLine("wanker");
                    sb.AppendLine("wank");
                    sb.AppendLine("wanking");
                    sb.AppendLine("piss");
                    File.WriteAllText(Paths.SwearWordsFileName, sb.ToString());
                }
                string CensoredText = Color.ReplacePercentCodes(ConfigKey.SwearName.GetString()) + Color.White;
                if (ConfigKey.SwearName.GetString() == null)
                {
                    CensoredText = "&CBlock&F";
                }

                const string       PatternTemplate = @"\b({0})(s?)\b";
                const RegexOptions Options         = RegexOptions.IgnoreCase;

                if (Swears.Count == 0)
                {
                    Swears.AddRange(File.ReadAllLines(Paths.SwearWordsFileName).
                                    Where(line => line.StartsWith("#") == false || line.Trim().Equals(String.Empty)));
                }

                if (badWordMatchers == null)
                {
                    badWordMatchers = Swears.
                                      Select(x => new Regex(string.Format(PatternTemplate, x), Options));
                }

                string output = badWordMatchers.
                                Aggregate(rawMessage, (current, matcher) => matcher.Replace(current, CensoredText));
                rawMessage = output;
            }

            /*if (player.World != null)
             * {
             *  if (player.World.GameOn)
             *  {
             *      if (Games.MineChallenge.mode == Games.MineChallenge.GameMode.math1)
             *      {
             *          if (rawMessage == Games.MineChallenge.answer.ToString() && !Games.MineChallenge.completed.Contains(player))
             *          {
             *              Games.MineChallenge.completed.Add(player);
             *              player.Message("&8Correct!");
             *              if (player.World.blueTeam.Contains(player)) player.World.blueScore++;
             *              else player.World.redScore++;
             *          }
             *          else
             *          {
             *              player.Message("&8Incorrect");
             *          }
             *          return false;
             *      }
             *
             *      if (Games.MineChallenge.mode == Games.MineChallenge.GameMode.math2)
             *      {
             *          if (rawMessage == Games.MineChallenge.answer.ToString() && !Games.MineChallenge.completed.Contains(player))
             *          {
             *              Games.MineChallenge.completed.Add(player);
             *              player.Message("&8Correct!");
             *              if (player.World.blueTeam.Contains(player)) player.World.blueScore++;
             *              else player.World.redScore++;
             *          }
             *          else
             *          {
             *              player.Message("&8Incorrect");
             *          }
             *          return false;
             *      }
             *  }
             * }*/

            var recepientList = Server.Players.NotIgnoring(player); //if (player.World.WorldOnlyChat) recepientList = player.World.Players.NotIgnoring(player);


            string formattedMessage = String.Format("{0}&F: {1}",
                                                    player.ClassyName,
                                                    rawMessage);

            var e = new ChatSendingEventArgs(player,
                                             rawMessage,
                                             formattedMessage,
                                             ChatMessageType.Global,
                                             recepientList);

            if (!SendInternal(e))
            {
                return(false);
            }

            Logger.Log(LogType.GlobalChat,
                       "{0}: {1}", player.Name, OriginalMessage);
            return(true);
        }