reimplement say command by events