use string interpolation

This commit is contained in:
Ben Harris 2024-04-19 15:06:28 -04:00
parent 32d3731be9
commit 3fadf262e6
7 changed files with 58 additions and 85 deletions

View File

@ -74,7 +74,7 @@ namespace ChatSharp.Handlers
continue;
// Parse hostmask
var nick = hostmask.Substring(0, hostmask.IndexOf("!", StringComparison.Ordinal));
var nick = hostmask[..hostmask.IndexOf("!", StringComparison.Ordinal)];
var ident = hostmask[(nick.Length + 1)..hostmask.LastIndexOf("@", StringComparison.Ordinal)];
var hostname = hostmask[(hostmask.LastIndexOf("@", StringComparison.Ordinal) + 1)..];

View File

@ -6,7 +6,7 @@ namespace ChatSharp.Handlers
{
var parameterString = message.Format()[message.Format().IndexOf(' ')..];
var parameters = parameterString[parameterString.IndexOf(' ')..].Split(' ');
var request = client.RequestManager.PeekOperation("GETMODE b " + parameters[1]);
var request = client.RequestManager.PeekOperation($"GETMODE b {parameters[1]}");
var list = (MaskCollection)request.State;
list.Add(new Mask(parameters[2], client.Users.GetOrAdd(parameters[3]),
IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4]))));
@ -14,7 +14,7 @@ namespace ChatSharp.Handlers
public static void HandleBanListEnd(IrcClient client, IrcMessage message)
{
var request = client.RequestManager.DequeueOperation("GETMODE b " + message.Parameters[1]);
var request = client.RequestManager.DequeueOperation($"GETMODE b {message.Parameters[1]}");
request.Callback?.Invoke(request);
}
@ -22,7 +22,7 @@ namespace ChatSharp.Handlers
{
var parameterString = message.Format()[(message.Format().IndexOf(' ') + 1)..];
var parameters = parameterString[(parameterString.IndexOf(' ') + 1)..].Split(' ');
var request = client.RequestManager.PeekOperation("GETMODE e " + parameters[1]);
var request = client.RequestManager.PeekOperation($"GETMODE e {parameters[1]}");
var list = (MaskCollection)request.State;
list.Add(new Mask(parameters[2], client.Users.GetOrAdd(parameters[3]),
IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4]))));
@ -30,7 +30,7 @@ namespace ChatSharp.Handlers
public static void HandleExceptionListEnd(IrcClient client, IrcMessage message)
{
var request = client.RequestManager.DequeueOperation("GETMODE e " + message.Parameters[1]);
var request = client.RequestManager.DequeueOperation($"GETMODE e {message.Parameters[1]}");
request.Callback?.Invoke(request);
}
@ -38,7 +38,7 @@ namespace ChatSharp.Handlers
{
var parameterString = message.Format()[(message.Format().IndexOf(' ') + 1)..];
var parameters = parameterString[(parameterString.IndexOf(' ') + 1)..].Split(' ');
var request = client.RequestManager.PeekOperation("GETMODE I " + parameters[1]);
var request = client.RequestManager.PeekOperation($"GETMODE I {parameters[1]}");
var list = (MaskCollection)request.State;
list.Add(new Mask(parameters[2], client.Users.GetOrAdd(parameters[3]),
IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4]))));
@ -46,7 +46,7 @@ namespace ChatSharp.Handlers
public static void HandleInviteListEnd(IrcClient client, IrcMessage message)
{
var request = client.RequestManager.DequeueOperation("GETMODE I " + message.Parameters[1]);
var request = client.RequestManager.DequeueOperation($"GETMODE I {message.Parameters[1]}");
request.Callback?.Invoke(request);
}
@ -54,7 +54,7 @@ namespace ChatSharp.Handlers
{
var parameterString = message.Format()[(message.Format().IndexOf(' ') + 1)..];
var parameters = parameterString[(parameterString.IndexOf(' ') + 1)..].Split(' ');
var request = client.RequestManager.PeekOperation("GETMODE q " + parameters[1]);
var request = client.RequestManager.PeekOperation($"GETMODE q {parameters[1]}");
var list = (MaskCollection)request.State;
list.Add(new Mask(parameters[2], client.Users.GetOrAdd(parameters[3]),
IrcClient.DateTimeFromIrcTime(int.Parse(parameters[4]))));
@ -62,7 +62,7 @@ namespace ChatSharp.Handlers
public static void HandleQuietListEnd(IrcClient client, IrcMessage message)
{
var request = client.RequestManager.DequeueOperation("GETMODE q " + message.Parameters[1]);
var request = client.RequestManager.DequeueOperation($"GETMODE q {message.Parameters[1]}");
request.Callback?.Invoke(request);
}
}

