public TwitchUser get_sender(string msg) { //This could probably be made faster, will do it soon. //Gather all of the user's data (everything before a space), which is concatenated together with ; var name = ""; var sub = false; var moderator = ""; try { //Linq, please. var arr = msg.Substring(0, msg.IndexOf(" ", StringComparison.Ordinal)).Split(';').Select(x => x.Split('=')).ToDictionary(x => x[0], x => x[1]); name = (arr.ContainsKey("display-name")) ? arr["display-name"] : ""; if(name == "") { var siftedJunk = msg.Substring(msg.IndexOf(" :", StringComparison.Ordinal) + 2); foreach(var c in siftedJunk) { if(c.ToString() == "!") { break; } else { name = name + c; } } } sub = arr.ContainsKey("subscriber") && (arr["subscriber"] == "1"); moderator = arr.ContainsKey("user-type") ? arr["user-type"] : ""; } catch(Exception ex) { Program.BotForm.LogMessage("Error: " + ex); } var curUser = new TwitchUser(name, moderator, sub); if (!Users.Contains(curUser)) { Users.Add(curUser); } return curUser; }
private void cmdSendCommand_Click(object sender, EventArgs e) { if(txtCommand.Text != "") { var user = new TwitchUser("ManselD", "", true); Program.BotForm.ProcessReceivedData(user, txtCommand.Text.Split(' ')); channelConnection.send_message(txtCommand.Text); txtCommand.Clear(); } }
public void ProcessReceivedData(TwitchUser sender, string[] message) { //Only log messages if the checkbox is ticked. if(chkboxLogChatMessages.Checked) { LogMessage(sender.Username + ": " + string.Join(" ", message)); } //Purge non-sub links (Moderator exception) if(chkboxPurgeNonSubsLinks.Checked) { if(channelConnection.get_channel(false) != sender.Username.ToLower()) { if(sender.UserType != "mod") { if(!sender.Sub) { foreach(var potentialUrl in message) { var lines = Properties.Resources.TLDS.Split(new string[1] { Environment.NewLine }, StringSplitOptions.None); var illegal = false; foreach(var line in lines) { if(line != null) { if(potentialUrl.Contains("." + line.ToLower() + "?")) { illegal = true; break; } else if(potentialUrl.Contains("." + line.ToLower() + "/")) { illegal = true; break; } else if(potentialUrl.Contains("." + line.ToLower())) { illegal = true; break; } } } if(illegal) { channelConnection.send_message("/timeout " + sender.Username + " 1"); channelConnection.send_message("Naughty " + sender.Username + ", only subs can link!"); break; } } } } } } if(message[0] == "!help" || message[0] == "!commands") { var sb = new StringBuilder(); sb.Append("Here is a full list of commands: "); foreach(var processor in chatCommands) { foreach(var cmd in processor.Commands) { sb.Append(cmd[0] + ", "); } } var completeData = sb.ToString().Trim(); completeData = completeData.Remove(completeData.Length - 1); channelConnection.send_message(completeData); return; } //If it's an admin command and bypassEnabledStatus is true, process command regardless of the bot's enabled status. //Otherwise, respect the status. //First check if the command exists (instead of looping through all of the command processors - wasting time) var curCommand = CommandManager.GetCommandData(message[0]); if(curCommand != null) { if(curCommand.Enabled) { if(string.IsNullOrEmpty(curCommand.CustomReply)) { foreach(var processor in chatCommands) { bool sendViaChat; string returnMessage; processor.ProcessCommand(sender, message, out sendViaChat, out returnMessage); if(returnMessage != null) { var adminCmd = processor as IAdminChatCommand; if(adminCmd != null) { if(adminCmd.BypassEnabledStatus) { ProcessCommandData(returnMessage); break; } } else { if(ChatSettings.BotEnabled) { ProcessCommandData(returnMessage); break; } } return; } } } else { //Process custom command ProcessCommandData(curCommand); } } } }