public MessageEventArgs(string nickName, string message, string userid, string id, string chanel, ExMsgFlag flags = ExMsgFlag.None, string crid = "") { NickName = nickName; Message = message; ID = id; Chanel = chanel; Flags = flags; UserID = userid; CustomRewardID = crid; }
private void WSock_MessageReceived(object sender, WebSocketSharp.MessageEventArgs e) { //Console.WriteLine(e.Data); if (e.Data.Contains(":tmi.twitch.tv CAP * ACK :twitch.tv/tags twitch.tv/commands")) { WSock.Send("JOIN #" + Streamer); new Task(() => { if (!string.IsNullOrEmpty(ConnectMessage)) { Thread.Sleep(200); SendMessage(ConnectMessage); } }).Start(); } else if (e.Data.Contains("PING :tmi.twitch.tv")) { WSock.Send("PONG"); } else if (Listener) { bool davulf = false; if (e.Data.Contains("PRIVMSG") || ((davulf = e.Data.Contains("USERSTATE")) && !string.IsNullOrWhiteSpace(SendedMessage))) { string data = e.Data.Trim(); if (davulf) { data += " :" + SendedMessage; SendedMessage = ""; } string nick = "", id = "", userid = "", chanel = "", crid = ""; string[] splited = data.Split(';'); ExMsgFlag msgflag = ExMsgFlag.None; foreach (var x in splited) { string[] datargs = x.Split('='); if (datargs.Length == 2) { switch (datargs[0]) { case "display-name": nick = datargs[1]; break; case "id": id = datargs[1]; break; case "user-id": userid = datargs[1]; break; case "room-id": chanel = datargs[1]; break; case "badges": foreach (var bad in datargs[1].Split(',')) { switch (bad.Split('/')[0]) { case "vip": msgflag |= ExMsgFlag.FromVip; break; case "glhf-pledge": msgflag |= ExMsgFlag.HasGLHF; break; case "subscriber": break; case "premium": msgflag |= ExMsgFlag.HasPrime; break; } } break; case "msg-id": switch (datargs[1]) { case "highlighted-message": msgflag |= ExMsgFlag.Highlighted; break; case "skip-subs-mode-message": msgflag |= ExMsgFlag.SubModeSkiped; break; } break; case "custom-reward-id": crid = datargs[1]; break; case "turbo": if (datargs[1] == "1") { msgflag |= ExMsgFlag.HasTurbo; } break; case "mod": if (datargs[1] == "1") { msgflag |= ExMsgFlag.FromModer; } break; case "subscriber": if (datargs[1] == "1") { msgflag |= ExMsgFlag.FromSub; } break; } } } OnMessage.Invoke(this, new MessageEventArgs(nick, data.Split(new string[] { "#" + Streamer + " :" }, StringSplitOptions.RemoveEmptyEntries).Last(), userid, id, chanel, msgflag, crid)); } else if (e.Data.Contains("CLEARCHAT")) { int duration = 0; string[] splited = e.Data.Split(';'); foreach (var x in splited) { string[] datargs = x.Split('='); if (datargs.Length == 2) { switch (datargs[0]) { case "@ban-duration": int.TryParse(datargs[1], out duration); break; } } } string userName = e.Data.Split(new string[] { "CLEARCHAT #" + Streamer + " :" }, StringSplitOptions.RemoveEmptyEntries).Last(); OnBan.Invoke(this, new BanEventArgs(userName.Trim(), duration, BanType.BanOrTimeout)); } else if (e.Data.Contains("CLEARMSG")) { string userName = "", MsgID = ""; string[] splited = e.Data.Split(';'); foreach (var x in splited) { string[] datargs = x.Split('='); if (datargs.Length == 2) { switch (datargs[0]) { case "@login": userName = datargs[1]; break; case "target-msg-id": MsgID = datargs[1]; break; } } } string Msg = e.Data.Split(new string[] { "CLEARMSG #" + Streamer + " :" }, StringSplitOptions.RemoveEmptyEntries).Last(); OnBan.Invoke(this, new BanEventArgs(userName.Trim(), Msg, MsgID, BanType.MsgDelete)); } } }