View File

@ -187,12 +187,12 @@ namespace ChatSharp.Handlers
if (client.ServerInfo.SupportedChannelModes.ParameterizedSettings.Contains(c))
{
client.OnModeChanged(new ModeChangeEventArgs(channel.Name, new IrcUser(message.Source),
(add ? "+" : "-") + c + " " + message.Parameters[i++]));
$"{(add ? "+" : "-")}{c} {message.Parameters[i++]}"));
}
else if (client.ServerInfo.SupportedChannelModes.ChannelLists.Contains(c))
{
client.OnModeChanged(new ModeChangeEventArgs(channel.Name, new IrcUser(message.Source),
(add ? "+" : "-") + c + " " + message.Parameters[i++]));
$"{(add ? "+" : "-")}{c} {message.Parameters[i++]}"));
}
else if (client.ServerInfo.SupportedChannelModes.ChannelUserModes.Contains(c))
{
@ -218,7 +218,7 @@ namespace ChatSharp.Handlers
}
client.OnModeChanged(new ModeChangeEventArgs(channel.Name, new IrcUser(message.Source),
(add ? "+" : "-") + c + " " + message.Parameters[i++]));
$"{(add ? "+" : "-")}{c} {message.Parameters[i++]}"));
}
if (client.ServerInfo.SupportedChannelModes.Settings.Contains(c))
@ -244,7 +244,7 @@ namespace ChatSharp.Handlers
if (message.Command == "324")
{
var operation = client.RequestManager.DequeueOperation("MODE " + channel.Name);
var operation = client.RequestManager.DequeueOperation($"MODE {channel.Name}");
operation.Callback(operation);
}
}

View File

