The other codes you've been given won't work if someone provides a mode change that involves more than just +a (ie. /mode #channel +ma nickname will break all of them). Here's a little bit of code to provide events for every mode change:

Code:
on ^*:rawmode:#:{
  ; Creates signals in the form mode<sign><modechar>
  var %i = 1, %parm = 1, %sign
  while $mid($1, %i, 1) != $null {
    var %char = $ifmatch
    if (%char isin +-) %sign = %char
    else {
      if (%sign == + && %char isin $gettok($chanmodes,1-3,44) $+ $nickmode) || (%sign == - && %char isin $gettok($chanmodes,1-2,44) $+ $nickmode) {
        inc %parm
        .signal -n $+(mode, %sign, %char) # $nick $eval($ $+ %parm,2)
      }
      else .signal -n $+(mode, %sign, %char) # $nick
    }
    inc %i
  }
  ; Uncomment line below to hide default event
  ; haltdef
}



So to do something with +a/-a events, you would create two signals like this:
Code:
on *:signal:mode+a:{
  ; $1 is channel, $2 is nick, $3 is parameter
  [color:red]Your commands here for +a events[/color]
}

on *:signal:mode-a:{
  ; $1 is channel, $2 is nick, $3 is parameter
  [color:red]Your commands here for -a events[/color]
}


Spelling mistakes, grammatical errors, and stupid comments are intentional.