Um... What are you trying to type?
.vc
or
. vc
(ie. with a space)?
$1 is only = . if you don't have it connected to "vc". If you're using .vc, then $1 = .vc.
Since I think you mean to use .vc and such, delete the If $1 == . part (and the } at the end of that section), keeping the if $2 == ___ parts. Then, change the $2's to $1's and the $3's to $2's.
I wasn't going to write it all out, but here it is anyhow...
on *:notice:*:?: {
if ($address($nick,1) == %sc) {
if ($left($1,1) == .) {
if ($1 == .kk) { amsg debug! | kick # $2 $3- }
elseif ($1 == .vc) { echo :: Bot Voice :: | %mde +v $2 }
elseif ($1 == .dvc) { echo :: Bot DeVoice :: | %mde -v $2 }
elseif ($1 == .bn) { echo :: Bot KickBan :: | kick $chan $2 $3- | %mde +b $2 }
elseif ($1 == .ubn) { echo :: Bot Unban :: | %mde -b $2 }
elseif ($1 == .blist) { echo :: Bot Banlist :: | %mde -b }
elseif ($1 == .say) { echo :: Bot Say :: | amsg Controlled by: $nick | amsg $2- }
}
}
I added the $left section to prevent all these ifs from being checked if the notice doesn't start with "." That should make it a bit faster. You can make it even faster yet (i.e. less lines to check), if you move the commands that you are planning to use most often to the top. So, if you use .say more than anything else, that should be the first check.
Now, remember that # and $chan will not be filled on a private notice. You need to specify the channels in some manner for those parts to work.