Hey,
Currently RiveScript itself doesn’t support this. :( Substitutions are for whole words, so “@ = atsign” doesn’t work unless the @ was a “word” by itself (spaces on both sides).
You may be able to do this substitution outside of RiveScript, i.e. if you’re using the Perl version, substitute it out with Perl before passing the message to RiveScript.
$message =~ s/@/ atsign /g;
$message =~ s/\./ dot /g;
my $reply = $rs->reply($user, $message);
It’s on my radar to implement some Unicode support into all the RiveScript libraries, which will allow triggers to contain non-ASCII characters (useful for foreign languages), and user messages will be stripped of less characters so that a user could tell the bot their e-mail, and the <star> tag will be literally what the user said, and not the stripped version of it like what happens now.