Ejemplo n.º 1
0
        public void OnUserKicked(string userName)
        {
            int index = users.FindIndex(u => u.IRCUser.Name == userName);

            if (index == -1)
            {
                return;
            }

            ChannelUser user = users[index];

            if (user.IRCUser.Name == ProgramConstants.PLAYERNAME)
            {
                users.Clear();
            }
            else
            {
                users.RemoveAt(index);
            }

            AddMessage(new ChatMessage(null, Color.White, DateTime.Now,
                                       userName + " has been kicked from " + UIName + "."));

            UserKicked?.Invoke(this, new UserNameIndexEventArgs(index, userName));
        }
Ejemplo n.º 2
0
        public void OnUserJoined(ChannelUser user)
        {
            AddUser(user);

            if (notifyOnUserListChange)
            {
                AddMessage(new ChatMessage(user.IRCUser.Name + " has joined " + UIName + "."));
            }
        }
Ejemplo n.º 3
0
        private void DoUserJoinedChannel(string channelName, string host, string userName, string userAddress)
        {
            Channel channel = FindChannel(channelName);

            if (channel == null)
            {
                return;
            }

            bool   isAdmin = false;
            string name    = userName;

            if (userName.StartsWith("@"))
            {
                isAdmin = true;
                name    = userName.Remove(0, 1);
            }

            IRCUser ircUser = null;

            // Check if we already know this user from another channel
            // Avoid LINQ here for performance reasons
            foreach (var user in UserList)
            {
                if (user.Name == name)
                {
                    ircUser = (IRCUser)user.Clone();
                    break;
                }
            }

            // If we don't know the user, create a new one
            if (ircUser == null)
            {
                string   identifier = userAddress.Split('@')[0];
                string[] parts      = identifier.Split('.');
                ircUser = new IRCUser(name, identifier, host);

                if (parts.Length > 1)
                {
                    ircUser.GameID = gameCollection.GameList.FindIndex(g => g.InternalName.ToUpper() == parts[0].Replace("~", string.Empty));
                }

                AddUserToGlobalUserList(ircUser);
            }

            var channelUser = new ChannelUser(ircUser);

            channelUser.IsAdmin  = isAdmin;
            channelUser.IsFriend = cncNetUserData.IsFriend(channelUser.IRCUser.Name);

            ircUser.Channels.Add(channelName);
            channel.OnUserJoined(channelUser);

            //UserJoinedChannel?.Invoke(this, new ChannelUserEventArgs(channelName, userName));
        }
Ejemplo n.º 4
0
        public void OnUserJoined(ChannelUser user)
        {
            AddUser(user);

            if (notifyOnUserListChange)
            {
                AddMessage(new ChatMessage(null, Color.White, DateTime.Now,
                                           user.IRCUser.Name + " has joined " + UIName + "."));
            }
        }
Ejemplo n.º 5
0
        public void OnUserJoined(ChannelUser user)
        {
            AddUser(user);

            if (notifyOnUserListChange)
            {
                AddMessage(new ChatMessage(user.IRCUser.Name + " has joined " + UIName + "."));
            }

            if (Persistent && IsChatChannel && user.IRCUser.Name == ProgramConstants.PLAYERNAME)
            {
                RequestUserInfo();
            }
        }
Ejemplo n.º 6
0
        public static int ChannelUserComparison(ChannelUser u1, ChannelUser u2)
        {
            if (u1.IsAdmin != u2.IsAdmin)
            {
                return(u1.IsAdmin ? -1 : 1);
            }

            if (u1.IsFriend != u2.IsFriend)
            {
                return(u1.IsFriend ? -1 : 1);
            }

            return(string.Compare(u1.IRCUser.Name, u2.IRCUser.Name, StringComparison.InvariantCultureIgnoreCase));
        }
Ejemplo n.º 7
0
        private void DoUserListReceived(string channelName, string[] userList)
        {
            Channel channel = FindChannel(channelName);

            if (channel == null)
            {
                return;
            }

            var channelUserList = new List <ChannelUser>();

            foreach (string userName in userList)
            {
                string name    = userName;
                bool   isAdmin = false;

                if (userName.StartsWith("@"))
                {
                    isAdmin = true;
                    name    = userName.Substring(1);
                }
                else if (userName.StartsWith("+"))
                {
                    name = userName.Substring(1);
                }

                // Check if we already know the IRC user from another channel
                IRCUser ircUser = UserList.Find(u => u.Name == name);

                // If the user isn't familiar to us already,
                // create a new user instance and add it to the global user list
                if (ircUser == null)
                {
                    ircUser = new IRCUser(name);
                    UserList.Add(ircUser);
                }

                var channelUser = new ChannelUser(ircUser);
                channelUser.IsAdmin  = isAdmin;
                channelUser.IsFriend = cncNetUserData.IsFriend(channelUser.IRCUser.Name);

                channelUserList.Add(channelUser);
            }

            UserList = UserList.OrderBy(u => u.Name).ToList();
            MultipleUsersAdded?.Invoke(this, EventArgs.Empty);

            channel.OnUserListReceived(channelUserList);
        }
Ejemplo n.º 8
0
        public void OnUserJoined(ChannelUser user)
        {
            AddUser(user);

            if (notifyOnUserListChange)
            {
                AddMessage(new ChatMessage(user.IRCUser.Name + " has joined " + UIName + "."));
            }

#if !YR
            if (Persistent && IsChatChannel)
            {
                RequestUserInfo();
            }
#endif
        }
Ejemplo n.º 9
0
        public void OnUserListReceived(List <ChannelUser> userList)
        {
            for (int i = 0; i < userList.Count; i++)
            {
                ChannelUser user         = userList[i];
                var         existingUser = users.Find(user.IRCUser.Name);
                if (existingUser == null)
                {
                    users.Add(user.IRCUser.Name, user);
                }
                else if (IsChatChannel)
                {
                    if (existingUser.IsAdmin != user.IsAdmin)
                    {
                        existingUser.IsAdmin = user.IsAdmin;
                        users.Reinsert(user.IRCUser.Name);
                    }
                }
            }

            UserListReceived?.Invoke(this, EventArgs.Empty);
        }
Ejemplo n.º 10
0
        private void ApplyChannelModes(Channel channel, string modeString, List <string> modeParameters)
        {
            bool addMode        = true;
            int  parameterCount = 0;

            foreach (char modeChar in modeString)
            {
                if (modeChar == '+')
                {
                    addMode = true;
                }
                else if (modeChar == '-')
                {
                    addMode = false;
                }
                else
                {
                    switch (modeChar)
                    {
                    // Add/remove channel operator status on user.
                    case 'o':
                        if (parameterCount >= modeParameters.Count)
                        {
                            break;
                        }
                        string      parameter = modeParameters[parameterCount++];
                        ChannelUser user      = channel.Users.Find(parameter);
                        if (user == null)
                        {
                            break;
                        }
                        user.IsAdmin = addMode ? true : false;
                        break;
                    }
                }
            }
        }
Ejemplo n.º 11
0
 public ChannelUserEventArgs(ChannelUser user)
 {
     User = user;
 }
Ejemplo n.º 12
0
 public void AddUser(ChannelUser user)
 {
     users.Add(user.IRCUser.Name, user);
     UserAdded?.Invoke(this, new ChannelUserEventArgs(user));
 }
Ejemplo n.º 13
0
        private void DoChatMessageReceived(string receiver, string senderName, string ident, string message)
        {
            Channel channel = FindChannel(receiver);

            if (channel == null)
            {
                return;
            }

            Color foreColor;

            // Handle ACTION
            if (message.Contains("ACTION"))
            {
                message    = message.Remove(0, 7);
                message    = "====> " + senderName + " " + message;
                senderName = String.Empty;

                // Replace Funky's game identifiers with real game names
                for (int i = 0; i < gameCollection.GameList.Count; i++)
                {
                    message = message.Replace("new " + gameCollection.GetGameIdentifierFromIndex(i) + " game",
                                              "new " + gameCollection.GetFullGameNameFromIndex(i) + " game");
                }

                foreColor = Color.White;
            }
            else
            {
                // Color parsing
                if (message.Contains(Convert.ToString((char)03)))
                {
                    if (message.Length < 3)
                    {
                        foreColor = cDefaultChatColor;
                    }
                    else
                    {
                        string colorString = message.Substring(1, 2);
                        message = message.Remove(0, 3);
                        int colorIndex = Conversions.IntFromString(colorString, -1);
                        // Try to parse message color info; if fails, use default color
                        if (colorIndex < ircChatColors.Length && colorIndex > -1)
                        {
                            foreColor = ircChatColors[colorIndex].XnaColor;
                        }
                        else
                        {
                            foreColor = cDefaultChatColor;
                        }
                    }
                }
                else
                {
                    foreColor = cDefaultChatColor;
                }
            }

            if (message.Length > 1 && message[message.Length - 1] == '\u001f')
            {
                message = message.Remove(message.Length - 1);
            }

            ChannelUser user          = channel.Users.Find(senderName);
            bool        senderIsAdmin = user != null && user.IsAdmin;

            channel.AddMessage(new ChatMessage(senderName, ident, senderIsAdmin, foreColor, DateTime.Now, message.Replace('\r', ' ')));
        }
Ejemplo n.º 14
0
 public ChannelUserEventArgs(int index, ChannelUser user)
 {
     UserIndex = index;
     User      = user;
 }
Ejemplo n.º 15
0
 public void AddUser(ChannelUser user)
 {
     users.Add(user);
     users = users.OrderBy(u => u.IRCUser.Name).OrderBy(u => !u.IsAdmin).ToList();
     UserAdded?.Invoke(this, new ChannelUserEventArgs(-1, user));
 }