Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
    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), "=!="));
    }
Exemplo n.º 9
0
 private void Channel_UserInvited(object sender, IrcUserEventArgs e)
 {
     //TODO: Map this message for a format file
     RaiseChannelEvent(e.User.NickName, "was invited.");
 }
Exemplo n.º 10
0
 private static void ircClient1_Channel_UserInvited(object sender, IrcUserEventArgs e)
 {
     if (client1ChannelUserInvitedEvent != null)
         client1ChannelUserInvitedEvent.Set();
 }
Exemplo n.º 11
0
 private static void ircClient1_WhoWasReplyReceived(object sender, IrcUserEventArgs e)
 {
     if (client1WhoWasReplyReceivedEvent != null)
         client1WhoWasReplyReceivedEvent.Set();
 }
Exemplo n.º 12
0
 /// <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);
 }
Exemplo n.º 13
0
 /// <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);
 }
Exemplo n.º 14
0
 /// <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);
 }