I'm not sure if it's the only problem but the mask in a pubm bind is matched against #channelname followed by channel text. In any event, even if it worked, your proc would only respond to $send and not $send <text here>.
bind PUBM - "#% \$send ?*" myproc
proc myproc {nick uhost hand chan text} {
# code to execute here
}
The above code would now work in response to $send followed by a space followed by anything at least 1 character in length and in any bot channel. It isn't perfect because presumably that one character could be another space. Adding some form of text checking routine inside the proc could prevent this.
putlog only expects one parameter, the text to be logged. You are currently passing two parameters; "YoYo" and the text written in the channel.
Enclose both variables within a string if you'd like to prefix the log message with YoYo:
All irc command expects the last parameter to be prefixed by a colon : if it's the last command and it may contain spaces. For convenience, you may also use the same prefix with the last parameter even if it does not contain a space
Eggdrop handles the botnet message as a string, and extracts the first word as the command, leaving the rest as the text. Thus, you don't need to bother with list conversions: