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)); }
public void OnUserJoined(ChannelUser user) { AddUser(user); if (notifyOnUserListChange) { AddMessage(new ChatMessage(user.IRCUser.Name + " has joined " + UIName + ".")); } }
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)); }
public void OnUserJoined(ChannelUser user) { AddUser(user); if (notifyOnUserListChange) { AddMessage(new ChatMessage(null, Color.White, DateTime.Now, user.IRCUser.Name + " has joined " + UIName + ".")); } }
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(); } }
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)); }
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); }
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 }
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); }
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; } } } }
public ChannelUserEventArgs(ChannelUser user) { User = user; }
public void AddUser(ChannelUser user) { users.Add(user.IRCUser.Name, user); UserAdded?.Invoke(this, new ChannelUserEventArgs(user)); }
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', ' '))); }
public ChannelUserEventArgs(int index, ChannelUser user) { UserIndex = index; User = user; }
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)); }