Now recite foo works perfectly but the SAY command has a mind of its own and comes back with the message - You must be more specific about whom you want to talk to.
I don’t want any of that nonsense. I just want SAY foo to be synonymous with RECITE. Please help.
from your code, I infer that you use adv3 library…
after this little library disambiguation I note that you have created a verb (Recite) whose share the vocabulary with two peculiar (and AFAICT, little used) verb (yes and no), and adv3 evidently disambiguated in favour of these verb, hence executes either yesAction or NoAction, whose “mind(s) of its (their) own” notes that there’s a Dobject instead of an Actor (note “whom” instead of “what” in the message…) resulting in your issue.
If my diagnosis is correct, the simplest (?) solution lies in putting alongside the appropriate DobjFor (Recite) in your recitals object(s), together with a pair of appropriate RemapTo of both YesAction and NoAction to ReciteAction.
One quick clarification. If you try to say ‘yes,’ ‘no,’ various forms of ‘bye’ or ‘hi’ (ie >say yes) it will resolve to another verb - Yes, No, Goodbye and Hello respectively. If I >say no in a room with multiple NPCs, you get the ‘be more specific’ response from your original post.
You would need to modify those verbs to no longer accept ‘say yes’ (for example). If needed, you could add more sophisticated Literal matching in your execAction to redirect actions back to Yes/No/Goodbye/Hello to keep things smooth for the player. Or, more clumsily, you could leave the verbs as is and educate the player on the differences between >say no and >say 'no'.