public void RemoveRank(Client client, string channel, UserRank rank) { if (ranks.ContainsKey(channel) && ranks[channel].Contains(rank)) { ranks[channel].Remove(rank); if (!ranks[channel].Contains(UserRank.None)) ranks[channel].Add(UserRank.None); client.OnRankChange(this, channel, ranks[channel].Min()); } }
internal void SetIsAway(Client client, bool away, string reason = "") { AwayMessage = away ? reason : string.Empty; isAway = away; client.OnAwayChange(this, away); }
public void AddRank(Client client, string channel, UserRank rank) { Console.WriteLine($"Rank of {this} for {channel} on {client.Host} added: {rank}"); if (!ranks.ContainsKey(channel)) ranks.TryAdd(channel, new List<UserRank>()); if (!ranks[channel].Contains(rank)) { if (!ranks[channel].Contains(UserRank.None)) ranks[channel].Add(UserRank.None); ranks[channel].Add(rank); client.OnRankChange(this, channel, ranks[channel].Min()); } }
public void RemoveMode(Client client, char mode) { if (Modes.Contains(mode)) Modes.Remove(mode); // Invoke events if (mode.Equals('a')) client.OnAwayChange(this, false); }
public void AddMode(Client client, char mode) { if (!Modes.Contains(mode)) Modes.Add(mode); // Invoke events if (mode.Equals('a')) client.OnAwayChange(this, true); }
public int AddMode(Client client, string channel, char mode, string parameter = "") { switch (mode) { case 'v': { var user = client.UserFromNick(parameter); user.AddRank(client, channel, UserRank.Voice); return 1; } case 'h': { var user = client.UserFromNick(parameter); user.AddRank(client, channel, UserRank.HalfOp); return 1; } case 'o': { var user = client.UserFromNick(parameter); user.AddRank(client, channel, UserRank.Op); return 1; } case 'a': { var user = client.UserFromNick(parameter); user.AddRank(client, channel, UserRank.Admin); return 1; } case 'q': { var user = client.UserFromNick(parameter); user.AddRank(client, channel, UserRank.Owner); return 1; } case 'b': { AddBan(parameter); OnModeAdd(mode); return 1; } case 'e': { AddException(parameter); OnModeAdd(mode); return 1; } case 'I': { AddInvite(parameter); OnModeAdd(mode); return 1; } case 'k': { Key = parameter; Modes.Add(mode); return 1; } case 'l': { int limit; if (int.TryParse(parameter, out limit)) { Userlimit = limit; Modes.Add(mode); OnModeAdd(mode); return 1; } break; } default: { if (!Modes.Contains(mode)) Modes.Add(mode); break; } } OnModeAdd(mode); return 0; }
public Channel(Client client, string name) { Client = client; Name = name; Type = ChannelType.FromPrefix(name[0]); }
public int RemoveMode(Client client, string channel, char mode, string parameter = "") { switch (mode) { case 'v': { var user = client.UserFromNick(parameter); user.RemoveRank(client, channel, UserRank.Voice); return 1; } case 'h': { var user = client.UserFromNick(parameter); user.RemoveRank(client, channel, UserRank.HalfOp); return 1; } case 'o': { var user = client.UserFromNick(parameter); user.RemoveRank(client, channel, UserRank.Op); return 1; } case 'a': { var user = client.UserFromNick(parameter); user.RemoveRank(client, channel, UserRank.Admin); return 1; } case 'q': { var user = client.UserFromNick(parameter); user.RemoveRank(client, channel, UserRank.Owner); return 1; } case 'b': { RemoveBan(parameter); OnModeRemove(mode); return 1; } case 'e': { RemoveException(parameter); OnModeRemove(mode); return 1; } case 'I': { RemoveInvite(parameter); OnModeRemove(mode); return 1; } case 'k': { if (Key.Equals(parameter)) { Key = null; if (Modes.Contains(mode)) Modes.Remove(mode); } OnModeRemove(mode); return 1; } case 'l': { Userlimit = -1; if (Modes.Contains(mode)) Modes.Remove(mode); break; } default: { if (Modes.Contains(mode)) Modes.Remove(mode); break; } } OnModeRemove(mode); return 0; }
public Network(string host, int port, User userirc, string[] initialChannels) { Name = host; // By default, name is host. Users = new ObservableCollection<UiUser>(); DisplayUsers = new ObservableCollection<UiUser>(); Channels = new ObservableCollection<UiChannel>(); Me = new UiUser(userirc, ViewModelLocator.Main.GenColor()); Users.Add(Me); // Create IRC client and handle connection. Client = new Client(host, port, userirc); Client.IRCMessage += message => Console.WriteLine(message.Text); Client.Connect += () => { foreach (var chan in initialChannels) Client.Send(new JoinMessage(chan)); }; Client.ReplyISupport += message => { // Use the NETWORK= parameter in 005 to set the server name. string networkName; if (message.TryGetParameter("Network", out networkName)) Name = networkName; }; // Update user list on certain events. Client.Nick += message => { SortUsers(); }; Client.RankChange += (user, channel, rank) => { SortUsers(); }; Client.AwayChange += (user, away) => { SortUsers(); }; // Subscribe to events when a channel is joined. Client.ChannelJoin += message => { var channelJoined = new UiChannel(message.Channel, this); if (ViewModelLocator.Main.Channel == null) ViewModelLocator.Main.Channel = channelJoined; DispatcherHelper.CheckBeginInvokeOnUI(() => Channels.Add(channelJoined)); message.Channel.Message += privateMessage => //Subscribe to the joined channel's messages { DispatcherHelper.CheckBeginInvokeOnUI( () => { var chan = Channels.FirstOrDefault(c => c.Channel == message.Channel); chan?.AddLine(privateMessage); }); }; // Show system messages (will be moved to cause/effect system eventually) message.Channel.UserJoin += joinMessage => { AddSystemLine( $"{joinMessage.User.Nick} ({joinMessage.User.Ident}@{joinMessage.User.Host}) has joined.", channelJoined.Channel); }; message.Channel.UserPart += partMessage => { var reason = string.IsNullOrEmpty(partMessage.Reason) ? string.Empty : $"({partMessage.Reason})"; AddSystemLine($"{partMessage.User.Nick} has left. {reason}", channelJoined.Channel); }; message.Channel.UserAdd += user => { DispatcherHelper.CheckBeginInvokeOnUI(() => { //Don't add duplicate users to the master list. if (Users.All(u => u.User != user)) { Users.Add(new UiUser(user, ViewModelLocator.Main.GenColor())); SortUsers(); } }); }; message.Channel.UserRemove += user => { DispatcherHelper.CheckBeginInvokeOnUI(() => { Users.Remove(Users.FirstOrDefault(x => x.User == user)); SortUsers(); }); }; }; // Show system messages (will be moved to cause/effect system eventually) Client.Quit += message => { var reason = string.IsNullOrEmpty(message.Reason) ? string.Empty : $"({message.Reason})"; AddSystemLine($"{message.User.Nick} has quit. {reason}", message.User.Channels.ToArray()); }; Client.Nick += message => { AddSystemLine($"{message.OldNick} is now known as {message.Nick}.", message.User.Channels.ToArray()); }; //irc.ReplyMOTDEnd += delegate(MOTDEndMessage message) { Text += message.MOTD + Environment.NewLine; }; Client.Start(); }