Aqui está a ideia básica. Estou assumindo que você precisará adicionar alguma condição à função para que todos os usuários não sejam adicionados ao grupo de moderadores quando sua função for alterada.
function add_user_to_discourse_group_on_role_change( $user_id, $role ) {
$sso_params = array(
'external_id' => $user_id,
'moderator' => 'true', // os booleanos 'true' e 'false' precisam ser definidos como strings!
'add_groups' => 'volunteers' // lista separada por vírgulas, sem espaços após as vírgulas
);
DiscourseUtilities::sync_sso_record( $sso_params );
}