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;
		}
Example #2
0
		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();
            }
		}
Example #3
0
		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);
					}
				}
			}
		}