Hi,

N00B hat nach dem Parser gefragt, jetzt gibt's ihn wieder für euch.
Macht damit, was ihr wollt, z.B. Werbebot.

PHP-Code:
        internal class Parser
        
{
            
// Globale Variablen
            
private static string ChannelName String.Empty;
            private static 
int ChannelCount 2;
            
/// <summary>
            /// Erstellt eine ChannelList
            /// </summary>
            /// <param name="input">Die Daten vom Server (b-Token)</param>
            /// <returns>ChannelList</returns>
            
internal static Channel[] ParseChannelList(string input)
            {
                
// Splitte die Daten "-\0"
                
string[] channelListParameters input.Split(new string[] { "-\0" }, StringSplitOptions.RemoveEmptyEntries);
                
// Initalisiere eine neue Liste (Channel)
                
List<ChannelchannelList = new List<Channel>();
                
// Gehe jeden Eintrag durch
                
foreach (string parameter in channelListParameters)
                    
// Füge den Channel (ParseChannel gibt einen Channel zurück) in unsere List hinzu
                    
channelList.Add(ParseChannel(parameter));
                
// Gebe die Liste als Array zurück
                
return channelList.ToArray();
            }

            
/// <summary>
            /// Erstellt einen Channel aus den dazugehörigen Parametern
            /// </summary>
            /// <param name="parameters">Die Channelparameter</param>
            /// <returns>Channel</returns>
            
private static Channel ParseChannel(string parameters)
            {
                
// Falls die aktuelle Daten mit b\0 anfangen (am Anfang: b\00-8-15...)
                
if (parameters.StartsWith("b\0"))
                    
// entfernen
                    
parameters parameters.Replace("b\0"String.Empty);
                
// Wir splitten jetzt das \0
                
string[] channelParameters parameters.Split('\0');
                
/* In der ersten Stelle im Array befindet sich der Channelname und die Anzahl der Chatter, getrennt durch "\n"
                 * Dann splitten wir das "\n" und die erste Stelle davon ist der Channelname
                 */
                
string channelname channelParameters[0].Split('\n')[0];
                
// Wenn der ChannelName " entspricht
                
if (channelname == """)
                {
                    // Dann kriegt er den ursprünglichen Channelnamen und die Nummer
                    channelname = String.Format("
{0} {1}", ChannelName, ChannelCount);
                    // erhöhe die Nummer um 1
                    ChannelCount++;
                }
                // Wenn der ChannelName aber " 
enthält
                
else if (channelname.Contains("""))
                    /* Dann sieht es so aus: "
5
                     
Das " ersetzen wir, erhalten somit die Nummer und der ChannelName ist der ursprüngliche Name und die Nummer
                     */
                    channelname = String.Format("
{0} {1}", ChannelName, channelname.Replace("""String.Empty));
                
// Wenn es ein neuer Channel ist, der mit dem alten nichts zu tun hat
                
else if (channelname != ChannelName)
                {
                    
// Setze die Nummer auf den Standartwert
                    
ChannelCount 2;
                    
ChannelName channelname;
                }
                
// Ansonsten
                
else
                {
                    
// Globale Variable erhält den aktuellen Channelnamen
                    
ChannelName channelname;
                }
                
// Anzahl der Chatter bestimmen (s.o.)
                
int count int.Parse(channelParameters[0].Split('\n')[1]);
                
// Wenn ein Channel voll ist, wird in der vierten Stelle des Arrays das entsprechende Bild geliefert und wir prüfen, ob sich ein Teil davon dort befindet
                
bool isFull channelParameters[3].Contains("full");
                
// Wenn im Channel mehr als 1 Chatter ist, ist er nicht leer, ansonsten schon
                
bool isEmpty = !(count 1);
                
// Format, wie der Channel angezeigt wird (i = italic, p = plain)
                
char channelAppearanceFormatter char.Parse(channelParameters[1]);
                
// neue Liste initialisieren
                
List<stringimages = new List<string>();
                
// Pfad zur List hinzufügen, wenn es "pics" enthält
                
if (channelParameters[3].Contains("pics"))
                    
images.Add(channelParameters[3]);
                
// Gebe Channel zurück
                
return new Channel(channelnamecountisFullisEmptychannelAppearanceFormatterimages);
            }
        }

        
internal struct Channel
        
{
            private 
string _channelname;
            private 
int _chatter;
            private 
bool _isFull;
            private 
bool _isEmpty;
            private 
char _formatter;
            private List<
string_images;

            public 
string ChannelName get { return _channelname; } }
            public 
int Chatter get { return _chatter; } }
            public 
bool isFull get { return _isFull; } }
            public 
bool isEmpty get { return _isEmpty; } }
            public 
char channelAppearanceFormatter get { return _formatter; } }
            public List<
stringImages get { return _images; } }

            public 
Channel(string nameint chatterbool fullbool empty, char formatter, List<stringchannelImages)
            {
                
_channelname name;
                
_chatter chatter;
                
_isFull full;
                
_isEmpty = empty;
                
_formatter formatter;
                
_images channelImages;
            }
        } 
Ja, hf und so.

MfG