[PRIVMSG] user-type doesn't work

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 :slight_smile: :smiley: