Properly set the channel topic
This commit is contained in:
parent
c0e33b0b42
commit
281f86774a
|
@ -39,6 +39,7 @@
|
|||
<ItemGroup>
|
||||
<Compile Include="ChannelCollection.cs" />
|
||||
<Compile Include="ClientSettings.cs" />
|
||||
<Compile Include="Events\ChannelTopicEventArgs.cs" />
|
||||
<Compile Include="Events\ChannelEventArgs.cs" />
|
||||
<Compile Include="Events\ChannelUserEventArgs.cs" />
|
||||
<Compile Include="Events\IrcNoticeEventArgs.cs" />
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
|
||||
namespace ChatSharp.Events
|
||||
{
|
||||
public class ChannelTopicEventArgs : EventArgs
|
||||
{
|
||||
public IrcChannel Channel { get; set; }
|
||||
public string Topic { get; set; }
|
||||
|
||||
public ChannelTopicEventArgs(IrcChannel channel, string topic)
|
||||
{
|
||||
Channel = channel;
|
||||
Topic = topic;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -25,6 +25,31 @@ namespace ChatSharp.Handlers
|
|||
}
|
||||
if (channel != null)
|
||||
client.OnUserJoinedChannel(new ChannelUserEventArgs(channel, new IrcUser(message.Prefix)));
|
||||
}
|
||||
|
||||
public static void HandleGetTopic(IrcClient client, IrcMessage message)
|
||||
{
|
||||
IrcChannel channel = null;
|
||||
string topic;
|
||||
if (client.Channels.Contains(message.Parameters[1]))
|
||||
{
|
||||
channel = client.Channels[message.Parameters[1]];
|
||||
topic = message.Parameters[2];
|
||||
channel.Topic = topic;
|
||||
}
|
||||
else
|
||||
{
|
||||
channel = new IrcChannel(client, message.Parameters[1]);
|
||||
topic = message.Parameters[2];
|
||||
}
|
||||
client.OnChannelTopicReceived(new ChannelTopicEventArgs(channel, topic));
|
||||
}
|
||||
|
||||
public static void HandleGetEmptyTopic(IrcClient client, IrcMessage message)
|
||||
{
|
||||
var channel = client.Channels[message.Parameters[1]];
|
||||
var topic = message.Parameters[2];
|
||||
client.OnChannelTopicReceived(new ChannelTopicEventArgs(channel, topic));
|
||||
}
|
||||
|
||||
public static void HandlePart(IrcClient client, IrcMessage message)
|
||||
|
|
|
@ -27,7 +27,9 @@ namespace ChatSharp.Handlers
|
|||
|
||||
// Channel handlers
|
||||
client.SetHandler("JOIN", ChannelHandlers.HandleJoin);
|
||||
client.SetHandler("PART", ChannelHandlers.HandlePart);
|
||||
client.SetHandler("PART", ChannelHandlers.HandlePart);
|
||||
client.SetHandler("332", ChannelHandlers.HandleGetTopic);
|
||||
client.SetHandler("331", ChannelHandlers.HandleGetEmptyTopic);
|
||||
client.SetHandler("353", ChannelHandlers.HandleUserListPart);
|
||||
client.SetHandler("366", ChannelHandlers.HandleUserListEnd);
|
||||
client.SetHandler("KICK", ChannelHandlers.HandleKick);
|
||||
|
|
|
@ -15,7 +15,6 @@ namespace ChatSharp
|
|||
}
|
||||
set
|
||||
{
|
||||
Client.SetTopic(Name, value);
|
||||
_Topic = value;
|
||||
}
|
||||
}
|
||||
|
@ -67,5 +66,11 @@ namespace ChatSharp
|
|||
{
|
||||
Client.ChangeMode(Name, change);
|
||||
}
|
||||
|
||||
public void SetTopic(string topic)
|
||||
{
|
||||
Client.SetTopic(Name, topic);
|
||||
Topic = topic;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,6 +59,11 @@ namespace ChatSharp
|
|||
SendRawMessage("TOPIC {0} :{1}", channel, topic);
|
||||
}
|
||||
|
||||
public void GetTopic(string channel)
|
||||
{
|
||||
SendRawMessage("TOPIC {0}", channel);
|
||||
}
|
||||
|
||||
public void KickUser(string channel, string user)
|
||||
{
|
||||
SendRawMessage("KICK {0} {1} :{1}", channel, user);
|
||||
|
|
|
@ -349,6 +349,11 @@ namespace ChatSharp
|
|||
protected internal virtual void OnChannelListRecieved(ChannelEventArgs e)
|
||||
{
|
||||
if (ChannelListRecieved != null) ChannelListRecieved(this, e);
|
||||
}
|
||||
public event EventHandler<ChannelTopicEventArgs> ChannelTopicReceived;
|
||||
protected internal virtual void OnChannelTopicReceived(ChannelTopicEventArgs e)
|
||||
{
|
||||
if (ChannelTopicReceived != null) ChannelTopicReceived(this, e);
|
||||
}
|
||||
public event EventHandler<EventArgs> ConnectionComplete;
|
||||
protected internal virtual void OnConnectionComplete(EventArgs e)
|
||||
|
|
|
@ -31,10 +31,29 @@ namespace TestChatSharp
|
|||
var parts = e.PrivateMessage.Message.Split(' ');
|
||||
client.ChangeMode(parts[1], parts[2]);
|
||||
}
|
||||
else if (e.PrivateMessage.Message.StartsWith(".topic "))
|
||||
{
|
||||
string messageArgs = e.PrivateMessage.Message.Substring(7);
|
||||
if (messageArgs.Contains(" "))
|
||||
{
|
||||
string channel = messageArgs.Substring(0, messageArgs.IndexOf(" "));
|
||||
string topic = messageArgs.Substring(messageArgs.IndexOf(" ") + 1);
|
||||
client.Channels[channel].SetTopic(topic);
|
||||
}
|
||||
else
|
||||
{
|
||||
string channel = messageArgs.Substring(messageArgs.IndexOf("#"));
|
||||
client.GetTopic(channel);
|
||||
}
|
||||
}
|
||||
};
|
||||
client.ChannelMessageRecieved += (s, e) =>
|
||||
{
|
||||
Console.WriteLine("<{0}> {1}", e.PrivateMessage.User.Nick, e.PrivateMessage.Message);
|
||||
};
|
||||
client.ChannelTopicReceived += (s, e) =>
|
||||
{
|
||||
Console.WriteLine("Received topic for channel {0}: {1}", e.Channel.Name, e.Topic);
|
||||
};
|
||||
client.ConnectAsync();
|
||||
while (true) ;
|
||||
|
|
Loading…
Reference in New Issue