Merge pull request #92 from RockyTV/caps
Add support for userhost-in-names cap
This commit is contained in:
commit
a1329cf81d
|
@ -64,27 +64,64 @@ namespace ChatSharp.Handlers
|
||||||
|
|
||||||
public static void HandleUserListPart(IrcClient client, IrcMessage message)
|
public static void HandleUserListPart(IrcClient client, IrcMessage message)
|
||||||
{
|
{
|
||||||
var channel = client.Channels[message.Parameters[2]];
|
if (client.Capabilities.IsEnabled("userhost-in-names"))
|
||||||
var users = message.Parameters[3].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
|
||||||
foreach (var rawNick in users)
|
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(rawNick))
|
var channel = client.Channels[message.Parameters[2]];
|
||||||
continue;
|
var users = message.Parameters[3].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
foreach (var hostmask in users)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(hostmask))
|
||||||
|
continue;
|
||||||
|
|
||||||
var nick = rawNick;
|
// Parse hostmask
|
||||||
var modes = client.ServerInfo.GetModesForNick(nick);
|
var nick = hostmask.Substring(0, hostmask.IndexOf("!"));
|
||||||
|
var ident = hostmask.Substring(nick.Length + 1, hostmask.LastIndexOf("@") - (nick.Length + 1));
|
||||||
|
var hostname = hostmask.Substring(hostmask.LastIndexOf("@") + 1);
|
||||||
|
|
||||||
if (modes.Count > 0)
|
// Get user modes
|
||||||
nick = rawNick.Remove(0, modes.Count);
|
var modes = client.ServerInfo.GetModesForNick(nick);
|
||||||
|
if (modes.Count > 0)
|
||||||
|
nick = nick.Remove(0, modes.Count);
|
||||||
|
|
||||||
var user = client.Users.GetOrAdd(nick);
|
var user = client.Users.GetOrAdd(nick);
|
||||||
|
if (user.Hostname != hostname && user.User != ident)
|
||||||
|
{
|
||||||
|
user.Hostname = hostname;
|
||||||
|
user.User = ident;
|
||||||
|
}
|
||||||
|
|
||||||
if (!user.Channels.Contains(channel))
|
if (!user.Channels.Contains(channel))
|
||||||
user.Channels.Add(channel);
|
user.Channels.Add(channel);
|
||||||
if (!user.ChannelModes.ContainsKey(channel))
|
if (!user.ChannelModes.ContainsKey(channel))
|
||||||
user.ChannelModes.Add(channel, modes);
|
user.ChannelModes.Add(channel, modes);
|
||||||
else
|
else
|
||||||
user.ChannelModes[channel] = modes;
|
user.ChannelModes[channel] = modes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var channel = client.Channels[message.Parameters[2]];
|
||||||
|
var users = message.Parameters[3].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
foreach (var rawNick in users)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(rawNick))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var nick = rawNick;
|
||||||
|
var modes = client.ServerInfo.GetModesForNick(nick);
|
||||||
|
|
||||||
|
if (modes.Count > 0)
|
||||||
|
nick = rawNick.Remove(0, modes.Count);
|
||||||
|
|
||||||
|
var user = client.Users.GetOrAdd(nick);
|
||||||
|
|
||||||
|
if (!user.Channels.Contains(channel))
|
||||||
|
user.Channels.Add(channel);
|
||||||
|
if (!user.ChannelModes.ContainsKey(channel))
|
||||||
|
user.ChannelModes.Add(channel, modes);
|
||||||
|
else
|
||||||
|
user.ChannelModes[channel] = modes;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -169,7 +169,7 @@ namespace ChatSharp
|
||||||
// List of supported capabilities
|
// List of supported capabilities
|
||||||
Capabilities.AddRange(new string[] {
|
Capabilities.AddRange(new string[] {
|
||||||
"server-time", "multi-prefix", "cap-notify", "znc.in/server-time", "znc.in/server-time-iso",
|
"server-time", "multi-prefix", "cap-notify", "znc.in/server-time", "znc.in/server-time-iso",
|
||||||
"account-notify", "chghost"
|
"account-notify", "chghost", "userhost-in-names"
|
||||||
});
|
});
|
||||||
|
|
||||||
IsNegotiatingCapabilities = false;
|
IsNegotiatingCapabilities = false;
|
||||||
|
|
Loading…
Reference in New Issue