This would probably better fit in developers corner, as it's not directly asking for help with ULX usage, so, I'm moving it after I post.
Our ulx.command object has additional parameters not commonly used. One of those is a boolean to hide the say command.
Our function set-up;
function ulx.command( category, command, fn, say_cmd, hide_say, nospace )
So when setting up your commands, use;
local obj = ulx.command ( "My Category", "ulx blah", my_funcnameblah, "!my_say", true )
And that will prevent your say commands from showing in chat if no other conflicts occur/chat text code returns the text.