private void Channel_TopicChanged(object sender, IrcUserEventArgs e) { var info = GetChannelInfoFromClientChannel(sender as IrcChannel); info.Channel.Messages.Add(new Message() { From = info.Network.Client.ServerName, Text = $"Topic: {(sender as IrcChannel).Topic}", Type = MessageType.System }); NotifyChannelChange(info.Channel); }
private void Client_WhoIsReplyReceived(object sender, IrcUserEventArgs e) { var network = NetworkFromIrcClient(sender as StandardIrcClient); BroadcastMessageToNetwork(network, new Message() { From = network.Client.ServerName, Text = $"Who is: {e.User.NickName}", Type = MessageType.System }); NotifyNetworkChange(network); }
private void Channel_UserInvited(object sender, IrcUserEventArgs e) { var info = GetChannelInfoFromClientChannel(sender as IrcChannel); info.Channel.Messages.Add(new Message() { From = info.Network.Client.ServerName, Text = $"{e.User.NickName} was invited.", Type = MessageType.System }); NotifyChannelChange(info.Channel); }
internal static Task HandleJoinMessage(IrcClient client, IrcMessage message) { if (message.Parameters.Length > 0) { string channelName = message.Parameters[0].Substring(1); var hostMask = IrcHostMask.Parse(message.Prefix); if (hostMask != null) { IrcChannel channel; var user = new IrcUser(client, hostMask); if (!client.Channels.ContainsKey(channelName)) { // The client joined the channel. if (client is TwitchIrcClient) { channel = new TwitchChannel(client, channelName); client.Channels.Add(channelName, channel); // Return to not fire the ChannelJoined event and let the ROOMSTATE message handler handle it. return(Task.CompletedTask); } channel = new IrcChannel(client, channelName); client.Channels.Add(channelName, channel); client.User.Update(hostMask); } else { channel = client.Channels[channelName]; } var e = new IrcUserEventArgs(channel, user); client.OnChannelJoined(e); } else { throw new IrcProtocolException("Invalid source."); } } else { throw new IrcProtocolException("1 parameter is required to determine the channel."); } return(Task.CompletedTask); }
private void Channel_ModesChanged(object sender, IrcUserEventArgs e) { var info = GetChannelInfoFromClientChannel(sender as IrcChannel); if (info.Channel != null) { info.Channel.Messages.Add(new Message() { From = e.User == null ? string.Empty : e.User.NickName, Text = $"Channel modes changed to: {(sender as IrcChannel).Modes}", Type = MessageType.System }); NotifyChannelChange(info.Channel); } }
internal static Task HandlePartMessage(IrcClient client, IrcMessage message) { if (message.Parameters.Length > 0) { string channelName = message.Parameters[0].Substring(1); if (client.Channels.ContainsKey(channelName)) { var hostMask = IrcHostMask.Parse(message.Prefix); if (hostMask != null) { var user = new IrcUser(client, IrcHostMask.Parse(message.Prefix)); var channel = client.Channels[channelName]; //The local user left the channel. if (Equals(client.User, user)) { client.Channels.Remove(channelName); client.OnChannelLeft(new IrcChannelEventArgs(client, channel)); } else { var e = new IrcUserEventArgs(channel, user); channel.OnUserLeft(e); } } else { throw new IrcProtocolException("Invalid source."); } } else { throw new IrcProtocolException("PART message received from a channel the client is not present in."); } } else { throw new IrcProtocolException("1 parameter is required to determine the channel."); } return(Task.CompletedTask); }
internal static Task HandleRommstateMessage(IrcClient client, IrcMessage message) { string channelName = message.Parameters[0].Substring(1); TwitchChannel channel = (TwitchChannel)client.Channels[channelName]; if (message.Tags.ContainsKey("emote-only") && int.TryParse(message.Tags["emote-only"], out int emoteOnlyMode)) { channel.EmoteOnlyMode = emoteOnlyMode == 1; } if (message.Tags.ContainsKey("followers-only") && int.TryParse(message.Tags["followers-only"], out int followersOnlyModeMinutes)) { channel.FollowersOnlyMode = followersOnlyModeMinutes != -1; channel.FollowersOnlyModeMinutes = followersOnlyModeMinutes; } if (message.Tags.ContainsKey("r9k") && int.TryParse(message.Tags["r9k"], out int r9kMode)) { channel.R9KMode = r9kMode == 1; } if (message.Tags.ContainsKey("slow") && int.TryParse(message.Tags["slow"], out int slowModeSeconds)) { channel.SlowModeSeconds = slowModeSeconds; } if (message.Tags.ContainsKey("subs-only") && int.TryParse(message.Tags["subs-only"], out int subscribersOnlyMode)) { channel.SubscribersOnlyMode = subscribersOnlyMode == 1; } if (!channel.ChannelJoinedEventFired) { // This is the first ROOMSTATE message for this channel received. // Fire the ChannelJoined event with a fully initialized TwitchChannel instance. var e = new IrcUserEventArgs(channel, client.User); client.OnChannelJoined(e); channel.ChannelJoinedEventFired = true; } return(Task.CompletedTask); }
private void clientWhoIsReplyReceived(object sender, IrcUserEventArgs e) { var sb = new StringBuilder(); foreach (var channel in e.User.Client.Channels) { sb.Append(channel.Name + ' '); } var channels = sb.ToString(); this.Messages.Add(new Message(e.User.NickName + " " + string.Format("[{0}@{1}]", e.User.UserName, e.User.HostName), DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=")); this.Messages.Add(new Message("ircname: " + e.User.RealName, DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=")); this.Messages.Add(new Message("channels: " + channels, DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=")); this.Messages.Add(new Message("server: " + e.User.ServerName + string.Format("[{0}]", e.User.ServerInfo), DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=")); this.Messages.Add(new Message("idle: " + e.User.IdleDuration, DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=")); this.Messages.Add(new Message("End of WHOIS", DateTime.Now.ToString(this.Settings.TimestampFormat), "=!=")); }
private void Channel_UserInvited(object sender, IrcUserEventArgs e) { //TODO: Map this message for a format file RaiseChannelEvent(e.User.NickName, "was invited."); }
private static void ircClient1_Channel_UserInvited(object sender, IrcUserEventArgs e) { if (client1ChannelUserInvitedEvent != null) client1ChannelUserInvitedEvent.Set(); }
private static void ircClient1_WhoWasReplyReceived(object sender, IrcUserEventArgs e) { if (client1WhoWasReplyReceivedEvent != null) client1WhoWasReplyReceivedEvent.Set(); }
/// <summary> /// Raises the <see cref="ChannelJoined"/> event. /// </summary> /// <param name="e">The <see cref="EventArgs"/> instance holding the event data.</param> internal void OnChannelJoined(IrcUserEventArgs e) { ChannelJoined?.Invoke(this, e); }
/// <summary> /// Raises the <see cref="UserLeft"/> event. /// </summary> /// <param name="e">The <see cref="EventArgs"/> instance holding the event data.</param> internal void OnUserLeft(IrcUserEventArgs e) { UserLeft?.Invoke(this, e); }
/// <summary> /// Raises the <see cref="UserJoined"/> event. /// </summary> /// <param name="e">The <see cref="EventArgs"/> instance holding the event data.</param> internal void OnUserJoined(IrcUserEventArgs e) { UserJoined?.Invoke(this, e); }