So, i tryed to implement it in C#, so if anyone needs an IRC-Message-Parser Method for C# :
(Works totally fine now)
Message Parser
public static IrcMessage ParseIrcMessage(string rawMessage)
{
var prefix = "";
var arguments = new Stack<string[]>();
var message = "";
if (string.IsNullOrEmpty(rawMessage))
throw new BadIrcMessageException("Message is empty.");
var hasPrefix = rawMessage[0] == ':' && rawMessage[0] != '@';
if (hasPrefix)
prefix = rawMessage.Substring(rawMessage.IndexOf(':'), rawMessage.IndexOf(' ', 1)).Replace(":", "").Trim();
if(rawMessage.IndexOf(" :") != -1)
{
string[] argumentArray = new string[0];
string[] singleDatas = new string[0];
if (!hasPrefix)
{
var dataConstants = rawMessage.Substring(rawMessage.IndexOf('@'), rawMessage.IndexOf(" :"));
singleDatas = dataConstants.Split(';');
Array.Resize(ref argumentArray, (argumentArray.Length + singleDatas.Length));
argumentArray.For((i) => {
argumentArray[i] = singleDatas[i];
});
rawMessage = rawMessage.Remove(rawMessage.IndexOf('@'), rawMessage.IndexOf(" :")).Trim();
var parsedMessage = ParseIrcMessage(rawMessage);
parsedMessage.MessageData = argumentArray.ToList<string>();
return parsedMessage;
}
var trailing = rawMessage.Substring(0, rawMessage.IndexOf(" :"));
message = rawMessage.Substring(rawMessage.IndexOf(" :"));
var trailingLength = trailing.Split().Length;
var splittedTrailing = trailing.Split();
Array.Resize(ref argumentArray, (argumentArray.Length + trailingLength) + 1);
argumentArray.For((i) => {
if ((i + 1) > trailingLength)
argumentArray[i] = message.Trim().Replace(":", "");
else argumentArray[i] = splittedTrailing[i];
}, trailingLength + 1);
arguments.Push(argumentArray);
} else {
arguments.Push(rawMessage.Split());
}
var command = ((hasPrefix) ? arguments.Peek()[1] : arguments.Peek()[0]).Trim();
return new IrcMessage(prefix, command, arguments.Pop(), hasPrefix);
}
IrcMessage (Model-Class)
public class IrcMessage
{
private string _prefix;
private bool _hasPrefix;
private string _command;
private List<string> _messageData;
private string[] _args;
public IrcMessage(string prefix, string command, string[] args, bool hasPrefix)
{
_prefix = prefix;
_command = command;
_args = args;
}
public string Prefix
{
get { return _prefix; }
set { _prefix = value; }
}
public string Command
{
get { return _command; }
set { _command = value; }
}
public string[] Arguments
{
get { return _args; }
set { _args = value; }
}
public bool HasPrefix
{
get { return _hasPrefix; }
set { _hasPrefix = value; }
}
public List<string> MessageData
{
get { return _messageData; }
set { _messageData = value; }
}
}
Hope i’ll helped someone with that