@ -11,7 +11,7 @@ namespace ChatSharp.Handlers
{
if (message.Parameters != null && message.Parameters.Count >= 6)
{
var whois = (WhoIs)client.RequestManager.PeekOperation("WHOIS " + message.Parameters[1]).State;
var whois = (WhoIs)client.RequestManager.PeekOperation($"WHOIS {message.Parameters[1]}").State;
whois.User.Nick = message.Parameters[1];
whois.User.User = message.Parameters[2];
whois.User.Hostname = message.Parameters[3];
@ -29,32 +29,32 @@ namespace ChatSharp.Handlers
public static void HandleWhoIsLoggedInAs(IrcClient client, IrcMessage message)
{
var whois = (WhoIs)client.RequestManager.PeekOperation("WHOIS " + message.Parameters[1]).State;
var whois = (WhoIs)client.RequestManager.PeekOperation($"WHOIS {message.Parameters[1]}").State;
whois.LoggedInAs = message.Parameters[2];
}
public static void HandleWhoIsServer(IrcClient client, IrcMessage message)
{
var whois = (WhoIs)client.RequestManager.PeekOperation("WHOIS " + message.Parameters[1]).State;
var whois = (WhoIs)client.RequestManager.PeekOperation($"WHOIS {message.Parameters[1]}").State;
whois.Server = message.Parameters[2];
whois.ServerInfo = message.Parameters[3];
}
public static void HandleWhoIsOperator(IrcClient client, IrcMessage message)
{
var whois = (WhoIs)client.RequestManager.PeekOperation("WHOIS " + message.Parameters[1]).State;
var whois = (WhoIs)client.RequestManager.PeekOperation($"WHOIS {message.Parameters[1]}").State;
whois.IrcOp = true;
}
public static void HandleWhoIsIdle(IrcClient client, IrcMessage message)
{
var whois = (WhoIs)client.RequestManager.PeekOperation("WHOIS " + message.Parameters[1]).State;
var whois = (WhoIs)client.RequestManager.PeekOperation($"WHOIS {message.Parameters[1]}").State;
whois.SecondsIdle = int.Parse(message.Parameters[2]);
}
public static void HandleWhoIsChannels(IrcClient client, IrcMessage message)
{
var whois = (WhoIs)client.RequestManager.PeekOperation("WHOIS " + message.Parameters[1]).State;
var whois = (WhoIs)client.RequestManager.PeekOperation($"WHOIS {message.Parameters[1]}").State;
var channels = message.Parameters[2].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (var i = 0; i < channels.Length; i++)
if (!channels[i].StartsWith("#"))
@ -64,7 +64,7 @@ namespace ChatSharp.Handlers
public static void HandleWhoIsEnd(IrcClient client, IrcMessage message)
{
var request = client.RequestManager.DequeueOperation("WHOIS " + message.Parameters[1]);
var request = client.RequestManager.DequeueOperation($"WHOIS {message.Parameters[1]}");
var whois = (WhoIs)request.State;
if (!client.Users.Contains(whois.User.Nick))
client.Users.Add(whois.User);
@ -227,7 +227,8 @@ namespace ChatSharp.Handlers
{
if (client.ServerInfo.ExtendedWho)
{
var query = client.RequestManager.PendingOperations.FirstOrDefault(kvp => kvp.Key.StartsWith("WHO " + message.Parameters[1]));
var query = client.RequestManager.PendingOperations.FirstOrDefault(kvp => kvp.Key.StartsWith(
$"WHO {message.Parameters[1]}"));
var request = client.RequestManager.DequeueOperation(query.Key);
var whoxList = (List<ExtendedWho>)request.State;
@ -240,7 +241,8 @@ namespace ChatSharp.Handlers
}
else
{
var query = client.RequestManager.PendingOperations.FirstOrDefault(kvp => kvp.Key == "WHO " + message.Parameters[1]);
var query = client.RequestManager.PendingOperations.FirstOrDefault(kvp => kvp.Key ==
$"WHO {message.Parameters[1]}");
var request = client.RequestManager.DequeueOperation(query.Key);
var whoList = (List<ExtendedWho>)request.State;

View File

@ -36,7 +36,7 @@ namespace ChatSharp
/// The name, including the prefix (i.e. #), of this channel.
/// </summary>
/// <value>The name.</value>
public string Name { get; internal set; }
public string Name { get; }
/// <summary>
/// The channel mode. May be null if we have not received the mode yet.

View File

@ -20,11 +20,7 @@ namespace ChatSharp
/// </summary>
public void SendMessage(string message, params string[] destinations)
{
const string illegalCharacters = "\r\n\0";
if (destinations == null || !destinations.Any())
throw new InvalidOperationException("Message must have at least one target.");
if (illegalCharacters.Any(message.Contains))
throw new ArgumentException("Illegal characters are present in message.", nameof(message));
IllegalCharacters(message, destinations);
var to = string.Join(",", destinations);
SendRawMessage("PRIVMSG {0} :{1}{2}", to, PrivmsgPrefix, message);
}
@ -34,11 +30,7 @@ namespace ChatSharp
/// </summary>
public void SendAction(string message, params string[] destinations)
{
const string illegalCharacters = "\r\n\0";
if (destinations == null || !destinations.Any())
throw new InvalidOperationException("Message must have at least one target.");
if (illegalCharacters.Any(message.Contains))
throw new ArgumentException("Illegal characters are present in message.", nameof(message));
IllegalCharacters(message, destinations);
var to = string.Join(",", destinations);
SendRawMessage("PRIVMSG {0} :\x0001ACTION {1}{2}\x0001", to, PrivmsgPrefix, message);
}
@ -47,14 +39,19 @@ namespace ChatSharp
/// Sends a NOTICE to one or more destinations (channels or users).
/// </summary>
public void SendNotice(string message, params string[] destinations)
{
IllegalCharacters(message, destinations);
var to = string.Join(",", destinations);
SendRawMessage("NOTICE {0} :{1}{2}", to, PrivmsgPrefix, message);
}
private static void IllegalCharacters(string message, string[] destinations)
{
const string illegalCharacters = "\r\n\0";
if (destinations == null || !destinations.Any())
throw new InvalidOperationException("Message must have at least one target.");
if (illegalCharacters.Any(message.Contains))
throw new ArgumentException("Illegal characters are present in message.", nameof(message));
var to = string.Join(",", destinations);
SendRawMessage("NOTICE {0} :{1}{2}", to, PrivmsgPrefix, message);
}
/// <summary>
@ -92,7 +89,7 @@ namespace ChatSharp
SendRawMessage(joinCmd, channel);
// account-notify capability
var flags = WhoxField.Nick | WhoxField.Hostname | WhoxField.AccountName | WhoxField.Username;
const WhoxField flags = WhoxField.Nick | WhoxField.Hostname | WhoxField.AccountName | WhoxField.Username;
if (Capabilities.IsEnabled("account-notify"))
Who(channel, WhoxFlag.None, flags, whoList =>
@ -148,30 +145,24 @@ namespace ChatSharp
SendRawMessage("INVITE {1} {0}", channel, user);
}
/// <summary>
/// Sends a WHOIS query asking for information on the given nick.
/// </summary>
public void WhoIs(string nick)
{
WhoIs(nick, null);
}
/// <summary>
/// Sends a WHOIS query asking for information on the given nick, and a callback
/// to run when we have received the response.
/// </summary>
public void WhoIs(string nick, Action<WhoIs> callback)
public void WhoIs(string nick, Action<WhoIs> callback = null)
{
var whois = new WhoIs();
RequestManager.QueueOperation("WHOIS " + nick, new RequestOperation(whois, ro => { callback?.Invoke((WhoIs)ro.State); }));
SendRawMessage("WHOIS {0}", nick);
var message = $"WHOIS {nick}";
RequestManager.QueueOperation(message,
new RequestOperation(whois, ro => { callback?.Invoke((WhoIs)ro.State); }));
SendRawMessage(message);
}
/// <summary>
/// Sends an extended WHO query asking for specific information about a single user
/// or the users in a channel, and runs a callback when we have received the response.
/// </summary>
public void Who(string target, WhoxFlag flags, WhoxField fields, Action<List<ExtendedWho>> callback)
public void Who(string target, WhoxFlag flags, WhoxField whoxField, Action<List<ExtendedWho>> callback)
{
if (ServerInfo.ExtendedWho)
{
@ -181,13 +172,12 @@ namespace ChatSharp
var queryType = RandomNumber.Next(0, 999);
// Add the querytype field if it wasn't defined
var _fields = fields;
if ((fields & WhoxField.QueryType) == 0)
_fields |= WhoxField.QueryType;
var fields = whoxField;
if ((whoxField & WhoxField.QueryType) == 0)
fields |= WhoxField.QueryType;
var whoQuery = string.Format("WHO {0} {1}%{2},{3}", target, flags.AsString(), _fields.AsString(),
queryType);
var queryKey = $"WHO {target} {queryType} {_fields:D}";
var whoQuery = $"WHO {target} {flags.AsString()}%{fields.AsString()},{queryType}";
var queryKey = $"WHO {target} {queryType} {fields:D}";
RequestManager.QueueOperation(queryKey,
new RequestOperation(whox, ro => { callback?.Invoke((List<ExtendedWho>)ro.State); }));
@ -196,7 +186,6 @@ namespace ChatSharp
else
{
var whox = new List<ExtendedWho>();
var whoQuery = $"WHO {target}";
RequestManager.QueueOperation(whoQuery,
@ -205,25 +194,18 @@ namespace ChatSharp
}
}
/// <summary>
/// Requests the mode of a channel from the server.
/// </summary>
public void GetMode(string channel)
{
GetMode(channel, null);
}
/// <summary>
/// Requests the mode of a channel from the server, and passes it to a callback later.
/// </summary>
public void GetMode(string channel, Action<IrcChannel> callback)
public void GetMode(string channel, Action<IrcChannel> callback = null)
{
RequestManager.QueueOperation("MODE " + channel, new RequestOperation(channel, ro =>
var message = $"MODE {channel}";
RequestManager.QueueOperation(message, new RequestOperation(channel, ro =>
{
var c = Channels[(string)ro.State];
callback?.Invoke(c);
}));
SendRawMessage("MODE {0}", channel);
SendRawMessage(message);
}
/// <summary>
@ -240,11 +222,8 @@ namespace ChatSharp
/// </summary>
public void GetModeList(string channel, char mode, Action<MaskCollection> callback)
{
RequestManager.QueueOperation("GETMODE " + mode + " " + channel, new RequestOperation(new MaskCollection(), ro =>
{
var c = (MaskCollection)ro.State;
callback?.Invoke(c);
}));
RequestManager.QueueOperation($"MODE {mode} {channel}",
new RequestOperation(new MaskCollection(), ro => callback?.Invoke((MaskCollection)ro.State)));
SendRawMessage("MODE {0} {1}", channel, mode);
}
}

View File

@ -84,7 +84,7 @@ namespace ChatSharp
/// </summary>
public string ServerAddress
{
get => ServerHostname + ":" + ServerPort;
get => $"{ServerHostname}:{ServerPort}";
internal set
{
var parts = value.Split(':');
@ -180,7 +180,7 @@ namespace ChatSharp
if (Handlers.ContainsKey(message.ToUpper()))
Console.WriteLine("Warning: {0} handler has been overwritten", message);
#endif
message = message.ToUpper();
message = message.ToUpperInvariant();
Handlers[message] = handler;
}
@ -222,18 +222,10 @@ namespace ChatSharp
Socket.BeginConnect(ServerHostname, ServerPort, ConnectComplete, null);
}
/// <summary>
/// Send a QUIT message and disconnect.
/// </summary>
public void Quit()
{
Quit(null);
}
/// <summary>
/// Send a QUIT message with a reason and disconnect.
/// </summary>
public void Quit(string reason)
public void Quit(string reason = null)
{
if (reason == null)
SendRawMessage("QUIT");
@ -348,7 +340,7 @@ namespace ChatSharp
}
message = string.Format(message, format);
var data = Encoding.GetBytes(message + "\r\n");
var data = Encoding.GetBytes($"{message}\r\n");
if (!IsWriting)
{
@ -397,9 +389,9 @@ namespace ChatSharp
OnRawMessageSent(new RawMessageEventArgs((string)result.AsyncState, true));
string nextMessage;
if (!WriteQueue.IsEmpty)
{
string nextMessage;
while (!WriteQueue.TryDequeue(out nextMessage))
{
}
@ -520,7 +512,7 @@ namespace ChatSharp
/// <summary>
/// Raised if the nick you've chosen is in use. By default, ChatSharp will pick a
/// random nick to use instead. Set ErronousNickEventArgs.DoNotHandle to prevent this.
/// random nick to use instead. Set ErroneousNickEventArgs.DoNotHandle to prevent this.
/// </summary>
public event EventHandler<ErroneousNickEventArgs> NickInUse;