コード例 #1
0
        /// <summary>
        /// Channel modes
        /// </summary>
        /// <param name="message"></param>
        public static void Parse324(BotMessage message)
        {
            int channelID = GetChannelID(message.MessageList[3]);

            ParseChannelModeString(message.MessageList[4], channelID);

            MBEvents.OnChannelListModified();
        }
コード例 #2
0
        /// <summary>
        /// Channel topic
        /// </summary>
        /// <param name="message"></param>
        public static void Parse332(BotMessage message)
        {
            int channelID = GetChannelID(message.MessageList[3]);

            lock (channelSync)
                Channels[channelID].Topic = message.RawMessage.Substring(message.RawMessage.IndexOf(':', 1) + 1);

            MBEvents.OnChannelListModified();
        }
コード例 #3
0
        public static void ParseTOPIC(BotMessage message)
        {
            int channelID = GetChannelID(message.ReplyTo);

            lock (channelSync)
                Channels[channelID].Topic = message.MessageString;

            MBEvents.OnChannelListModified();
        }
コード例 #4
0
        public static void ParsePART(BotMessage message, bool parterIsMe)
        {
            int channelID, userID = GetUserID(message.User.Name, message.MessageList[2].TrimStart(':'), out channelID);

            lock (channelSync)
                Channels[channelID].Users.RemoveAt(userID);

            MBEvents.OnUserListModified();
            if (parterIsMe)
            {
                lock (channelSync)
                    Channels.RemoveAt(channelID);

                MBEvents.OnChannelListModified();
            }
        }
コード例 #5
0
        public static int GetChannelID(string channelName)
        {
            channelName = channelName.ToLowerInvariant();

            int channelID;

            lock (channelSync)
            {
                channelID = Channels.FindIndex(c => c.Name == channelName);

                if (channelID == -1)
                {
                    Channel channel = new Channel();
                    channel.Name = channelName;
                    Channels.Add(channel);
                    channelID = Channels.IndexOf(channel);

                    MBEvents.OnChannelListModified();
                }
            }

            return(channelID);
        }
コード例 #6
0
        public static void ParseMODE(BotMessage message)
        {
            string modeString = message.MessageList[3];

            if (message.MessageList.Count > 4) // User mode change
            {
                int channelID, userID = GetUserID(message.MessageList[4], message.MessageList[2], out channelID);

                bool addModes = modeString.StartsWith("+");
                modeString = modeString.TrimStart('+', '-');

                if (modeString.Contains("b"))
                {
                    return;                           // Ban message, ignore
                }
                if (addModes)
                {
                    lock (channelSync)
                    {
                        foreach (char mode in modeString)
                        {
                            if (!Channels[channelID].Users[userID].Modes.Contains(mode))
                            {
                                Channels[channelID].Users[userID].Modes.Add(mode);
                            }

                            if (mode == 'q')
                            {
                                Channels[channelID].Users[userID].Symbols += "~";
                            }
                            if (mode == 'o')
                            {
                                Channels[channelID].Users[userID].Symbols += "@";
                            }
                            if (mode == 'h')
                            {
                                Channels[channelID].Users[userID].Symbols += "%";
                            }
                            if (mode == 'v')
                            {
                                Channels[channelID].Users[userID].Symbols += "+";
                            }
                        }
                    }
                }
                else
                {
                    lock (channelSync)
                    {
                        foreach (char mode in modeString)
                        {
                            if (Channels[channelID].Users[userID].Modes.Contains(mode))
                            {
                                Channels[channelID].Users[userID].Modes.Remove(mode);
                            }

                            if (mode == 'q')
                            {
                                Channels[channelID].Users[userID].Symbols.Replace("~", "");
                            }
                            if (mode == 'o')
                            {
                                Channels[channelID].Users[userID].Symbols.Replace("@", "");
                            }
                            if (mode == 'h')
                            {
                                Channels[channelID].Users[userID].Symbols.Replace("%", "");
                            }
                            if (mode == 'v')
                            {
                                Channels[channelID].Users[userID].Symbols.Replace("+", "");
                            }
                        }
                    }
                }
                MBEvents.OnUserListModified();
            }
            else // Channel mode change
            {
                if (message.MessageList[2].ToLowerInvariant() == message.User.Name.ToLowerInvariant())
                {
                    return;
                }

                int channelID = GetChannelID(message.MessageList[2]);

                ParseChannelModeString(modeString, channelID);

                MBEvents.OnChannelListModified();
            }
        }