You're splitting the string at every space. If you type !command, string.Split will return { "!command" } (a table with one value, the chat message). If you type !command argument, string.Split will return { "!command", "argument" }. I don't know exactly how ULib.sayCmds is set up, but I assume that its keys (if the keys are the command names) do not contain the exclamation mark at the front. If they do, then I guess you're having another problem.
edit:
After looking at the ULib repo, it looks like ULib.sayCmds's keys are commands and they are the exact same as the command, so if the command is !command then ULib.sayCmds["!command"] should exist. The only reason I could think of for them not matching is trailing or leading spaces. string.Trim() both the command input and the ULib.sayCmds key and see if it works then.